我有一个可以为winnerID
的可归属性,该属性会根据竞价的出价不断更新。
此属性设置为最后保存一段时间以计算谁赢得了竞价。但是这个值最初是空的。
这会违反第三范式吗?我知道1NF的规则4声明我不能有可空的属性,但是说明这是一个有争议的陈述。
请您为我澄清这个问题?谢谢!
答案 0 :(得分:3)
在SQL中定义空值的方式 - 作为无法与域值进行比较的非值 - 意味着它们违反了1NF(以及所有更高的法线形式)。关系(由规范化表表示的数学结构)对于每一行的每列必须具有单个值。 Nulls意味着我们没有值,可空列意味着我们在一个表中有两个关系 - 一个超类型关系,它包括除可空列之外的所有列,以及一个子类型关系,它具有相同的主键和先前可为空的列,我们只能记录属性已知的行。归一化的目的是将数据集分解为基本事实而不丢失信息,因此在单个表中使用两个关系与目标相矛盾,使得关系代数/微积分等事情变得更加复杂。
正常形式是正式的逻辑定义结构,而不是可以适应形势的工业最佳实践,因此我没有看到太多的争议空间。我们是否应该使用它们以及如何处理它们是一个更有趣的话题。
虽然空值违反了普通表单,但并不意味着您不能在SQL数据库中使用空值。它们既有风险也有好处。我也使用它们,但需要考虑。