假设我有一个网站,任何人都可以在其中买卖商品,并且 2 个注册用户可以互相发送有关产品的消息。我的数据库中的关系之一是:
Message
--------
idMessage (PK)
Sender
Recipient
idObject
Subject
当然,发件人或收件人之一应该是产品的卖方或买方。我的问题是这种关系是否处于第三范式。当然它是第二范式,因为每个非键列在功能上都完全依赖于主键。
示例:假设userB
是产品的卖家(所有者)#1234
并且userA
是产品的卖家(所有者)#1000
。我们有下表:
idMessage| Sender| Recipient | idObject| Subject
________________________________________________
1 | userA | userB | #1234 | size
2 | userB | userC | #1234 | discount
3 | userA | userB | #1000 | size
显然,idObject
在上表中确定了产品的卖家。在每种情况下,卖方都必须在“发件人”列或“收件人”列中。关键是 [Sender] 或/和 [Recipient] 无法确定 idObject,如我们在上面的示例中所见。因此,我们有 3NF,因为所有非键列在功能上仅依赖于主键。