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

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


相关推荐
NPE~3 分钟前
基于MySQL实现基础图数据库
数据库·sql·mysql·教程·图数据库·图结构
技术卷4 分钟前
详解力扣高频SQL50题之550. 游戏玩法分析 IV【中等】
sql·mysql·leetcode·oracle
样子201819 分钟前
Sql注入 之sqlmap使用教程
数据库·sql
GottdesKrieges1 小时前
obd运维OceanBase数据库的常见场景
运维·数据库·oceanbase
慢慢沉2 小时前
Lua(数据库访问)
开发语言·数据库·lua
武子康6 小时前
Java-82 深入浅出 MySQL 内部架构:服务层、存储引擎与文件系统全覆盖
java·开发语言·数据库·学习·mysql·spring·微服务
vdoi9 小时前
【Mysql】 Mysql zip解压版 Win11 安装备忘
数据库·mysql
TDengine (老段)9 小时前
TDengine 转化类函数 TO_CHAR 用户手册
大数据·数据库·物联网·时序数据库·tdengine·涛思数据
泰勒疯狂展开9 小时前
Linux研学-MySQL安装
linux·mysql·adb
程序员编程指南10 小时前
Qt 与 SQLite 嵌入式数据库开发
c语言·数据库·c++·qt