规范化一个数据库,其中B依赖于a, C依赖于a,但D依赖于B+C



假设我要保存我销售的产品的发货记录。

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 CostTotal Cost没有约束(特别是它们可以单独或成对地在不同的行中重复),这对不构成表的超键。因此,如果表中包含任何其他在功能上仅依赖于该对的列,则该表不可能是第三范式。

如果期望Total Cost总是等于Item Cost + Shipping Cost,则构成了对Item CostShipping Cost的功能依赖,这意味着表不在3NF中。您可以通过删除Total Cost列将表转换为3NF。这里的线索可能是删除列不会丢失任何数据。

如果你假设一个计算系统不能执行算术(或者一个不能直接计算的关系),那么你可以把Total Cost移到一个单独的表中,有列(Item Cost, Shipping Cost, Total Cost),而不是完全删除它。不过,对于这种特殊情况,这似乎相当愚蠢。

我没有看到Sold toSale Date列的任何规范化问题。据我所知,每个都完全依赖于Product列,我将其作为表的唯一候选键的唯一成员。

最新更新