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