SQL:Relationship(关系)

发布于:2025-04-14 ⋅ 阅读:(24) ⋅ 点赞:(0)

目录

🔗 什么是 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 one0 +

  • 含义: 实体 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 个或多个订单。


网站公告

今日签到

点亮在社区的每一天
去签到