database-design - 弱实体和外键

标签 database-design entity-relationship

引用维基百科的话说,一个弱实体“必须将外键与其属性结合使用才能创建主键”。 ,并且“依赖于另一个实体的存在”。
但是一个实体不能在没有(部分)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),订单就不能存在,但同时,客户 ID 不是主键的一部分。
  • 那么,在这种情况下,Order 实体是否是弱实体?
  • 如果我们省略了 FK customerID 的 NOT NULL 约束会怎样?秩序不再是一个弱实体,对吧?
  • 最佳答案

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

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

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

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

    关于database-design - 弱实体和外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41531486/

    相关文章:

    ruby-on-rails - 正确的 rails 型号是什么?建议使用冗余?

    mysql - ER 模型的未知部分

    mysql - 审核产品数据的日志记录?

    mySQL 数据库创建/设计 - 不确定如何组织这样的数据

    mysql - 设计与三个实体的关系,其中两个实体没有关系

    c# - 如何向 Entity Framework 中的第三个表添加额外的列?

    database - 如何利用实体关系图对数学表达式建模?

    mysql - MySQL 中的唯一约束

    mysql - 构建配方数据库

    MySQL 数据库设计 - 无法确定表关系