2013-02-25 79 views
0

如果我有下面的ERD:了解弱实体和弱关系

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

    | 
<<contains>> 

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

Line是一个弱实体,并containshas a是弱关系,你会为行的主键是什么样子?

我一直在寻找在线,我想,认为这将是由一个复合主键:

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

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

回答

1

我一直在寻找在线,我想,认为这将是由一个复合主键:

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

没有,从INV而行的主键料号足以识别表格“行”中的一行。如果您想要实现进一步的业务需求 - 每个产品只能在每个发票中出现一次 - 您可以对这对列进行额外的唯一约束{来自Inv的值,来自Prod的值}。

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

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