基数和外键关系

Cardinality and foreign key relationship

我是数据库设计的新手,正在尝试了解使用外键的最佳实践。我知道当你有 1:m 关系时,我们不必为关系创建关系;相反,我们可以将外键添加到关系的 m 端(对应于 1 端的主键)以保持参照完整性。然而,我的问题是:在其他什么情况下我们可以做同样的事情?当我们有 0..1 到 1 或 1-1 关系时,我们也可以这样做吗?当参照完整性与计算成本一样重要时,这种情况的最佳实践是什么?

当我们将 1:1 关系映射到关系模型时,有三种可能的方法:

  1. 外键方法:选择其中一个关系——比如S——并包含一个 S中的外键是T的主键。最好选择实体类型 在 R 中完全参与 S.

  2. 合并关系选项:1:1 关系类型的替代映射 可以通过将两个实体类型和关系合并成一个 单一关系。当双方都参与时,这可能是合适的 总计

  3. 交叉引用或关系关系选项:第三种选择 是建立第三个关系R,目的是交叉引用 表示实体类型的两个关系 S 和 T 的主键。

有关详细信息,您可以查看此 home.iitj.ac.in/~ramana/ch7-mapping-ER-EER-relations.pdf

外键约束是限制,不是引用。只要不同的列代表相同的域,关系就隐含地存在,并且它们的表可以连接,有或没有外键。该约束只是确保存储在一列中的 values/entities 存在于另一列中。它们适用于关系依赖于另一个关系的任何地方,无论两者的基数如何。这里的典型用例是实体集的子类型化。

外键约束的主要好处是通过从单个语句级联 updates/deletes 而不必在执行前查询 ID 来提高性能(减少网络调用和开发时间)多个 update/delete 语句包含在一个事务中。如果更改未正确传播,更不用说修复时间了。

M-to-M 关系相当于两个 1:M 关系。我们不能将一侧的主键指定为另一侧的外键,为此我们使用一个中间实体来解析 M:M 并且该实体通常称为 "association " 或交叉实体。例如,项目和员工之间的 M:M 关系可以分配一个新的中间实体,这样关系将转换为 1:M 并且我们可以轻松分配外键