最近看了杨廷琨老师谈作为DBA需要的素质,“DBA这个行业面临的学习是永无止境的。前面要跟应用开发关联,底层需要跟主机、操作系统、存储关联,所以知识面是非常广的”。
然后最近查资料的时候看到“三大范式、ACID”这些本科必修课就学过的内容却一脸懵逼。
扪心自问,一直侧重于应用层的学习,不注重夯实基础其实也是一种偷懒。
所以,不管上层应用如何飞速发展,计算机考研躲不开408那几门专业课,是有道理的。故近期需要恶补一下数据库的基础知识。
一、概念
范式即Normal Form,是关系型数据库理论的基础,也是我们进行数据库设计时要满足的规范。
常用的有第一(1NF)、第二(2NF)、第三(3NF)范式。
1. 1NF
1NF定义:每个列(即属性)都是不可再分的最小原子单元。
不满足第一范式的不是关系数据库。
例子如下:
表PERSON_INFO:
这里的TEL实际上可以拆分成personal_Tel,office_Tel和home_Tel,就违背了列的原子性这个要求。
可以做如下拆分,即可满足列的原子性要求:
但是个人觉得,如果业务上没有对原子性查询有要求,仅查询复合的联系方式信息,且无需对该列进行修改操作,保留非原子结构也无妨。
2. 2NF
2NF定义:每个非关键属性都依赖于整个关键字,而不是关键字的一部分。
注意:
1)2NF的前提是满足1NF;
2)这边主要针对复合主键,如果说主键是单字段格式,则必定满足2NF。