我可以在关系模式中使用2NF和3NF的FK吗?

时间:2013-10-06 19:05:21

标签: database-design database-schema rdbms relational database-normalization

所以基本上我正在规范发票,在所有 2NF 关系模式中包含FK * INV_NUM *是错误的。这就是我已经拥有的。

*显示PK

1NF * INV_NUM ,INV_DATE,C_ID,C_NAME,C_STR,C_STATE,PART_NUM,PART_DESC,PART_QUANUSED,PART_PRICE,LBR_NUM,LBR_DESC,LBR_PRICE,TAX_RATE)

部分依赖

  • (C_ID - > C_NAME,C_NAME,C_STR,C_STATE)
  • (PART_NUM - > PART_DESC,PART_QUANUSED,PART_PRICE)
  • (LBR_NUM - > LBR_DESC,LBR_PRICE)

传统依赖

  • (C_STATE - > TAX_RATE)

2NF CUSTOMER * C_ID ,C_NAME,C_NAME,C_STR,C_STATE)

2NF PART * PART_NUM ,PART_DESC,PART_QUANUSED,PART_PRICE)

2NF LABOR * LBR_NUM ,LBR_DESC,LBR_PRICE)

1 个答案:

答案 0 :(得分:1)

  

所以基本上我正在规范发票,......

其实不,不是真的。

发票本质上是时间,因此INV_DATE非常重要。

换句话说,
FD {C_STATE} -> {TAX_RATE},但是{C_STATE, INV_DATE} -> {TAX_RATE}

FD {C_ID} -> {C_STATE},但是{C_ID, INV_DATE} -> {C_STATE}

FD {PART_NUM} -> {PART_PRICE},但是{PART_NUM, INV_DATE} -> {PART_PRICE}

等,...

所以你的选择是

  1. 保留(发票表)原样(似乎没问题)

  2. 全力以赴。


  3. 发票(也是采购订单......)的常见设计是“捕获并冻结”当时的所有相关信息。