<MySQL> 如何合理的设计数据库中的表?数据表设计的三种关系

目录

一、表的设计

二、一对一关系

三、一对多关系

四、多对多关系


一、表的设计

数据库设计就是根据需要创建出符合需求的表。

首先根据需求找到体系中的关键实体对象,通常每个实体对象都会有一个表,表中包含了这个实体的相关属性。

再理清楚实体对象间的关系,不同的关系有不同的设计表的方式。

++表的三种关系有:++

|------------|-----------------------------------------------|
| 关系 | 说明 |
| 一对一的关系 | 表1中一行数据和表2的一行数据一一对应。 |
| 一对多的关系 | 表1中一行数据可以对应表2的多行数据。 |
| 多对多的关系 | 表1中一行数据可以对应表2的多行数据,表二的一行数据同样可以对应表1中的多行数据。 |

二、一对一关系

++图示:++

++示例:++

|--------|-------------------------------------------------------------------------------------------------------------------------------------------------|
| 语句 | create table register(id int primary key,date datetime); |
| 说明 | 创建表格register,以id作为主键。 |
| 语句 | create table student( stu_id int primary key,name varchar(32),reg_id int unique, foreign key(reg_id) references register(id) ); |
| 说明 | 创建表格student,以stu_id作为主键,reg_id是唯一键, 以reg_id作为外键,与表格register中的id一一对应。 |

|---------|---------------------------------------------|
| 总结: | 根据上述示例可以发现,一对一关系下,外键和外键关联的其他键通常是主键或唯一键。 |

三、一对多关系

++图示:++

++示例:++

|--------|----------------------------------------------------------------------------------------------------------------------------------------------|
| 语句 | create table class(num int primary key,name varchar(32)); |
| 说明 | 创建表格class,以num 作为主键。 |
| 语句 | create table student( stu_id int primary key,name varchar(32),class_num int, foreign key(class_num) references class(num) ); |
| 说明 | 创建表格student,以stu_id作为主键,以class_num作为外键,与表格class中的num对应。 |

|---------|---------------------------------------------------------------------------------------|
| 总结: | 根据上述示例可以发现,一对多关系下,外键并不是唯一键,而外键关联的其他键则是主键或唯一键。这代表外键的值可以重复,但是其取值范围只能被限定在外键关联键已有的值中。 |

四、多对多关系

++图示:++

++示例:++

|--------|---------------------------------------------------------------------------------------------------------------------------------------------------------|
| 语句 | create table course(id int primary key,name varchar(32)); |
| 说明 | 创建表格course,以id作为主键。 |
| 语句 | create table student(id int primary key,name varchar(32)); |
| 说明 | 创建表格student,以id作为主键。 |
| 语句 | create table cou_stu( cou_id int,stu_id int foreign key(cou_id) references course(id) foreign key(stu_id) references student(id) ); |
| 说明 | 创建表格cou_stu, 以cou_id作为外键,与表格course中的id对应, 以stu_id作为外键,与表格student中的id对应。 |

|---------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 总结: | 根据上述示例可以发现,多对多关系下,需要创建一张关联表来记录数据。 关联表中的作为外键的字段并非唯一键,而外键关联的其他键则是主键或唯一键。 这与一对多关系的设计类似,外键的值可以重复,但是其取值范围只能被限定在外键关联键已有的值中。 不同的是,多对多关系的表设计中,外键关联语句存在多条。 |


相关推荐
疯狂打码的少年14 分钟前
【软件工程】需求工程:需求获取与需求分析
数据库·笔记·软件工程·需求分析
Database_Cool_15 分钟前
阿里云 PolarDB-X vs TiDB 分布式数据库选型指南
数据库·分布式·阿里云·tidb
数据库小学妹16 分钟前
分布式数据库架构怎么选?三种路线对比+迁移避坑指南
数据库·分布式·分布式数据库·数据库架构·数据迁移·数据库选型
桑榆肖物34 分钟前
在 .NET MAUI 里接入 PP-OCRv6 文本检测实现查找并点击
数据库·redis·.net·maui
味悲1 小时前
SQL注入从入门到实战
数据库·sql·安全
KaMeidebaby1 小时前
卡梅德生物技术快报|兔单克隆抗体:噬菌体 Fab 免疫文库搭建实操:兔单克隆抗体重组构建完整参数
前端·网络·数据库·人工智能·算法
复园电子4 小时前
企业级PDF批量盖章方案选型指南
数据库·pdf
AI-好学者11 小时前
阶段一-图数据库基础与PropertyGraph模型
数据库·rag·knowledge graph·graphrag
其实防守也摸鱼12 小时前
运维--学习阶段问题解答(1)(自测)
linux·运维·服务器·数据库·学习·自动化·命令模式
懒鸟一枚12 小时前
深入理解 Linux 内存、Swap 交换分区与分页机制的关系
java·linux·数据库