学习数据库设计之表关系一对一,一对多,多对多,该定义哪个为外键?

学习内容来自:ER模型-设计准则与表结构转换。以下只摘选自己能理解,有帮助的部分,感兴趣的可以直接看原文全文。

将关系集合转换程外键或关联表

针对三种关系集合分别执行不同的处理:

1.一对一关系:任选一个实体集加入另一个实体集的主键当作外键。示例如下图所示:

一对一关系理论补充,来源:https://blog.csdn.net/weixin_48085301/article/details/125655654

一对于关系设计多用于表拆分,如用户表和用户详情表。一个技巧是将经常使用的字段放一张表,不经常使用的字段放另一张表,用于提升查询性能。实例如下:

在这里插入图片描述
在真正使用过程中发现 id、photo、nickname、age、gender 字段比较常用,此时就可以将这张表查分成两张表。在这里插入图片描述

实现方式

任意一方加入外键,关联另一方主键,并且设置外键为唯一(UNIQUE)在这里插入图片描述

(注:上图中的desc_id,被设置为外键 ,并且一定再要设置unique唯一约束)

2.一对多关系:将 [ one 也就是一 ] 的那一方的主键复制到 [ many,也就是]那一方的实体关联表中,形成一个外键的引用

(以不变应万变,记住上面的速成方法即可。这也是我为何要转载学习这篇文章的重要原因——这就是一个核心的指导原则。)

补充:实现方式,在多的一方建立外键,指向一的一方的主键。实例如下:来源:https://www.cnblogs.com/ajing2018/p/15706570.html

一对多建立外键

3.多对多关系:为该关系集建立一个映射表关联表的主键复合主键,由所有参与该关系集的实体集对应的表的主键所构成,映射表在每一侧都具有与另一个表一对多关系,意味着每一个构成映射表复合主键的属性是对另外一个实体集对应表的主键的外键引用

(以上这段话把多对多关系,描述得极为清楚。)

如下图示例所示Customer实体集与Book实体集的多对多关系,转换成表结构如下图,Customer表与Order表,Order表与Book表分别是一对多的关系。

(上图是实体集,下图为表结构,分开看,别混在一起看。)

为了解决多对多关系问题,在逻辑结构设计阶段总是使用这种设计模式,我们称为中间实体模式 或叫 中间表模式 (Intermediate Entity Design)

补充:

多对多实现方式:多对多关系实现需要借助第三张中间表。中间表至少包含两个字段,这两个字段作为第三张表的外键,分别指向两张表的主键。示例如下:

多对多

相关文章

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注