一对一关系模型
》生活实例:
民政局登记的数据表,是一对一的关系
一公民,只能够有一位合法的配偶
》操作
民政局会有一个表
字段会有
主键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
;