【问题标题】:Weak entities and foreign keys弱实体和外键
【发布时间】:2017-05-22 17:43:06
【问题描述】:

引用维基百科,弱实体“必须使用外键及其属性来创建主键。” ,并且“存在依赖于另一个实体”。 但是如果没有(部分)PK和FK,一个实体就不能依赖于另一个实体的存在吗?

在经典的 Order - OrderLine - Product 关系中,OrderLine 是一个弱实体,因为它的 PK 由来自其他实体的两个 FK 组成,比如 orderID 和 productID。

但是 Order 实体呢?假设它看起来像这样:

Order( orderID   - not null, Primary key,
    costumerID - not null, Foreign key,
    date,
    status,
    ...)

很明显,如果没有客户(costumerID),订单就不能存在,但同时,costumerID 不是主键的一部分。

  1. 那么,在这种情况下,Order 实体是弱实体吗?
  2. 如果我们省略了 FK customerID 的 NOT NULL 约束怎么办?秩序不再是一个弱者,对吧?

【问题讨论】:

    标签: database-design entity-relationship


    【解决方案1】:

    一个实体可以依赖于另一个实体(与另一个实体的关系)而不是弱实体。这称为全参与,在 ER 图中用双角色线表示。

    在您的示例中,如果 OrderLine 的 PK 由 orderID 和一个区别属性组成,则 OrderLine 将是一个弱实体,例如line_number。如果它的 PK 由两个 FK 组成,我们将其称为关系。

    您的Order 示例显示完全参与了它与Customer 的关系(该关系由两个实体键列(orderID,customerID) 表示)。它不是一个弱实体,因为它有自己的标识符,即orderID。如果我们省略 NOT NULL 约束,Order 将部分参与它与Customer 的关系。

    另见我对is optionality (mandatory, optional) and participation (total, partial) are same?的回答

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多