数据库表设计用于存储对问题的是,否和数量类型响应

时间:2012-03-27 14:40:32

标签: sql database database-design

我有一个表格,用于存储核对表问题的答案,其中核对清单的格式为yes, no, not applicable, or resolved

 Table: CHECKLIST_ANSWER
        ATTRIBUTE_ID PK, FK
        CHECKLIST_INSTANCE_ID PK, FK
        TOGGLE_VALUE (1=yes, 2=No, 3=n/a, 4=was a no then it was resolved)
        FAIL_REASON

ATTRIBUTE_ID是问题表的外键,即Was the part measured within some tolerance?

现在我想建立一个存储数量响应的清单,即How many incorrect dimensions were found on the drawing?

我确信我可以将这些问题存储在与yes / no / na类型属性相同的表中,但是我可以使用相同的表来存储数量值吗?我应该添加一个新列说QUANTITY_VALUE吗?然后,根据属性,QUANTITY_VALUE或TOGGLE_VALUE将为null。

 Table: CHECKLIST_ANSWER
        ATTRIBUTE_ID PK, FK
        CHECKLIST_INSTANCE_ID PK, FK
        TOGGLE_VALUE (1=yes, 2=No, 3=n/a, 4=was a no then it was resolved)
        QUANTITY_VALUE
        FAIL_REASON

此数据库应用程序的目标是在线移动纸张和Excel格式清单并捕获到Oracle中,以提供更有效的度量标准收集,然后更好地聚合输入。我是不是要把两个人混合成一张桌子来解决问题?或者我应该创建一个表CHECKLIST_QTY_ANSWER

3 个答案:

答案 0 :(得分:0)

如果您有很多选项,通常会创建一个单独的表,只有id和描述(或名称)。要连接这两个表,您需要在CHECKLIST_ANSWER表中插入一个字段,并将其定义为外键,该外键引用新表的id(主键),我先提到过。

希望很明显:)

答案 1 :(得分:0)

如果我正确理解您的问题,您正在寻找有关如何在架构中存储新类型答案的建议吗?

由于这是一种新的答案,您需要表明数据的格式现在与您的y / n / na答案类型不同。您可以通过在CheckListAnswerType表格中添加另一个表格FKCHECKLIST_ANSWER来完成此操作。

但是,您的CHECKLIST_INSTANCE_ID可以很容易地表明这是一种遵循特定答案模式的核对表。我不确定您的架构的其余部分是否可以使用CHECKLIST_INSTANCE表来指定它的答案类型...

您的TOGGLE_VALUE可以遵循新答案类型的数字方案,并且前面提到CheckListAnswerType您可以并且在查询数据时必须始终考虑到这一点,以确保您没有选择给出问题上下文的错误答案类型,以便在查找How many incorrect dimensions were found on the drawing?答案时没有得到“是”值。

我认为所有这些都没问题,直到你想开始存储不同数据类型的答案。然后是重新设计架构的时候了。

TL; DR:如果您使用相同的数据类型获得答案,那么您可以重新使用现有架构(列),同时添加一种方式来告诉答案或问题/答案,类型分开准确查询。如果要在TOGGLE_VALUE中存储其他数据类型,请实现新的模式对象。如果可以避免,请不要尝试强制其他数据类型进入当前模式。此外,如果您这样做,请考虑重命名TOGGLE_VALUE,因为它不再代表切换。 answerValue可能更适合新设计。

答案 2 :(得分:0)

我认为将新列添加到现有表时没有任何问题。我会包含一个检查约束,要求TOGGLE_VALUEQUANTITY_VALUE为空(但不是两者)。

没有充分的理由创建第二个几乎相同的表,其中只有一列变化。根据我的经验,这往往导致比单表解决方案更多的问题(它实际上是使用动态SQL的邀请)。

我绝对不会重复使用现有列(如另一个答案所示),因为这会阻止在切换值上使用外键。