表关系类型
关系通过匹配键列(通常是两个表中同名的列)中的数据来发挥作用。 在大多数情况下,关系将一个表的主键(它为每行提供唯一标识符)与另一表中外键的项相匹配。 例如,通过在 titles 表的 title_id 列(主键)和 sales 表的 title_id 列(外键)之间创建关系,可以使图书销售额与售出的具体书名相关联。
表之间有三种类型的关系。 所创建的关系类型取决于相关列是如何定义的。
一对多关系
多对多关系
一对一关系
一对多关系
一对多关系是关系的最常见类型。 在这种关系中,表 A 中的一行在表 B 中可以有许多匹配行,但表 B 中的一行在表 A 中只能有一个匹配行。 例如,publishers 和 titles 表具有一对多关系:每个出版商出版很多书,但每本书只出自一个出版商。
如果在相关列中只有一列是主键或具有唯一约束,则创建一对多关系。
一对多关系的主键方由键符号表示。 关系的外键方由无穷符号表示。
多对多关系
在多对多关系中,表 A 中的一行在表 B 中可以有许多匹配行,反之亦然。 可通过定义第三个表(称为联接表)创建此类关系,联接表的主键由来自表 A 和表 B 的外键组成。 例如,authors 表和 titles 表具有多对多关系,此关系由这两个表中的每一个与 titleauthors 表之间的一对多关系定义。 titleauthors 表的主键是 au_id 列(authors 表的主键)和 title_id 列(titles 表的主键)的组合。
一对一关系
在一对一关系中,表 A 中的一行最多只能与表 B 中的一行相匹配,反之亦然。 当两个相关列都是主键或都具有唯一约束时,将创建一对一关系。
这种关系不常见,因为以这种方式相关的多数信息都在一个表中。 可以使用一对一关系用于:
分割一个含有许多列的表。
由于安全原因而隔离表的某一部分。
存储可以很容易删除的临时数据,只需删除表即可删除这些数据。
存储只应用于主表的一个子集的信息。
一对一关系的主键方由键符号表示。 外键方也由键符号表示。