什么是资料库正规化?为什么需要正规化?
2023年2月4日
💎 加入 E+ 成長計畫 如果你喜歡我們的內容,歡迎加入 E+,獲得更多深入的軟體前後端內容
何谓资料库正规化?

正规化是为了让资料库中重复的栏位资料减到最少,并且能快速的找到资料,提高关联性资料库的效能,因此其两大目标为:
- 降低资料的重复性
- 避免资料更新异常
而正规化中有不同的规则,而实务上,BCNF 被视为最高阶正规形式,如下图所示:

1NF 规则
每一个栏位只能有一个基元值(Atomic Value)即单一值
没有任何两笔以上的资料是完全重复
资料表中有 Primary Key,而其他所有的栏位都相依于 Primary Key
Database normalization 1NF
2NF 规则与 3NF 规则
2NF
- 符合 1NF - 非键值属性皆完全功能相依于主键
3NF
符合 2NF
不存在非键值属性递移相依于主键
两者解法类似,通常都是将关联性拆解,拆成多张表,并且决定 Foreign Key,如下图所示:

BCNF (Boyce-Codd Normal Form) 规则
比 3NF 再更严格
如果 Primary Key 为单一栏位组成,则符合 3NF 亦符合 BCNF
如果 Primary Key 为多个栏位组成,则须满足:
- 满足 3NF
- Primary Key 中的各栏位不可以相依于其他非主键的栏位

上图所示,每一个属性皆无法独自成为 Primary Key,而其无法满足 BCNF 是因为 Consultant
此栏位不为候选键,而遇到此问题也通常可以透过拆表来解决。