弱实体和外键

4
引用维基百科的话:“弱实体必须使用外键与其属性一起创建一个主键。”,且“存在于另一个实体上”。但是一个实体不可能依赖于另一个实体的存在而没有(部分)主键和外键吗?
在传统的订单-订单行-产品关系中,订单行是一个弱实体,因为它的主键由其他实体的两个外键组成,比如orderID和productID。
那么订单实体呢?假设它长这样:
Order( orderID   - not null, Primary key,
    costumerID - not null, Foreign key,
    date,
    status,
    ...)

很明显,订单不能没有客户(客户ID),但同时,客户ID不是主键的一部分。

  1. 那么,在这种情况下,订单实体是否是弱实体?
  2. 如果我们省略了FK customerID的NOT NULL约束,订单将不再是一个弱实体,对吗?
1个回答

2
一个实体可以在与另一个实体的关系中存在依赖,而不是弱实体。这被称为总参与度,并在ER图中用双角色线表示。
在您的示例中,如果OrderLine的PK由orderID和一个区分属性(例如line_number)组成,则它将是一个弱实体。如果其PK由两个FK组成,则我们将其称为关系。
您的Order示例显示了它与Customer的关系的总参与度(该关系由两个实体键列(orderID,customerID)表示)。它不是一个弱实体,因为它有自己的标识符,即orderID。如果我们省略NOT NULL约束,则Order将在其与Customer的关系中部分参与。
还请参阅我对是否选项(强制、可选)和参与度(总体、部分)相同?的答案。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接