数据库 约束(Constraint)、多表关系和范式

约束 Constraint

概念: 对表中数据进行限制,保证数据正确性、有效性、完整性。

分类

  1. 主键:primary key
    配合INT类型主键 可以加auto_increment插入数据输入null也可自动增长
  2. 非空:not null
  3. 唯一:unique (唯一约束限定可以有多个NULL)
  4. 外键:foreign key (外键名 和外键列名是两个东西)
# 创建时添加
create table 表名(
	...
	外键列,
	consstraint 外键名称 foreign key (外键列名) references 关联表名(主表列名)
	);
#删除外键
alter table 表名 drop foreign key 外键名;
#通过alter增加外键(增加外键之前先增加外键列,不能一起写)
alter table add consstraint 外键名称 foreign key (外键列名) references 关联表名(主表列名);
#建立级联 添加ON UPDATE CASCADE
alter table add consstraint 外键名称 foreign key (外键列名) references 关联表名(主表列名) ON UPDATE CASCADE;
# 删除级联 ON DELETE CASCADE
CREATE TABLE student(
	name VARCHAR(20) NOT NULL,
	phone_number VARCHAR(20) UNIQUE,
	id VARCHAR(20) primary key,
	age int
	city VARCHAR(20), #外键
	constraint city_name foreign key (city) references city(name)
	)

多表关系

  • 一对一 (身份证和人)
    可以在任意一方增加外键,指向对方主键,并且将外键唯一。或者主键相同
  • 一对多 (员工和部门)
    多个员工同一个部门 n:1 关系, 在n侧建立外键指向1侧的主键
  • 多对多 (学生和课程)
    学生可选多个课程,课程可以有多个学生m:n关系,增加中间表,至少要包含两个键,例如:stu_idclass_id,两个键形成联合主键。通过中间表,表示多对多关系。

范式

第一范式1NF、

每一列都是不可分割的原子数据项。

第二范式2NF

1NF的基础上,非码属性必须完全依赖于候选码,即消除非码属性对主码的部分函数依赖
函数依赖:通过A->B,A属性或属性组可以唯一确定B的值,则B依赖A。
完全函数依赖:A是属性组,B需要通过A中的所有属性决定,则B完全函数依赖A。
部分函数依赖:A是属性组,但是A中的一个属性就可以确定B,则B部分函数依赖于A。
传递函数依赖:A->B,B->C ,则C传递函数依赖于A。
:一个属性或属性组被去他所有属性完全依赖,则称它为该表的码。

候选码: 如果关系中的某一属性组能唯一的标识一个元组,则成该属性组为候选码
主码: 如果一个关系有多个候选码,则选其中一个为主码
主属性: 候选码的所有属性称为主属性
非主属性: 不包含在任何候选码中的属性是非主属性

第三范式3NF

在2NF基础上,任何非主属性不依赖于其他非主属性,消除传递依赖。
例如: 在这里插入图片描述
系主任依赖于系名,系名又依赖于学号,产生传递依赖系主任->系名->学号。拆分后满足第三范式。
在这里插入图片描述

BCNF

  • 所有非主属性,对每一个候选码都是完全函数依赖。
  • 主属性对不包含它的码,也是完全函数依赖,我理解为主属性之间互相完全函数依赖。
  • 没有属性完全依赖于非码的任何一组属性,非主属性之间不能有依赖。
    例如学号学生名宿舍年龄:(假设学生名唯一)
  1. 宿舍,年龄都完全依赖于 学号和学生名
  2. 学号和学生名之间完全函数依赖
  3. 没有属性依赖于宿舍和年龄
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 数字20 设计师: CSDN官方博客
应支付0元
点击重新获取
扫码支付

支付成功即可阅读