table 的归一化

normalization of a table

我有这个 table,我必须标准化到 3nf

假设如下:

到目前为止我已经做到了

1FN

Orders (OrderNum, OrderDate, (ProductId,ProductDesc),(CustId,CustomerName,CustomerAddress, OrderNum))

2FN

Orders(OrderNum, OrderDate)
Orders_Product(OrderNum,  ProductId)
Product(ProductId, ProductDesc)
Customer_Orders(OrderNum, CustId)
Customer(CustId,CustomerName,CustomerAddress)

3 NF

table已经满足 3NF

Orders(OrderNum, OrderDate)
Orders_Product(OrderNum,  ProductId)
Product(ProductId, ProductDesc)
Customer_Orders(OrderNum, CustId)
Customer(CustId,CustomerName,CustomerAddress)

依赖关系

OrderNum  OrderDate,ProductId,ProductDesc,CustId, CustomerName, CustomerAddress 
    ProductId  ProductDesc
    CustId   CustomerName, CustomerAddress

我的 2NF 和 3Nf 正确吗?

根据 Wiki 的定义:如果 table 在 1NF 中并且 没有非素数属性依赖于任何候选的任何适当子集,则它在 2NF 中table 的键。您的大多数 tables 只有 2 列,因此他们对此感到满意。对于Customer(CustId,CustomerName,CustomerAddress),候选键是CustId,其他2列完全依赖于整个候选键,那就OK了。

对于 3NF,Wiki 说:table 中的所有属性仅由 table 的候选键决定,而不是由任何非主要属性。如您所见,您的 table 都很满意。

不过,正如你所说:

An Order belongs to one and only one customer

所以,我认为您不需要 Customer_Orders 号码。您应该删除它,并将 CustId 放在 Orders table 中。因此,您的 Orders table 将如下所示:Orders(OrderNum, OrderDate, CustId)