Database design 数据库设计问题:两个表之间的中间表可能会导致太多的结果

Database design 数据库设计问题:两个表之间的中间表可能会导致太多的结果,database-design,oracle9i,Database Design,Oracle9i,我必须设计一个数据库来处理表单 基本上,一个表单需要(精确地)逐个通过7个人。每个人都可以同意或拒绝表格。 如果有人拒绝,链条就会停止,而下面的人甚至不会得到通知,说有表单 现在我想到了这三个表格:表格、人物和中间的反应。然而,我的第一个解决方案听起来太重了,因为每个表单最多可以有7个响应 这是我们中间的桌子。这意味着每个成功的表单在表响应中有7行 在这里,我们可以直接在表单中找到响应信息。它看起来很难看,但至少让一切尽可能的奇异。坏的一面是,我无法追踪回复日期,但我认为这对这件事并不重要

我必须设计一个数据库来处理表单

基本上,一个表单需要(精确地)逐个通过7个人。每个人都可以同意或拒绝表格。
如果有人拒绝,链条就会停止,而下面的人甚至不会得到通知,说有表单

现在我想到了这三个表格:表格、人物和中间的反应。然而,我的第一个解决方案听起来太重了,因为每个表单最多可以有7个响应


这是我们中间的桌子。这意味着每个成功的表单在表响应中有7行


在这里,我们可以直接在表单中找到响应信息。它看起来很难看,但至少让一切尽可能的奇异。坏的一面是,我无法追踪回复日期,但我认为这对这件事并不重要

你对此有何看法?我觉得他们两个都错了,我不知道如何解决这个问题。

如果这很重要,我将使用Oracle 9。

在这两个选项中,我主张使用第一个选项,因为如果业务流程发生变化,它将更加灵活,并且需要(比如)9个响应


如果您担心存储问题,我希望平均而言,与大表单的单个副本相比,存储“多达”7个小表单副本所需的空间要少。

在这两个副本中,我建议使用第一个选项,因为如果业务流程发生变化,它会更灵活,并且需要(比如)9个响应


如果您担心存储问题,我希望平均而言,存储“多达”7份较小表单的副本所需的空间比存储单个较大表单的副本所需的空间要少。

第一种解决方案似乎更好。
然后,您可以通过执行简单的SQL:…WHERE response.isapproved=False来检查是否有人对其进行了拒绝。否则,您必须检查主表中的所有7个字段。

第一个解决方案似乎更好。
然后,您可以通过执行简单的SQL:…WHERE response.isapproved=False来检查是否有人对其进行了拒绝。否则,您必须检查主表中的所有7个字段。

+1还可以想象“显示Joe本月批准的所有表单”的查询+我还可以想象“显示Joe本月批准的所有表单”的查询+1有些人会说第二个选项甚至不是第一个正常形式(没有重复组)。虽然严格来说这不是真的,但任何包含列xxx1、xxx2、。。。xxxn通常是糟糕数据库设计的标志。我匆忙地做了这件事。严格来说,名字是不同的,比如经理、服务负责人、财务、主管、人力资源联系人等。这都是某种等级制度的一部分,这就是为什么表格必须一个接一个地批准,最后一个人是“所有人中的大老板”。这很公平,在某种程度上也没有那么不合理,因为这些栏现在有不同的含义。但它仍然缺乏灵活性,例如,如果将来公司决定从批准者列表中删除人力资源联系人,或将营销经理添加到批准者列表中。是的,我同意。他们确实告诉我,它在将来不会改变,但从程序员的角度来看,这是很难做到的,我同意第二个选项根本不允许改变。+1有些人会说第二个选项甚至不是第一个正常形式(没有重复组)。虽然严格来说这不是真的,但任何包含列xxx1、xxx2、。。。xxxn通常是糟糕数据库设计的标志。我匆忙地做了这件事。严格来说,名字是不同的,比如经理、服务负责人、财务、主管、人力资源联系人等。这都是某种等级制度的一部分,这就是为什么表格必须一个接一个地批准,最后一个人是“所有人中的大老板”。这很公平,在某种程度上也没有那么不合理,因为这些栏现在有不同的含义。但它仍然缺乏灵活性,例如,如果将来公司决定从批准者列表中删除人力资源联系人,或将营销经理添加到批准者列表中。是的,我同意。他们确实告诉我,这在将来不会改变,但从程序员的角度来看,这是很难做到的,我同意第二个答案根本不可能。我不能把两个答案都勾选出来,但我认为它们都非常有用。谢谢。我不能把两个答案都勾选出来,但我认为它们都很有用。非常感谢。