在项目开发中,进行数据库表结构设计时,会根据业务需求及业务模块之间的关系,分析并设计表结构,各个表之间的结构基本上分为三种:一对多,多对多,一对一。
一对多
例如,一个学校可以有多个学生,而一个学生对应一个学校
实现:在多的一方建立外键,指向一的一方的主键。
多对多
例如,一个学生可以选修多门课程,一门课程也可以有多名学生。
实现:建立第三张中间表,中间表至少包含两个外键,分别关联两边的主键。
示例:新创建一张course表,使其与之前的user表连接,这中间需要用一张中间表进行连接。
CREATE table course(id int auto_increment primary key comment '主键id',course_name varchar(10) comment '课程名称' )comment '课程表'; insert into course value (null,'java'),(null,'vue'),(null,'MySQL');
create table student_course(id int auto_increment comment '主键' primary key ,studentid int not null comment '学生id',courseid int not null comment '课程id',constraint fk_courseid foreign key (courseid) references course(id),constraint fk_studentid foreign key (studentid) references user(id)--添加外键 )comment '学生中间表';
此时已经成功连接上两张表,在DataGrip里可以更直观的看到这些表的联系。
右击中间表点击Diagrams,选择Show Diagram
一对一
例如学生与学生信息的关系。
关系:一对一的关系,多用于单表拆分,将一张表的基础字段放在一张表中,其他详情字段放在另一张表中,以提升操作效率。
实现:在任意一方加入外键,关联另外一方的主键,并且设置外键为唯一(UNIQUE)的。