假设我要保存我销售的产品的发货记录。
Product | Type | Year Made | Item Cost | Shipping Cost | Total Cost | Sold to | Sale Date |
--------+------+-----------+-----------+---------------+------------+---------+------------
Ford 30 | Car | 1962 | 1000 | 500 | 1500 | Bob | 01/22/123 |
BOXXXXX | Box | 1223 | 5 | 10 | 15 | Sam | 03/44/321 |
如何规范化最后3列?此外,在实现3NF时,我错过了什么吗?
假设对Item Cost
和Total Cost
没有约束(特别是它们可以单独或成对地在不同的行中重复),这对不构成表的超键。因此,如果表中包含任何其他在功能上仅依赖于该对的列,则该表不可能是第三范式。
如果期望Total Cost
总是等于Item Cost
+ Shipping Cost
,则构成了对Item Cost
和Shipping Cost
的功能依赖,这意味着表不在3NF中。您可以通过删除Total Cost
列将表转换为3NF。这里的线索可能是删除列不会丢失任何数据。
如果你假设一个计算系统不能执行算术(或者一个不能直接计算的关系),那么你可以把Total Cost
移到一个单独的表中,有列(Item Cost
, Shipping Cost
, Total Cost
),而不是完全删除它。不过,对于这种特殊情况,这似乎相当愚蠢。
我没有看到Sold to
和Sale Date
列的任何规范化问题。据我所知,每个都完全依赖于Product
列,我将其作为表的唯一候选键的唯一成员。