多表设计

一、外键约束

约束的作用:保证数据的完整性

单表约束 :主键约束、 非空约束、唯一约束

外键约束: 保证数据的完整性(多表之间)

数据准备:

CREATE TABLE dept(
	did INT PRIMARY KEY AUTO_INCREMENT,
	dname VARCHAR(20)
);
INSERT INTO dept VALUES (NULL,'市场部');
INSERT INTO dept VALUES (NULL,'人事部');
INSERT INTO dept VALUES (NULL,'教研部');

CREATE TABLE employee(
	eid INT PRIMARY KEY AUTO_INCREMENT,
	ename VARCHAR(20),
	salary DOUBLE,
	birthday DATE,
	sex VARCHAR(10),
	dno INT
);

INSERT INTO employee VALUES (NULL,'张三',8000,'1988-09-01','男',3);

INSERT INTO employee VALUES (NULL,'李四',9000,'1988-09-01','男',1);

INSERT INTO employee VALUES (NULL,'王五',6000,'1988-09-01','男',2);

INSERT INTO employee VALUES (NULL,'赵六',10000,'1988-09-01','男',3);

INSERT INTO employee VALUES (NULL,'孙七',10000,'1988-09-01','男',1);

原则上每个员工都有属于自己的部门,如果这两个表不设置约束,那么可以删除有员工的部门,插入没有部门的员工

如下:

实际中这种操作是不允许的,存在员工的部门不能删除,也不可能有员工没有所属部门,所以就要添加外键的作用

首先给这两表添加外键约束

ALTER TABLE employee ADD FOREIGN KEY (dno) REFERENCES dept(did)

这样再删除有关联记录的数据就会报错

让外键不能为空

ALTER TABLE employee MODIFY dno INT NOT NULL;

这样再想添加部门为空的员工数据就会报错

二、表与表之间的关系

1.一对一

例如: 一个人只能有一个身份证号,一个身份证号只能属于一个人

2.一对多

例如:一名学生只能属于一个班级,但是一个班级可以有很多个学生

3.多对多

例如: 一名老师可以有很多学生,一个学生也可以有很多个老师

三、建表原则

(1)一对一的建表原则

  1. 唯一外键对应
    1. 假设是一对多,在多的一方创建外键(新加一个字段)指向一的一方的主键,将外键设置为unique
  2. 主键对应
    1. 将两个表的主键建立对应关系即可。

(2)一对多的建表原则

   在多的一方创建外键指向一的一方的主键

(3)多对多的建表原则

   需要创建中间表,中间表中至少两个字段,分别作为外键指向多对多双方的主键

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值