如果我有以下 ERD:
------
|Inv |
---------
1
|
<<contains>>
|
m
--------
-------- ---------
||Line || 1 --- <<has a>> --- 1 | prod |
-------- ----------
--------
如果 Line
是弱实体,并且 contains
和 has a
是弱关系,那么 Line 的主键是什么样的?
我一直在网上查找,我想这将是一个复合主键,其中包含:
PK = (ID from line, Primary Key from Inv, Primary Key from Prod)
谁能帮帮我吗?我对吗?我哪里出错了?等等
最佳答案
I've been looking online and I'd like to think it would be a composite primary key consisting of:
PK = (ID from line, Primary Key from Inv, Primary Key from Prod)
不,Inv 中的主键和行项目编号足以识别表“Line”中的行。如果您想实现进一步的业务需求(每个产品在每张发票上只能出现一次),您可以对一对列 {value from Inv, value from Prod} 进行额外的唯一约束。
实际上,我不会在“Inv”或“Line”中使用自动递增 ID 号。自动递增 ID 号可能会留下空白,而会计师讨厌空白。推而广之,数据库人员也讨厌这些数字中的差距。 (我们是那些因“丢失”行而受到指责的人。)
您在存储产品的 ID 号时也需要小心。如果产品名称发生变化,则所有过去的发票上的名称都会发生变化。这是在法庭上攻击法官的好方法。
关于mysql - 了解弱实体和弱关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15074590/