我意识到在很多情况下,“无”可能看起来不那么糟糕。但是,我想在另一个表中使用此特定查找表(数千行)中的值,该表包含几个与查询表中的数据直接相关的非可空字段。
真实情景:
查询表是一般药品名称列表,包含用于加入与我们的应用程序分开的其他数据库的代码。
我们有一个处方表,存储DrugId,OrderId(FK),频率,剂量等,所有这些都是目前不可空的。
在某些情况下,订单的处方信息是必需的,因此仅仅通过没有记录(而没有其他跟踪手段)来解决问题是不够的 - 我们需要能够知道为什么没有输入处方,并能够在以后查看数据时重新填充正确的原因。
一个想法是添加“无”作为药物查找表的一部分,它构成了这个问题的基础。我担心采取这种方法有几个原因:
解决这种情况的其他想法是:
在订单中添加一个新列,其中包含“有处方”,“已拒绝”,“无处方”等选项。这是不可取的,因为成千上万的行将为“空”,但在其他方面似乎并不太糟糕。
创建一个新表,仅记录“例外”案例,例如“无”或“不知道”,以了解何时需要该字段。目前,这是最吸引我的那个,因为它创造了非常明显的特殊情况,必须加以考虑。当然,缺点是一个新表(一零关系),列数非常少。这似乎是用于重新填充UI的最简单的数据形式。
SO社区的想法?
答案 0 :(得分:1)
你不应该只是这样做吗?
(可能带有确保订单失败的触发器无法处方。)
或者,您实际上需要为每个处方单独设置失败原因吗?
答案 1 :(得分:0)
您可以添加两个要订购的字段
LookupValueID NULL FK,
PrescriptionType tinyint
使用PrescriptionType = (Present = 1, Null = 2, Declined = 3, DontKnow = 4, ...)
并添加CHECK约束:
(PrescriptionType = 1 AND LookupValueID IS NOT NULL)
OR (PrescriptionType <> 1 AND LookupValueID IS NULL)
这样,您可以将常数特殊情况内联到主表(我认为Orders
)中,并使用约束强制执行数据正确性。