foreign key

一对多关系

比如员工和部门之间 就是一对多的关系
即从员工的方面看,一个员工只有一个部门对应
从部门的方面看,一个部门可以有多个员工
下面是员工部门表
在这里插入图片描述
如果以上面这种方式存储数据,当数据量多的时候有大量的冗余,而且不利于数据管理。
我们可以考虑用两个表存储数据并建立联系
比如:我们可以建一个员工表,建一个部门表,但是要怎样让两个表建立关系呢,这就引出外键的功能。
在这里插入图片描述

在这里插入图片描述
我们可以在员工表的基础上添加一列用来标识部门的数据
为什么在员工表添加 不在部门表添加 因为一个员工对应一个部门,如果在部门表添加,那得添加一个格子要添加多个员工,这是不行的
在这里插入图片描述
注意 要先创建部门表,因为员工表的dep_id依赖于部门表的id
创建部门表:

create table dep(id int primary key auto_increment,name varchar(16));

创建员工表

create table emp(id int primary key auto_increment,
name varchar(16),
gender enum('male','female') default 'male',
dep_id int,
foreign key(dep_id) references dep(id) on update cascade on delete cascade);

注意on update cascade on delete cascade是保证部门表数据删除或更新时,员工表跟着一起更新。

多对多关系

比如作者和图书之间就是多对多关系
从作者方面看,一个作者可以写多本书;
从书的方面看,一本书可以由多个作者写。
注意在多对多关系中,不能像一对多关系那样在两个表中的一个表上建立两者的关系,应该要用一个独立的表建立关系。因为A表要和B表的某列建立联系,必须先把B表创建出来,再把B表要建立关系的某列绑定给A表,如果是多对多关系,无法满足条件。
创建book表:

create table book(id int primary key auto_increment,name varchar(32),price int);

创建author表:

 create table author(id int primary key auto_increment,name varchar(32),age int);

创建联系:

create table book2author(
id int primary key auto_increment,
book_id int,
author_id int,
foreign key(book_id) references book(id) on update cascade on delete cascade,
foreign key(author_id) references author(id) on update cascade on delete cascade);

一对一关系

比如查询信息时先展示基本信息,再展示详细信息
在这里插入图片描述

作者详情表:

create table authordetail(
id int primary key auto_increment,
phone varchar(16),addr varchar(32)
);

作者基本信息表:

 create table author2(id int primary key auto_increment,
 name varchar(16),
 age int,
 authordetail_id int unique,
 foreign key(authordetail_id) references authordetail(id) on update cascade on delete cascade);

注意外键字段一定要unique标识唯一

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值