【问题标题】:Can I Have FK in 2NF and 3NF in Relational Schema?我可以在关系模式中拥有 2NF 和 3NF 的 FK 吗?
【发布时间】:2013-10-13 07:29:11
【问题描述】:

所以基本上我是在规范化发票,在所有 2NF RELATIONAL SCHEMA'S 中包含 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 客户 (*C_ID, C_NAME,C_NAME,C_STR,C_STATE)

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

2NF 劳动力*LBR_NUM、LBR_DESC、LBR_PRICE)

【问题讨论】:

  • “传递依赖”C_STATE--> TAX_RATE 是什么意思?传递依赖关系在 3 个属性之间。
  • 这是我的书传递依赖中传递依赖的定义 – X-> Y, Y->Z (X 是 PK) 因此,X -> Z 是传递依赖 – 传递依赖存在仅当非主属性之间存在函数依赖关系时(例如,Y->Z)。 • 非主键 = 不是任何候选键的一部分 • 候选键 = 最小超键
  • 在我的问题的业务规则中,它说 Tax_Rate 是根据客户的状态计算的,所以我是如何得出这个假设的。
  • 通常的符号是 X -> Y -> Z,它暗示 X -> Z,但反之则不然,所以它们不是等价的符号。所以如果你只是说 C_STATE--> TAX_RATE,那并不能告诉我们这应该是一个传递依赖,也不能告诉我们哪个是“中间”属性。顺便说一句,在 3NF 的上下文中,哪些属性是素数变得很重要。

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


【解决方案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. 让一切暂时化。


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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-12
    • 2016-03-19
    • 2014-02-28
    • 1970-01-01
    • 2013-05-11
    • 2015-07-20
    • 1970-01-01
    相关资源
    最近更新 更多