多表的关系介绍
(1)项目中的多表
1:在实际的开发中,项目一定是有多张表组成的,这些表之间是有关系
2:表与表之间的关系分类:
一对一,一对多,多对多
(2)什么是一对一?
A表的一行对应B表的一行,反之也成立,此时,两张表可以合并成一张表
(3)什么是一对多?
A表的一行对应B表的多行,反之不成立
(4)什么是多对多?
A表的一行对应B表的多行,B的一行对应A表的多行
多表的关系-一对多关系
(1)初始化数据
(2)一对多的创建流程
》创建主表(分类表)
》创建从表(商品表)
》给主表和从表之间添加外键约束
alter table 从表 add [constraint] [外键名称] foreign key (从表外键字段名) references 主表 (主表的主键);
》给主表添加数据(随便添加)
》给从表添加数据(添加数据是必须依赖主表)
(3)一对多特点
添加数据: 主表:随意添加,从表:受主表限制
删除数据: 主表:如果某一行的数据受到从表的依赖,则不能删除, 从表:可以随意删除
(4)类比
省和市
create database day13_2
use day13_2
》创建主表(分类表)
create table category(
cid int primary key auto_increment,
cname varchar(20)
)
》创建从表(商品表)
create table product(
pid int primary key auto_increment,
pname varchar(20),
price double,
cid int -- 外键 表示属于哪个分类
)
》给主表和从表之间添加外键约束
`alter table 从表 add [constraint] [外键名称] foreign key (从表外键字段名) references 主表 (主表的主键);`
alter table product add foreign key (cid) references category(cid)
》给主表添加数据(随便添加)
insert into category value(null,'电子')
insert into category value(null,'服装')
》给从表添加数据(添加数据是必须依赖主表)
insert into product value(null,'联想',2000,1)
insert into product value(null,'华为',4000,1)
insert into product value(null,'真维斯',100,2)
多表的关系-多对多关系
(1)使用excel分析
(2)多对多创建流程
》》创建订单表(主表) order
》》创建中间表(从表) 保存交叉线
》》给中间表建立外键约束(2次)
》》给订单表添加数据(随意)
》》给中间表添加数据(受限)
》》创建订单表(主表) order
create table orders(
oid int primary key auto_increment,
money double
)
》》创建中间表(从表) 保存交叉线
create table orders_product(
oid int , -- 必须存在 外键
pid int -- 必须存在 外键
)
》》给中间表建立外键约束(2次)
alter table orders_product add foreign key (oid ) references orders(oid);
alter table orders_product add foreign key (pid ) references product(pid);
》》给订单表添加数据(随意)
insert into product value(null,'LV',30000,2)
》》给中间表添加数据(受限)
insert into orders_product value(3,6)
练习-一对多
1)分析 省表与市表关系
(2)创建表:一对多的关系(省表和市表)
》》 创建主表(省表)
》》 创建从表(市表)
》》建立外键约束
》》给主表添加数据
》》给从表添加数据
# 练习1
》》 创建主表(省表)
create table province(
pid int primary key auto_increment,
pname varchar(20)
)
》》 创建从表(市表)
create table city(
cid int primary key auto_increment,
cname varchar(20),
pid_fk int
)
》》建立外键约束
alter table city add foreign key (pid_fk ) references province(pid);
》》给主表添加数据
》》给从表添加数据
练习-多对多-演员和角色
1)分析 演员表与角色表关系
(2)创建表:多对多的关系(演员表与角色表)
》》 创建演员表(左侧主表)
》》 创建角色表(右侧主表)
》》创建中间表(从表)
》》建立外键约束(2次)
》》给演员表添加数据
》》给角色表添加数据
》》给中间表添加数据
》》 创建演员表(左侧主表)
create table users(
uid int primary key auto_increment,
uname varchar(20)
)
》》 创建角色表(右侧主表)
create table role(
rid int primary key auto_increment,
rname varchar(20)
)
》》 创建中间表(从表)
create table users_role(
rid int , -- 数据必须在role存在
uid int -- 数据必须在users存在
)
》》建立外键约束(2次)
alter table users_role add foreign key (rid ) references role(rid);
alter table users_role add foreign key (uid) references users(uid);
》》给演员表添加数据
》》给角色表添加数据
》》给中间表添加数据
练习-角色表和权限表
(1)分析 角色与权限 表关系
(2)创建表:多对多的关系(角色与权限)
》》 创建权限表
》》 第二个中间表
》》建立外键约束
》》给权限表添加数据
》》给中间表添加数据
》》 创建权限表
create table privilege(
pid int primary key auto_increment,
pname varchar(20)
)
》》 第二个中间表
create table privilege_role(
pid_fk int , -- 外键
rid_fk int -- 外键
)
》》建立外键约束
alter table privilege_role add foreign key (pid_fk) references privilege(pid);
alter table privilege_role add foreign key (rid_fk) references role(rid);
》》给权限表添加数据
》》给中间表添加数据
总结
(1)分析 一对多,还是多对多
(2)建表,加外键
(3)不用所有题都做,只要选一道精做