我有一个表格,用于存储核对表问题的答案,其中核对清单的格式为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
答案 0 :(得分:0)
如果您有很多选项,通常会创建一个单独的表,只有id和描述(或名称)。要连接这两个表,您需要在CHECKLIST_ANSWER表中插入一个字段,并将其定义为外键,该外键引用新表的id(主键),我先提到过。
希望很明显:)
答案 1 :(得分:0)
如果我正确理解您的问题,您正在寻找有关如何在架构中存储新类型答案的建议吗?
由于这是一种新的答案,您需要表明数据的格式现在与您的y / n / na答案类型不同。您可以通过在CheckListAnswerType
表格中添加另一个表格FK
和CHECKLIST_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_VALUE
或QUANTITY_VALUE
为空(但不是两者)。
没有充分的理由创建第二个几乎相同的表,其中只有一列变化。根据我的经验,这往往导致比单表解决方案更多的问题(它实际上是使用动态SQL的邀请)。
我绝对不会重复使用现有列(如另一个答案所示),因为这会阻止在切换值上使用外键。