多表

分析步骤:
#1、先站在左表的角度去找
是否左表的多条记录可以对应右表的一条记录,如果是,则证明左表的一个字段foreign key 右表一个字段(通常是id)

#2、再站在右表的角度去找
是否右表的多条记录可以对应左表的一条记录,如果是,则证明右表的一个字段foreign key 左表一个字段(通常是id)

#3、总结:
#多对一:
如果只有步骤1成立,则是左表多对一右表
如果只有步骤2成立,则是右表多对一左表

#多对多
如果步骤1和2同时成立,则证明这两张表时一个双向的多对一,即多对多,需要定义一个这两张表的关系表来专门存放二者的关系

#一对一:
如果1和2都不成立,而是左表的一条记录唯一对应右表的一条记录,反之亦然。这种情况很简单,就是在左表foreign key右表的基础上,将左表的外键字段设置成unique即可

多对一    foreign  key

学生     班级

多个学生是一个班级的     学生表有一个外键   关联班级表

书籍      作者

多本书可以都是一个作者写的

书籍表有一个外键  关联作者表

书籍     出版社

多本书可以同时是一个出版社的

书籍表有一个外键  关联出版社表

商品      订单

多个商品可以在一个订单中

商品表有一个外键    关联订单表

多对多

    学生     班级   多对一

       多个学生是一个班级的     学生表有一个外键   关联班级表

    班级    学生    多对一   多个班级对应一个学生 

一本书可以有多个作者

一个作者可以写多本书

一个订单可以有多个商品

一个商品可以属于多个订单

一对一  

       客户    学生

       unique         foreign  key   unique

create table author2book(
id int not null unique auto_increment,
author_id int not null,
book_id int not null,
constraint fk_author foreign key(author_id) references author(id)
on delete cascade
on update cascade,
constraint fk_book foreign key(book_id) references book(id)
on delete cascade
on update cascade,
primary key(author_id,book_id)
);
 
原文地址:https://www.cnblogs.com/ch2020/p/12891576.html