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

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


相关推荐
2501_945423543 小时前
Django全栈开发入门:构建一个博客系统
jvm·数据库·python
gameboy0314 小时前
从MySQL迁移到PostgreSQL的完整指南
数据库·mysql·postgresql
xdl25995 小时前
Spring Boot中集成MyBatis操作数据库详细教程
数据库·spring boot·mybatis
回到原点的码农5 小时前
Spring Data JDBC 详解
java·数据库·spring
zb200641205 小时前
Spring Boot 实战:轻松实现文件上传与下载功能
java·数据库·spring boot
CSharp精选营5 小时前
SQL Server安装避坑:这8个奇葩报错你遇到过几个?
数据库·sql server·安装指南·避坑
一勺菠萝丶5 小时前
Flowable + Spring 集成踩坑:流程结束监听器查询历史任务为空 & 获取不到审批意见
java·数据库·spring
RDCJM5 小时前
mysql表添加索引
数据库·mysql
czlczl200209256 小时前
Redis命令处理逻辑模型
数据库·redis·缓存
楼兰胡杨7 小时前
面试题|MySQL 的 3 层主键索引最多能支撑多少数据量
mysql·面试题