gpt4 book ai didi

sql - 表的规范化

转载 作者:行者123 更新时间:2023-12-01 13:49:37 26 4
gpt4 key购买 nike

我有这张表,我必须标准化到 3nf

假设如下:

  • 一个订单可以包含多个产品

  • 每次客户下订单时,他们都会得到一个新的订单号

  • 一个订单只属于一个客户

    订单(OrderNum、OrderDate、(ProductId、ProductDesc)、CustId、CustomerName、CustomerAddress)

到目前为止我已经做到了

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

表格已经满足 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 中的定义:如果表在 1NF 中并且没有非主属性依赖于表的任何候选键的任何适当子集,则该表在 2NF 中。您的大多数表格只有 2 列,因此他们对此感到满意。对于Customer(CustId,CustomerName,CustomerAddress),候选键为CustId,其他2列完全依赖于整个候选键,就OK了。

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

但是,正如你所说:

An Order belongs to one and only one customer

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

关于sql - 表的规范化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32959351/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com