规范化-数据库设计原则

来源:互联网 发布:咒怨2剧情完整解析知乎 编辑:程序博客网 时间:2024/05/01 14:42

 简洁、结构明晰的表结构对数据库的设计是相当重要的。规范化的表结构设计,在以后的数据维护中,不会发生插入(insert)、删除(delete)和更新(update)时的异常。反之,数据库表结构设计不合理,不仅会给数据库的使用和维护带来各种各样的问题,而且可能存储了大量不需要的冗余信息,浪费系统资源。

规范化

在设计和操作维护数据库时,关键的步骤就是要确保数据正确地分布到数据库的表中。使用正确的数据结构,不仅便于对数据库进行相应的存取操作,而且可以极大地简化应用程序的其他内容(查询、窗体、报表、代码等)。正确进行表设计的正式名称就是"数据库规范化"。后面我们将通过实例来说明具体的规范化的工程。

数据冗余

数据应该尽可能少地冗余,这意味着重复数据应该减少到最少。比如说,一个部门雇员的电话不应该被存储在不同的表中, 因为这里的电话号码是雇员的一个属性。如果存在过多的冗余数据,这就意味着要占用了更多的物理空间,同时也对数据的维护和一致性检查带来了问题,当这个员工的电话号码变化时,冗余数据会导致对多个表的更新动作,如果有一个表不幸被忽略了,那么就可能导致数据的不一致性。

第一范式(First-Normal Form,1NF)

删除所有重复的组,并确定一个主键或复合主键。

事实上在当前所有的关系数据库管理系统(DBMS)中,都已经在建表的时候强制满足第一范式。

从一范式转化到二范式(Second-Normal Form,2NF)

根据第二范式的定义,转化为二范式就是消除部分依赖。

潜在问题:

1. 数据冗余:每一个字段都有值重复;

2. 更新异常:要一次更新该字段的多个值;

3. 插入异常:而该字段是主键的一部分,因此将无法插入记录;

4. 删除异常:删除一部分,遗漏一部分;

因此,我们需要将存在部分依赖关系的主属性和非主属性从满足第一范式的表中分离出来,形成一张新的表,而新表和旧表之间是一对多的关系。

从二范式转化到三范式(Third-Normal Form,3NF)

消除任何可传递依赖性。

 

在三范式之上,还存在着更为严格约束的BC范式和四范式,但是这两种形式在商业应用中很少用到,在绝大多数情况下,三范式已经满足了数据库表规范化的要求,有效地解决了数据冗余和维护操作的异常问题。

原创粉丝点击