如何用CR图展示数据库中的一对多关系?
- 内容介绍
- 文章标签
- 相关推荐
在现代数据库设计中,一对多关系是最常见、也最容易让人产生误解的关联类型。许多开发者在刚接触ER图或CR图时往往会遇到以下痛点:
- 不清楚“一”端与“多”端到底该放在哪个表里。
- 对外键的定义和约束理解不到位,导致插入数据时报错。
- 想把业务需求直接映射到SQL,却忽略了索引和性能问题。
- 更新或删除记录时出现级联错误,导致数据不一致。
- 面对复杂业务场景时一对多关系的实现方式变得模糊。
一、CR图中一对多关系的基本表示法
CR图是一种概念层面的图形化工具,用来描述实体及其相互之间的关系。不过,在CR图中,一对多关系通常用带有菱形箭头的连线来标识:
- 箭头指向“多”的那一方;话说回来,
- 菱形表示“一”的那一方。
下面给出一个典型示例:学生与课程的关联。一个学生可以选修多门课程,而每门课程只能被单个学生选修。老实说,
+-----------+ +----------+
| Student | | Course |
+-----------+ +----------+
| StudentID | | CourseID |
| Name | | Name |
+-----------+ +----------+
^ |
| |
+----------------+
<-- one-to-many -->
二、如何在数据库中实现这一关系?不过,——外键是主要
在实际数据库表结构中。“一”端通常对应主表,包含主键;“多”端对应从表,其中加入外键列指向主表主键。
在现代数据库设计中,一对多关系是最常见、也最容易让人产生误解的关联类型。许多开发者在刚接触ER图或CR图时往往会遇到以下痛点:
- 不清楚“一”端与“多”端到底该放在哪个表里。
- 对外键的定义和约束理解不到位,导致插入数据时报错。
- 想把业务需求直接映射到SQL,却忽略了索引和性能问题。
- 更新或删除记录时出现级联错误,导致数据不一致。
- 面对复杂业务场景时一对多关系的实现方式变得模糊。
一、CR图中一对多关系的基本表示法
CR图是一种概念层面的图形化工具,用来描述实体及其相互之间的关系。不过,在CR图中,一对多关系通常用带有菱形箭头的连线来标识:
- 箭头指向“多”的那一方;话说回来,
- 菱形表示“一”的那一方。
下面给出一个典型示例:学生与课程的关联。一个学生可以选修多门课程,而每门课程只能被单个学生选修。老实说,
+-----------+ +----------+
| Student | | Course |
+-----------+ +----------+
| StudentID | | CourseID |
| Name | | Name |
+-----------+ +----------+
^ |
| |
+----------------+
<-- one-to-many -->
二、如何在数据库中实现这一关系?不过,——外键是主要
在实际数据库表结构中。“一”端通常对应主表,包含主键;“多”端对应从表,其中加入外键列指向主表主键。

