目录
🔗 什么是 Relationship?
三种基本关系类型(基于实体间的关系):
1. 一对一(One-to-One)
2. 一对多(One-to-Many)
3. 多对多(Many-to-Many)
🔚 总结
ERD 中的关系类型与表示法
1. One
2. Many
3. One and only one (+)
4. Zero or one(0 +)
5. One or many(-)
6. Zero or many(-)
🔗 什么是 Relationship?
关系(Relationship) 在 MySQL 中指的是 表与表之间的关联方式,用来反映现实世界中实体之间的联系。在数据库设计中,我们通过 主键(Primary Key) 和 外键(Foreign Key) 来实现这些关系。
三种基本关系类型(基于实体间的关系):
1. 一对一(One-to-One)
-
每一条记录在 A 表中只对应一条 B 表记录,反之亦然。
-
例子:一个人只有一个护照。
-
实现方式:在一个表中设置外键,且该字段设为
UNIQUE
。
CREATE TABLE Person (person_id INT PRIMARY KEY,name VARCHAR(100)
);CREATE TABLE Passport (passport_id INT PRIMARY KEY,person_id INT UNIQUE,FOREIGN KEY (person_id) REFERENCES Person(person_id)
);
2. 一对多(One-to-Many)
-
A 表的一条记录对应 B 表的多条记录,但 B 表的每条记录只对应 A 表的一条。
-
例子:一个老师教授多个学生,但一个学生只由一个老师指导。
-
实现方式:在 “多” 的一方添加外键。
CREATE TABLE Teacher (teacher_id INT PRIMARY KEY,name VARCHAR(100)
);CREATE TABLE Student (student_id INT PRIMARY KEY,name VARCHAR(100),teacher_id INT,FOREIGN KEY (teacher_id) REFERENCES Teacher(teacher_id)
);
3. 多对多(Many-to-Many)
-
A 表的记录可以与 B 表多条记录关联,反之亦然。
-
例子:一个学生可以选多门课,一门课也有多个学生。
-
实现方式:用第三张中间表(交叉表,junction table) 进行关联。
CREATE TABLE Student (student_id INT PRIMARY KEY,name VARCHAR(100)
);CREATE TABLE Course (course_id INT PRIMARY KEY,name VARCHAR(100)
);CREATE TABLE StudentCourse (student_id INT,course_id INT,PRIMARY KEY (student_id, course_id),FOREIGN KEY (student_id) REFERENCES Student(student_id),FOREIGN KEY (course_id) REFERENCES Course(course_id)
);
🔚 总结
关系类型 | 特点 | 示例 |
---|---|---|
一对一 | 双方都唯一 | 人与身份证 |
一对多 | 一方唯一,多方可以重复 | 教师与学生 |
多对多 | 双方都可以多个 | 学生与课程 |
ERD 中的关系类型与表示法
ERD 中关系的核心是描述两个实体之间的“基数”(Cardinality)和“可选性”(Optionality)**,也就是:
-
一对几?
-
是否必须有这个关系?
1. One
-
含义: 每个实体 A 只关联一个实体 B。
-
常见形式: 一对一(1:1)
-
ERD 图形符号: 线上通常是直线 + 一竖杠
|
表示 “exactly one” -
例子: 每个人有一个身份证号。
2. Many
-
含义: 每个实体 A 可能关联多个实体 B。
-
常见形式: 一对多(1:N)或多对多(M:N)
-
ERD 图形符号: 线上是“三叉爪”或者英文
crow's foot
形状>
, 代表 “many” -
例子: 一位老师教授多个学生。
3. One and only one (+
)
-
含义: 实体 A 必须且只能 关联一个实体 B。
-
ERD 符号: 一竖线
|
(表示 one)+ 圆点(表示 required) -
对应数据库约束:
NOT NULL
+FOREIGN KEY
+UNIQUE
-
例子: 每个员工必须拥有一个工号。
4. Zero or one(0 +
)
-
含义: 实体 A 可以没有 也可以有一个 B。
-
ERD 符号: 圆圈
O
(表示 optional)+ 竖线|
(表示 one) -
对应数据库约束: 外键字段是
NULLABLE
-
例子: 一个顾客可以没有会员卡,最多只能有一个。
5. One or many(-
)
-
含义: 实体 A 必须至少有一个 B,可以有多个。
-
ERD 符号: 竖线
|
(表示 one)+ 三叉爪>
(表示 many) -
对应数据库约束: 不能为 NULL,且是一对多关系
-
例子: 每个订单必须包含至少一件商品。
6. Zero or many(-
)
-
含义: 实体 A 可以没有 也可以有多个 B。
-
ERD 符号: 圆圈
O
(表示 optional)+ 三叉爪>
(表示 many) -
对应数据库约束: 外键字段可空,允许多条记录
-
例子: 一个顾客可以下 0 个、1 个或多个订单。