mysql多对多关系的理解,由一对多看向多对多

本文通过实例解析了数据库中的一对多和多对多关系。从学生表和班级表的一对多关系开始,逐步引入多对多关系,如学生和车票的关系,以及老师和学生的关系。通过创建中间表,展示了如何实现和管理多对多关联,包括学生课程表、学生教师表和借阅记录表等例子。

先看一对多

学生表
create table student(
     id int primary key auto_increment,
     name varchar(20)
);

一个班级对应许多同学

//一个同学属于一个班级,外键写在同学里
create table student(
   id int primary key auto_increment;
   sn int unique,
   name varchar(20) default'不知道'
   classes_id int,//所属班级
   foreign key(classes_id) references classes(id)
);
//classes_id int,
/foreign key(classes_id) references classes(id)这就把两张表关联起来了,学生的class_id属性对应到班级表的id里

学生表和车票
create table student(
  id int primary key auto_increment,
  name varchar(20)
);
create table ticket(
     id int primary key auto_increment,
     name varchar(20)
);

create table student_ticket(
       id int primary key auto_increment,
       //一个学生有很多车票
       student_id int,
       foreign key(student_id) references student(id),
       //一个车票有很多学生
       ticket_id int,
       foreign key(ticket_id) references ticket(id)
);
拆分为两个一对多

一个车票有很多学生,拿着学生去找车票
student_id int,
ticket_id int,
foreign key(ticket_id) references ticket(id)
一个学生有很多张车票,拿着车票找学生
ticket_id int,
student_id int,
foreign key(student_id) references student(id),
二合一就变成student和ticket的中间表了就是多对多了
 

 

写一个老师和学生的关系:多对多

create table teacher(
     id int primary key auto_increment,
     name varchar(20)
);
create table student(
     id int primary key auto_increment,
     name varchar(20)
);

create table student_teacher(
       id int primary key auto_increment,
       //一个学生有很多老师(老师对应哪些同学)
       student_id int,
       foreign key(student_id) references student(id),
       //一个老师有很多学生 (学生对应哪些老师,学生去找老师)
       teacher_id int,
       foreign key(teacher_id) references teacher(id)
);

 

学生和课程的中间表(二合一的一个过程)

学生表
create table student(
     id int primary key auto_increment,
     name varchar(20)
);

课程表
create table course(
    id  int primary key auto_increment,
    name varchar(20)
);


create table student_course(
    id int primary key auto_increment,
    //一个学生对应多个课程(把这个表当做课程表)(该课程属于哪些同学,拿课程去找同学)
    student_id int,
    foreign key(student_id) references student(id),
    //一个课程对应多个学生(把这个表当做学生表)(该同学有哪些课程)
    course_id int,
    foreign key(course_id) references course(id) 8
);

图书,学生具有一个借阅场景(借阅记录表作为中间表)
create table student(
     id int primary key auto_increment,
     name varchar(20)
);
create table book(
     id int primary key auto_increment,
     name varchar(20)
);
create table record(
     id int primary key auto_increment,
     拿着书student_id属性去同学表里找找有哪些同学借过书
     student_id,
     foreign key(student_id) references student(id),
     拿着同学的student_id去找书的表里面查找该同学借过哪些书
     book_id,
     foreign key(student_id) references student(id),
);
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值