0

如果我有以下 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)

谁能帮我吗?我对吗?我哪里做错了?等等

4

1 回答 1

1

我一直在网上寻找,我想这将是一个复合主键,包括:

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

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

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

您还需要小心存储产品的 ID 号。如果产品名称发生变化,它似乎会在所有过去的发票上发生变化。这是在法庭上对法官不利的好方法。

于 2013-02-25T22:00:16.190 回答