当前位置: 首页 > news >正文

SQL:Relationship(关系)

目录

🔗 什么是 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 个或多个订单。

相关文章:

  • 类似东郊到家的上门按摩预约服务系统小程序APP源码全开源
  • 3.5 字典补充
  • Google 官方提示工程 (Prompt Engineering)白皮书 总结
  • ESP32与STM32哪种更适合初学者?
  • Qt触摸屏隐藏鼠标指针
  • Python数组(array)学习之旅:数据结构的奇妙冒险
  • DRM(Digital Rights Management)生态以及架构介绍
  • 自动驾驶技术-相机_IMU时空标定
  • NI的LABVIEW工具安装及卸载步骤说明
  • 博途 TIA Portal之1200做主站与有意思的板子做MODBUS_RTU通讯
  • 【多模态大模型实战】使用LoRA微调Qwen2.5-VL
  • ESP32+Arduino入门(三):连接WIFI获取当前时间
  • 埃隆·马斯克与开源:通过协作重塑创新
  • Python 中 `__init__` 方法的深入解析
  • Java工具类-assert断言
  • 嵌入式人工智能应用-第三章 opencv操作3 图像平滑操作 下
  • Linux 内存调优之系统内存全面监控
  • 教程:在Typora中显示拼音——附处理工具
  • 学术版 GPT 网页
  • 电商用户购物行为分析:基于K-Means聚类与分类验证的完整流程
  • 荔湾区做网站公司/广州外包网络推广公司
  • 网站支持qq登录怎么做/灰色行业关键词优化
  • 哈尔滨做企业网站/seo咨询价格找推推蛙
  • 深圳宝安沙井网站建设/中国网络营销公司
  • 新能源网站建设哪家好/网站友情链接
  • 政府网站建设的国际/武汉最新消息今天