如果我有以下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)
任何人都可以帮助我吗?我对吗?我哪里出错了?等
答案 0 :(得分:1)
我一直在网上看,我想它会是一个复合主键,包括:
PK = (ID from line, Primary Key from Inv, Primary Key from Prod)
不,来自Inv的主键和行项目编号足以识别“Line”表中的行。如果您想要实现进一步的业务要求 - 每个产品每个发票只能出现一次 - 您可以对这对列{{来自Inv的值,来自Prod的值}进行额外的唯一约束。
实际上,我不会在“行”中的“Inv”或中使用自动增量ID号。自动增加身份证号码会留下空白,会计师会讨厌差距。通过扩展,数据库人员也讨厌这些数字中的差距。 (我们是那些因“缺失”行而受到指责的人。)
您还需要注意存储产品的ID号。如果产品名称发生更改,则所有过去的发票似乎都会更改。这是在法庭上处理法官不利方面的好方法。