我正确地正常化了吗?

时间:2015-07-10 01:01:52

标签: mysql sql database normalization database-normalization

user view

做一些练习题,只是想知道我是否正确归一化。谢谢。

非标准化表

INVOICE [Invoice#(pk), InvoiceDate, Sales, Cust#,
          (EquipClass, EquipClassDesc, Equip#, EquipDesc, EquipCharge, EquipQTY)]

1NF表

INVOICE [Invoice#(pk), InvoiceDate, Sales, Cust#]
Equipment [ Invoice#(pk), Equip#,(pk), EquipClass, EquipClassDesc,
            EquipDesc, EquipCharge, EquipQTY)]

2NF表

INVOICE [Invoice#(pk), InvoiceDate, Sales, Cust#]
Equipment [Equip#,(pk), EquipClass, EquipClassDesc, EquipDesc, EquipCharge]
INVOICE_Equipment [Invoice#(pk) (FK), Equip# (pk) (FK), EquipQTY]

3NF表

INVOICE [Invoice#(pk), InvoiceDate, Salesperson#(fk)]
Salesperson [Salesperson#(pk), SalespersonName]
Invoice_SalesPerson [Invoice#(pk)(fk), Salesperson#(pk)(fk), Cust#]
Equipment [Equip#,(pk), EquipClass(fk), EquipDesc, EquipCharge,]
Equipment_Class [EquipClass(pk), EquipClassDesc]
INVOICE_Equipment [Invoice#(pk) (FK), Equip# (pk) (FK), EquipQTY]

1 个答案:

答案 0 :(得分:1)

由于非标准化,1NF和2NF表从未提及销售人员,因此当您在先前的模式中从2NF进展到3NF时,没有基础进行拆分和添加。

此外,发票更可能直接与客户和销售人员相关联(它将具有对客户表(在架构中未标识)和销售员表的独立FK引用)。 Invoice_SalesPerson表看起来很虚假,从Invoice中删除客户编号看起来很可疑。它可以按照你展示的方式完成,但是如果没有明确,冗长,有说服力地解释为什么那是必要的,我永远不会将其标记为正确(我仍然怀疑它是不必要的)。