数据库设计三范式
当应用规范化设计数据库时,前提是:
1.表中的行应是唯一的,及必存在主键
2.表必须只描述一个实体,不能顺带描述其它实体
范式一:保证列为原子性,即列不可再拆分,看如下的表(员工编号为主键)
列【城市】,【行政区】,【电话号码】,【内部分机号码】等不能再拆分了,保持了原子性。
从理论上讲,列【地址】是可以在分的,比如再分为【省名】,【市名】,【县名】等,但很少见。
中文的姓名一般不需要再分的,但英文的名字有FirstName和MiddleName和LastName之别。
结论:根据实际需要和常规,某列能不分就不分。
范式二:第一范式+一行中除主键的列一定要依赖主键,即主键决定其它列
员工编号决定了员工的姓名,职称,所居住的地址,他所属的电话号码等,员工编号保证为一独立的实体,而其它的列则为该实体的属性,是为实体拥有的
那好,如果添加两列为【分数】,【网站】的,算不算打破了第二范式?
结论:也是根据实际需要和常规,在某个项目中,如每个员工有评比的分数来决定奖金的多少,每个员工最爱上哪个网站等都可以与员工编号关联起来的
范式三:第二范式+一行的键不能与非主键列有任何的依赖关系,即非主键列不能决定其它列+不能有派生的数据
姓名为王大德的不能决定编号为14的该员工地址,职称不能决定姓名,城市等。
最后的总结:第三范式最终目的是把数据分开为逻辑的,不可重复的形式,这种形式也非常容易重新组合在一起。规范化是数据库设计的一部分,根据需要可以规范化,也可以
非规范化,规范化只是一种理论,这就是它的全部,无论无何,你都要设计一个数据库,不管好坏!