了解弱势实体和弱关系

时间:2013-02-25 19:12:39

标签: mysql sql database erd

如果我有以下ERD:

 ------
|Inv   |
---------
   1

   |
 <<contains>>

   |
   m
--------
--------                             ---------
||Line  ||  1 --- <<has a>> --- 1  | prod     |
--------                            ----------
--------

Line是弱实体,containshas a是弱关系,Line的主键是什么样的?

我一直在网上看,我想它会是一个复合主键,包括:

PK = (ID from line, Primary Key from Inv, Primary Key from Prod)

任何人都可以帮助我吗?我对吗?我哪里出错了?等

1 个答案:

答案 0 :(得分:1)

  

我一直在网上看,我想它会是一个复合主键,包括:

PK = (ID from line, Primary Key from Inv, Primary Key from Prod)

不,来自Inv的主键和行项目编号足以识别“Line”表中的行。如果您想要实现进一步的业务要求 - 每个产品每个发票只能出现一次 - 您可以对这对列{{来自Inv的值,来自Prod的值}进行额外的唯一约束。

实际上,我不会在“行”中的“Inv”中使用自动增量ID号。自动增加身份证号码会留下空白,会计师会讨厌差距。通过扩展,数据库人员也讨厌这些数字中的差距。 (我们是那些因“缺失”行而受到指责的人。)

您还需要注意存储产品的ID号。如果产品名称发生更改,则所有过去的发票似乎都会更改。这是在法庭上处理法官不利方面的好方法。