简单理解数据库的三范式

数据库设计中,需要遵循一定的规则才能避免数据的冗余,这些规则实际上限制的是表与表、表与属性之间的关系。这些不同的规范要求被称为不同的范式,各种范式呈递次规范,越高的范式数据库冗余越小。

第一范式

第一范式(1NF)是指数据表中的每个字段必须是不可拆分的最小单元,也就是确保每一列的原子性。
举个栗子,某省的投档线公布表:

院校代码 科类 院校名称 投档分
0019 理工 吉林大学 538.106123198
1000 理工 北京大学医学部 657.141142258
1001 文史 北京大学 633.127139227

很明显,这个投档线字段包括了总分、数学语文和英语,这个字段可以拆分为另外四个字段,所以这种设计不遵循第一范式。

第二范式

第二范式(2NF)是指满足1NF后,要求表中的所有列,都必须依赖于主键,而不能有任何一列与主键没有关系,也就是说一个表只描述一件事情。

这个是什么意思呢,意思就是说,表中除了主键的其他列,不能和主键没有关系,但其实这句话又有点相互矛盾,既然没关系,又怎么会放在同一列中呢,其实可以这样想,单独把这一列和主键拿出来,如果他们之间没有关系,那肯定是不满足第二范式的。

举个栗子:

学号 课程号 分数 学分
12 0001 50 5
13 0002 60 3
14 0003 70 2

这是一张成绩表,包括学号、课程号、成绩和学分,主键为学号,但是单独将学分和学号拿出来,两个没有关系,所以不满足第二范式。

第三范式

第三范式(3NF)是指必须先满足第二范式(2NF),另外要求表中的每一列只与主键直接相关而不是间接相关。

这个又是什么意思呢,似乎和第二范式的描述差不多啊,其实不然,还是有细微差别的,第三范式保证了表中的字段消除了传递依赖,比如C依赖于B,B依赖于A,那么C依赖于A,像这样的情况不能让A、B、C出现在同一个表中。

举个栗子:

学号 学院号 学院地点
05 01 01楼
06 01 01楼
07 02 02楼

可以看出,学院地点与学号不是直接相关连,学院地点和学院号直接相关连,所以不满足数据库第三范式。有些东西只可意会不可言传,不需要完全区分第二范式和第三范式的区别,只要能在实际运用中知道,这个表设计到底符不符合数据库规范就可以了。

你可能感兴趣的:(数据库)