20-基础SQL-多表查询-多表关系(一对多,多对多,一对一)

 

多表关系

项目开发过程中,在进行数据库表结构设计时,会根据业务需求及业务模块之间的关系,分析并设计表结构,由于业务之间相互关联,所以各个表结构之间也存在着各种联系

基本上分为以下三种:

 

1. 一对多(多对一)

2. 多对多

案例1:创建学生表(student),课程表(course),学生课程关系表(student_course)

-- 多对多
-- 学生表
CREATE TABLE student(
    id int auto_increment comment "主键ID" primary key,
    name varchar(10) comment "姓名",
    no varchar(12) comment "学号"
) comment "学生表";

-- 课程表
CREATE TABLE course(
    id int auto_increment comment "主键ID" primary key,
    name varchar(10) comment "课程名称"
) comment "课程表";

-- 学生课程中间表
CREATE TABLE student_course(
    id int auto_increment comment "主键ID" 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 student(id)
)comment "学生课程中间表";

3. 一对一 

 (下图是拆分前的数据表)

 案例2:将上述数据表,拆分为 用户数据表(tb_user)和 用户教育信息表(tb_user_edu)

-- 用户基本信息表
CREATE TABLE tb_user(
    id int auto_increment comment "主键ID" primary key,
    name varchar(10) comment "姓名",
    age int comment "年龄",
    gender char(1) comment "1:男 2:女",
    phone char(11) comment "手机号"
)comment "用户基本信息表";

-- 用户教育信息表
CREATE TABLE tb_user_edu(
    id int auto_increment primary key comment "主键ID",
    degree varchar(20) comment "学历",
    major varchar(50) comment "专业",
    primaryschool varchar(50) comment "小学",
    middleschool varchar(50) comment "中学",
    university varchar(50) comment "大学",
    userid int unique comment "用户ID",
    CONSTRAINT fk_userid FOREIGN KEY (userid) REFERENCES tb_user(id)
)comment "用户教育信息表";

 

posted @ 2023-11-28 19:05  马铃薯1  阅读(83)  评论(0编辑  收藏  举报