分析步骤:
#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)
);