mysql-表关系模型,一对一,一对多,多对多

一对一关系模型

》生活实例:

民政局登记的数据表,是一对一的关系

一公民,只能够有一位合法的配偶

》操作

民政局会有一个表

字段会有

主键id,男方身份证号,女方身份证号

然后会往表中插入数据

插入数据的要求是,男方这一列数据,与女方这一列数据,都得是唯一的

一对多关系

》生活实例一:

一个班级有多个学生

一个学生对应一个班级

班级是单方

学生是多方

》生活实例二:

一个动画片有多个卡通英雄

多个卡通英雄对应一个动画片

动画片是单方

卡通英雄是多方

多对多关系

》生活实例

婚介网站登记次数

每一个男会员可以与多个女会员见面

每一个女会员可以与多个男会员见面

男对女,女对男,是多对多关系

-----随堂笔记-----

一对一的表关系

实现一对一

主要是对关联的字段进行唯一约束

CREATE TABLE `woman` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(20) NOT NULL,
  `hid` int(10) unsigned DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `hid` (`hid`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=gbk

只需要在任意一张表上,对关联的键设定一个维一约束就好

unique

在这里插入图片描述

一对多的模型

创建班级表

id

name

create table classes(
id int UNSIGNED PRIMARY key auto_increment,
name varchar(20) not null
) character set utf8;

插入班级

INSERT into classes VALUES(0,‘python’);

学生表

id

name

cid

tid

在这里插入图片描述

在这里插入图片描述

》查询id为3学生信息,同时查出它的班级信息

代表了,通过多的一方查找单个的地方

select stu.id, stu.name, classes.name from stu inner join classes on stu.cid = classes.id where stu.id=3;

ff在这里插入图片描述

》查询python班的所有学生信息

通过单方,找多方

简写

select * from stu where cid = 1;

完整的

select * from stu where cid = (select id from classes where name="python");

》学生与班级的关系

多个学生,对应一个班级

所以说,学生,是多方

班级是单方,一方

我们的模型分析

火影忍者,动漫

鸣人,牙,鸡田,佐助,斑,大蛇丸,

哆拉a梦,动漫

大雄,静香,胖虎,哆拉a梦,小夫

将来

如果通过鸣人这个角色,可找到它所对应的动画片

多对多

要表达多对多表间的关联,是需要第三张表来记录情况的

表创建

CREATE TABLE `user` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(20) DEFAULT NULL,
  `gender` tinyint(4) DEFAULT '0',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=gbk

》查询张飞和哪些女生见过面

男生 女生
张飞 黄月英
张飞 小乔

(select * from user1 inner join meetrec on user1.id = meetrec.man_id where meetrec.man_id=1)

被堵住

select * from user2 inner join (select * from user1 inner join meetrec on user1.id = meetrec.man_id where meetrec.man_id=1);

解决

select user1.name, user2.name from meetrec inner join user1 on meetrec.man_id = user1.id
inner join user2 on meetrec.woman_id=user2.id;
;
select 
user1.name, user2.name
from 
user1 
inner join 
meetrec 
on 
user1.id = meetrec.man_id
inner join
user2
on 
user2.id = meetrec.woman_id
;

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鲸鱼编程pyhui

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值