relational-database - 外键与部分键及其 E-R 表示

标签 relational-database entity-relationship

我无法理解部分键/弱实体和外键之间的区别。我觉得自己像个白痴,无法理解这些东西。

据我了解:

Weak Entity: An entity that is dependent on another entity.
Partial Key: Specifies a key that that is only partially unique.  Used for weak entities.

vs

Foreign Key: A key that is used to establish and enforce a relation between data in different tables.

这些似乎不是同一回事,但我无法区分它们的用途。

以[非常]简单的例子为例:
We have employees specified by an empid.  We also have children specified by name.  A
child is uniquely specified by name when the parent (employee) is known.

子实体会是一个弱身份,其中部分键是名称(部分唯一)?或者我应该使用外键,因为我试图建立和强制执行员工和 child 之间的关系?我觉得我可以证明两者都是合理的,但我也觉得我在这里遗漏了一些东西。任何见解表示赞赏,我为愚蠢的问题道歉。

最佳答案

问题不在于你,是古教科书或者你用的什么东西都是纯排泄物,“定义”不明确,30多年的关系数据库都有标准定义,清晰多了.您发布的“定义”实际上恰恰相反,不直观,人们会感到困惑也就不足为奇了。

  • 子行中的外键是引用其父主键(在父表中)的值。
  • 使用 IDEF1X 术语。识别关系是其中 FK(子代中的父代 Pk)也用于形成子代 PK 的关系。它在父级中是唯一的,但在子级中不是唯一的,您需要添加一些列以使其唯一。因此,愚蠢的术语“部分 key ”。要么是 Key(唯一的)要么不是 Key; “部分 key ”的概念太愚蠢而无法考虑。
  • 在正确规范化和符合标准的数据库中,将有很少的独立实体。所有其余的都将依赖于某个独立实体。这样的实体并不是“弱”的,除非没有它们所依赖的实体,它们就不能存在。

    识别关系(相对于非识别)的使用实际上很强大;它为依赖(“弱”)实体提供了标识符。因此,在要求精确的科学中不应使用诸如“弱”和“强”之类的愚蠢术语。

    使用标准术语。
  • 但是要回答您的明确问题:
  • 假设 Employee 是“强”并且有一个主键 (EmployeeId)
  • 那么“弱”EmployeeChild 表将需要一个 FK (EmployeeId) 来标识 Employee
  • 这将是 EmployeeChild 表的完美第一个组件,可爱的“部分键”
  • 您可以向其中添加 ChildNo,以创建一个普通的关系主键
  • 但它并不是真正的“部分”,因为它是父级的完整主键。

  • 不熟悉关系数据库建模标准的读者可能会发现▶IDEF1X Notation◀有用。

    关于relational-database - 外键与部分键及其 E-R 表示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4846724/

    相关文章:

    ruby-on-rails - 为什么 Rails 数据库 ID 在销毁中间项后继续向前计数?

    mysql - 生成带连接的mysql erd

    时间表的数据库架构设计

    database - Facebook 数据库设计...为什么要有个人资料表?

    用于可视化数据库表关系的 Java 库

    laravel-4 - Laravel 4 - 与 Eloquent 的简单连接?

    mysql - 如何将 INNER JOIN 的输出存储在表中?

    c# - Entity Framework 中的派生类型

    database - 如何在ER图中实现IF条件?

    asp.net-mvc - 如何在 EF 中处理子级更新