<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对应。 |

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


相关推荐
运维行者_3 小时前
企业无线网络监控的挑战与智能化演进趋势
大数据·运维·服务器·网络·数据库
国强_dev4 小时前
技术探讨:使用 stunnel 加密转发数据库连接时,如何获取客户端真实 IP?
数据库·网络协议·tcp/ip
@insist1234 小时前
系统规划与管理师-信息系统规划核心工作要点解析
数据库·软考·系统规划与管理师·软件水平考试·系统规划与管理工程师
超级数据查看器4 小时前
超级数据查看器 v10.0 发布
java·大数据·数据库·sqlite·安卓
数安3000天4 小时前
增量数据如何自动分类分级,避免目录“过期“?
大数据·数据库
南墙上的石头5 小时前
麒麟 V10 重装人大金仓 V8R6 踩坑实录(含 MySQL 兼容模式)
数据库·mysql
画中有画6 小时前
论向量数据库在项目中的应用
数据库
spider_xcxc7 小时前
Redis 数据库高质量实践指南(一)
运维·数据库·redis·oracle·云计算
l1t7 小时前
在linux和windows中解决duckdb 1.6dev版本输出执行计划报错问题
linux·运维·数据库·windows·duckdb
执子手 吹散苍茫茫烟波8 小时前
RC 隔离级别下 MySQL InnoDB 死锁典型案例
数据库·mysql