MySQL 多表之间的关系

MySQL 多表之间的关系

多表之间的关系

1.分类:
  1. 一对一(了解):
    * 如:人和身份证
    • 分析:一个人只有一个身份证,一个身份证只能对应一个人
  2. 一对多(多对一):
  • 如:母亲和孩子
  • 分析:一个母亲可以有多个孩子,一个孩子只能有一个母亲
  1. 多对多:
  • 如:课程和学生
  • 分析:一门课程能被很多个学生选,一个学生可以选很多门课程
2.实现关系:
  1. 一对多(多对一):
    * 如:母亲和孩子
    * 实现方式:在多的一方建立外键,指向一的一方的主键。
    1. 多对多:
      • 如:课程和学生
      • 实现方式:多对多关系实现需要借助第三张中间表。中间表至少包含两个字段,这两个字段作为第三张表的外键,分别指向两张表的主键
    2. 一对一(了解):
      • 如:人和身份证
      • 实现方式:一对一关系实现,可以在任意一方添加唯一外键指向另一方的主键。
3.一对多案例:

​ 例如我们最熟悉的淘宝网,你打开淘宝首页,你会看到很多个分类,有服装,有电子产品,有食物等等,我们点开男装分类又会看到有T恤,卫衣,衬衫的分类,点开T恤你还能看到很多个商品,这就是一对多的案例。

-- 创建旅游线路分类表 tab_category
-- cid 商品分类主键,自动增长
-- cname 商品分类名称非空,唯一,字符串 100

create table tab_category (
 cid int primary key auto_increment,	
 cname varchar(100) not null unique		
)

INSERT INTO tab_category (cname) VALUES ('T恤'), ('衬衫'), ('卫衣');

SELECT * from tab_category;

delete from tab_category;

-- 创建分类后的商品表 tab_commodity
/*
id 商品主键,自动增长
name 商品名称非空,唯一,字符串 100
price 价格
cid 外键,所属分类
*/
create table tab_commodity(
 id int primary key auto_increment,
 name varchar(100) not null unique,
 price double,
 cid int,
 foreign key (cid) references tab_category(cid)
)

-- 添加商品数据
INSERT INTO tab_commodity VALUES
(null,'T恤one',69,1),
(null,'衬衫two',98,3),
(null,'卫衣three',158,2);

SELECT * FROM tab_commodity;
4.多对多案例:

还是拿淘宝网来举例,一个商品可以被多个用户收藏,一个用户也可以收藏多个商品。

/*
创建用户表 tab_user
uid 用户主键,自增长
name 真实姓名长度 100
sex 性别,定长字符串 1
telephone 手机号,字符串 11
*/
create table tab_user (
 uid int primary key auto_increment,
 name varchar(100),
 sex char(1) default '男', -- 没有赋值时默认为“男”
 telephone varchar(11)
)

INSERT INTO tab_user VALUES
(NULL,  '老王',  '男', '12899998888'),
(NULL,  '小王',  '男', '13912344321');

select * from tab_user;

/*
创建收藏表 tab_favorite
id 商品 id,外键
date 收藏时间
uid 用户 id,外键
id 和 uid 不能重复,设置复合主键,同一个用户不能收藏同一个线路两次
*/
create table tab_favorite (
 id int,
 date date,
 uid int,  -- 创建复合主键
 primary key(id,uid),
 foreign key (id) references tab_commodity(id),
 foreign key(uid) references tab_user(uid)
)

drop table tab_favorite;

-- 增加收藏表数据
INSERT INTO tab_favorite VALUES
(1, '2018-01-01', 1), -- 老王收藏了T恤one
(2, '2018-02-11', 1), -- 老王收藏了衬衫two
(1, '2018-04-21', 2), -- 小王收藏了T恤one
(3, '2018-05-08', 2); -- 小王选择卫衣three
select * from tab_favorite;

各表间的关系如图所示:

在这里插入图片描述

5.表与表之间的关系小结:
表与表的关系关系的维护
一对多主外键的关系
多对多中间表,两个一对多
1.特殊一对多,从表的外键设置为唯一。2.从表中的主键又是外键
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值