gpt4 book ai didi

mysql - 是否值得规范化?

转载 作者:搜寻专家 更新时间:2023-10-30 23:13:44 24 4
gpt4 key购买 nike

我正在研究数据库并且遇到了这个问题。例如,如果我有表 product_supply,其中包含 Invoice_Id(pk)、Product_Id(pk)、Date_Of_Supply、Quantity 和 Value_Of_Product。

   | Invoice_ID | Product_ID | Date_Of_Supply | Quantity | Value_Of_Product |
-------------------------------------------------------------------------
| AA111111111| 5001 | 08-07-2013 | 50 | 200$ |
| AA111111111| 5002 | 08-07-2013 | 20 | 300$ |
| BB222222222| 5003 | 10-09-2013 | 70 | 50$ |
| CC333333333| 5004 | 15-10-2013 | 100 | 40$ |
| CC333333333| 5005 | 15-10-2013 | 70 | 25$ |
| CC333333333| 5006 | 15-10-2013 | 100 | 30$ |

如我们所见,该表已经是 1NF 形式。我的问题是。就规范化而言,将此表规范化为 2NF 形式并拥有另一个表(例如 supply_date with Invoice_ID(pk) 和Date_Of_Supply 或是否可以使用上表?

    | Invoice_ID | Date_Of_Supply |
-------------------------------
|AA111111111 | 08-07-2013 |
|BB222222222 | 10-09-2013 |
|CC333333333 | 15-10-2013 |

最佳答案

绝对值得规范化。如果你需要修改供应日期,使用 1NF,你需要更新几条记录;使用 2NF,您只需要更新一条记录。另外,请注意 1NF 中的数据冗余,其中为每个发票 ID 多次存储供应日期。这不仅会浪费空间,还会使处理诸如“列出日期 X 和 Y 之间提供的所有发票”之类的查询变得更加困难。

编辑

正如 Robert Harvey 在他的评论中指出的(我花了一段时间才理解,因为出于某种原因我太笨了),如果你已经有一个表,每个 Invoice_ID(例如,“发票表”),那么您可能应该将 Date_Of_Supply 列添加到该表,而不是创建新表。

关于mysql - 是否值得规范化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17057179/

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