基数与外键关系

时间:2015-07-21 15:13:58

标签: mysql database-design relational-database database-schema entity-relationship

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

3 个答案:

答案 0 :(得分:1)

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

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

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

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

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

答案 1 :(得分:0)

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

外键约束的主要好处是通过级联来自单个语句的更新/删除而不必在执行多个更新/删除之前查询ID而实现的性能提升(减少线上调用以及开发时间)包含在事务中的语句。如果没有正确传播更改,更不用说修复时间了。

答案 2 :(得分:0)

M-to-M关系相当于两个1:M关系。我们不能将1侧的主键作为其他外键分配给此目的我们使用中间权限来解析M:M和那个实体被称为"关联"或交叉点实体。例如项目和员工之间的M:M关系新的midlle实体可以分配,这样关系将转换为1:M,我们可以分配一个外键easilly