如何将示例数据表拆分为BCNF / 4NF?

时间:2013-09-01 03:56:55

标签: mysql sql sql-server database database-design

我正在尝试更好地掌握简单的数据库概念,并且在更高的规范化方面遇到了麻烦。例如,Boyce Codd Normal Form(BCNF)&在第4范式(4NF)?

INVOICE(CustomerNumber,FirstName,LastName,Phone,InvoiceNumber,DateIn,DateOut,ItemType,Quanitty,ItemPrice,ExtendedPrice,SpecialInstructions)

到目前为止我做到了这一点,但我知道我还没到那里:

CUSTOMER(CustomerNumber,FirstName,LastName,Phone,InvoiceNumber) INVOICE(InvoiceNumber,DateIn,DateOut,ItemType,Quantity,ItemPrice,SpecialInstructions)

根据我正在阅读的书,已经有以下假设:

  1. CustomerNumber - > (FirstName,LastName),但不是CustomerNumber - > - > (FirstName,LastName)
  2. CustomerNumber - > - >电话。可能有多个电话号码 每个客户。
  3. 一个CUSTOMER有许多ORDERS,但每个ORDER只与之关联 一个CUSTOMER。
  4. 一个ORDER有许多ItemTypes,但每个ItemType只出现一次 任何订单。
  5. 商品价格因订单而异,因此ItemType确定 ITEMPRICE。
  6. SpecialInstructions与每个项目类型相关联,因为 可以针对不同的项目给出不同的说明。
  7. 订单号是分配给订单本身的号码,没有 与任何特定客户的关联。因此我们有这样的数字 如“123454”,123455“等,而非”客户101,订单1“, 客户101,订单2“,客户102,订单1”等
  8. ItemPrice可能因订单而异,因此特价定价优惠 反映在价格中。
  9. 任何人都可以帮助我吗?