从目的上来说、范式化越高数据库的一致性就越容易维护,范式化越高数据的冗余就越小。通过消除重复数据或数据的各种副本可获得更高效的数据修改操作。
因为通常这样只要修改一个地方,就可以减少锁及日志记录。
上面说了这么多你是不是感觉范式化越高就越好呢?可是万事万物都有一个度,过了这个度就不好了。
我不是讲禅道的,还是用一个例子说明一下吧。
-------------------------------------------------------------
设计A:
--------------------------------------------------------
create table employee(
ID int,Name nvarchar(4), -- 工号
PhoneNumber nvarchar(11),-- 手机号码
Department nvarchar(8), -- 部门名
DepartmentPhoneNumber nvarchar(11)); -- 部门分机
go
设计B:
------------------------------------------------------
create table department(
DepartmentID int , -- 部门ID
PhoneNumber varchar(11)); -- 分机号
go
create table employe(
EmployeeID int, -- 工号
Name nvarchar(8),--姓名
PhoneNumber nvarchar(11),-- 手机
DepartmentID int -- 所属部门号);
go
*********************************************************************************************************************
总结:
这两种设计哪个好呢?
情况一:
数据是修改部门的电话号码、设计A可能要修改多行(如果这个部门有多个人的话)。设计B 可以改动一行就可以了。
情况二:
如果是要读出员工的手机号和所在部门的分机号的话设计A只要读一张表。设计B要连接两张表。这种情况下设计A是有
优势的。
高范式化对更改有优势,低范式化对读有优势。