什么是数据库规范化
维基百科的定义如下:
数据库规范化,又称数据库或资料库的正规化、标准化,是数据库设计中的一系列原理和技术,以减少数据库中数据冗余,增进数据的一致性。
数据库范式是埃德加·科德设计出来的。在1970年代初,他定义了第一范式(First normal form)、第二范式(Second normal form),和**第三范式(Third normal form)**的概念。数据库范式可以理解成一系列的规范或者规则,为了实现数据库规范化的目标,我们需要按照这些范式的规则来优化数据库。
关于这些范式的规则我会在文章后续部分说明。
现在数据库设计最多满足第三范式,普遍认为范式过高,虽然具有对数据关系更好的约束性,但也导致数据关系表增加而令数据库IO更易繁忙,原来交由数据库处理的关系约束现更多在数据库使用程序中完成。
因此,本文数据库的优化实例只做到第三范式。
术语
为了更准确,简洁地定义各个范式的规则,我们需要知道一些术语的含义。对于有些术语来说,我不打算写出它标准化的定义,这是因为标准化定义十分晦涩。对于这样的术语,俺直接给出相应的例子,理解它代表的是什么东西就行。
- 关系(relation):数据库中的「表」
- 元组(tuple):数据库表中的「行」
- 属性(attribute ):数据库表中的「列」
- 超键(superkey):数据库关系中能够唯一标示元组(即,行)的属性集合。超键例子
- 候选键(candidate key):不含有多余属性的超键。也就是说,这个超键属性集合的任何一个真子集(proper subset),都不能唯一标示元组。候选键有时也被称为主键(primary key)。一个表中的候选键可能不唯一
- 主属性(prime attributes):候选键中包含的属性
- 非主属性(non-prime attribute):任何一个候选键都没有包含的属性