【发布时间】:2013-09-04 11:47:50
【问题描述】:
我正在尝试更多地掌握简单的数据库概念,但在更高的规范化方面遇到了麻烦。例如,以下在 Boyce Codd 范式 (BCNF) 和第四范式 (4NF) 中会是什么样子?
INVOICE(CustomerNumber、FirstName、LastName、Phone、InvoiceNumber、DateIn、DateOut、ItemType、Quantity、ItemPrice、ExtendedPrice、SpecialInstructions)
到目前为止,我已经做到了,但我知道我还没有做到:
客户(客户编号、名字、姓氏、电话、发票号码) INVOICE(InvoiceNumber, DateIn, DateOut, ItemType, Quantity, ItemPrice, SpecialInstructions)
根据我正在阅读的书,以下假设已经到位:
- CustomerNumber --> (FirstName, LastName),但不是 CustomerNumber -->-->(名,姓)
- 客户编号 -->--> 电话。可能有多个电话号码 每个客户。
- 一个客户有很多订单,但每个订单只与 一位客户。
- 一个 ORDER 有多个 ItemType,但每个 ItemType 在 任何订单。
- 商品价格不会因订单而异,因此 ItemType 确定 商品价格。
- SpecialInstructions 与每个项目类型相关联,因为 可能会针对不同的项目给出不同的说明。
- 订单号是分配给订单本身的编号,没有 与任何特定客户的关联。因此我们有这样的数字 如“123454”、123455 等,而不是“客户 101,订单 1”, 客户 101,订单 2”,客户 102,订单 1”,等等。
- ItemPrice 可能因订单而异,因此特价优惠是 反映在价格中。
谁能帮帮我?
【问题讨论】:
-
这可能属于Database Administrators。只是对于初学者来说,
INVOICE应该有一个到Customer的 FK,而不是像你所拥有的那样。 -
你能告诉我它应该是什么样子 4NF 吗?
-
项目不应在 Invoice 表中,而应在 InvoiceItems 表中。您假设发票只能包含一项。
标签: mysql sql sql-server database database-design