第一范式:1NF,数据字段设计时必须满足原子性
1NF要求字段数据是不需要拆分就可以直接应用
如果数据使用的时候需要进行拆分那么就违背1NF
第二范式:2NF,不能存在部分依赖
部分依赖:首先表存在复合主键,其次有的字段不是依赖整个主键,而只是依赖主键中的一部分。
部分依赖解决:让所以非主属性都依赖于一个候选关键词
最简单方式:取消复合主键(一般选用逻辑主键替代,但是本质依然是复合主键做主),所有非主属性的依赖主属性(逻辑主键)。
正确方式:把部分依赖关系独立成表
第三范式:3NF,不能存在传递依赖
传递依赖:字段某个非主属性不直接依赖主属性,而是通过依赖某个其他非主属性而传递到主属性之上
传递依赖解决:让依赖非主属性的字段一依赖字段独立成表
逆规范化:为了提升数据查询的效率而违背范式的规则
逆规范化的目标是为了提升数据访问效率
所谓逆规范化就是减少表之间的关联查询(效率降低),刻意增加数据冗余
实例第三范式:
CREATE DATABASE yx;
CREATE TABLE kc(
kcid TINYINT PRIMARY KEY,
kcname VARCHAR (10) NOT NULL,
kcts VARCHAR (10) NOT NULL,
kcsjstart DATE NOT NULL,
kcsjend DATE NOT NULL
);
INSERT INTO kc VALUES
(1,'mysql','任老师','2022-1-1','2022-3-10'),
(2,'seo','杨老师','2022-1-2','2022-3-20'),
(3,'web','罗老师','2022-1-3','2022-3-30'),
(4,'ps','张老师','2022-1-4','2022-4-01');
CREATE TABLE xs(
xsid TINYINT PRIMARY KEY,
xsname VARCHAR (10) NOT NULL,
xsxb ENUM('男','女'),
xsclass VARCHAR (10),
xszye VARCHAR (10)
);
INSERT INTO xs VALUES
(11,'李四','男','大数据2101','大数据'),
(12,'周主播','男','网络营销2101','网络诈骗'),
(13,'网易云','女','音乐2101','音乐'),
(14,'莉莉','女','环艺2101','环艺');
CREATE TABLE fs (
fsfs TINYINT,
fskc TINYINT,
fsxs TINYINT,
PRIMARY KEY (fskc, fsxs),
CONSTRAINT ss FOREIGN KEY (fskc) REFERENCES kc (kcid),
CONSTRAINT s FOREIGN KEY (fsxs) REFERENCES xs (xsid)
) ;
INSERT INTO fs VALUES
(59,1,11),
(66,2,12),
(77,3,13),
(88,4,14);