数据库范式

  1. 第一范式 - 列的原子性,数据库表中的每一列都是不可再分的基本数据项
    1. 单一字段有多个有意义的值:比如 (people,address)其中address包括street,city,country,以逗号分割。想要查询住在某一city的people很不容易
    2. 用很多字段来表示同一事实:比如(people,address1,address2,address3),就算我们假设每个people最多有三个地址,当想要查询住在同一地址的people时也很不容易,因为有可能people1的address1与people2的address2相同,每一次都要比较3*3次组合
  2. 第二范式 - 符合第一范式;且表中的属性必须完全依赖于全部主键,消除非主属性对主键的部分依赖
    1. 比如(组件ID,供应商ID,供应商姓名,价格),组件ID+供应商ID为主键,价格完全依赖于全部主键,因为不同组件不同供应商具有不同价格,但是对于供应商姓名,则只依赖于供应商ID,会造成对同一供应商ID,名字数据重复,而且如果供应商改名,需要修改全部数据。因此需要单独一个表(供应商ID,供应商姓名),(组件ID,供应商ID,价格)
  3. 第三范式 - 非主属性之间不能有依赖关系,必须都直接依赖于主属性,消除传递依赖
    1. 比如(组件ID,制造商姓名,制造商地址),其中组件ID为主键,而制造商地址依赖于制造商姓名,需要(组件ID,制造商姓名)和新表(制造商姓名,制造商地址)其中姓名是主键
    2. 比如(订单ID,组件ID,单价,数量,总价),其中总价=单价*数量,总价依赖于单价和数量,需要去掉总价栏
  4. BC范式 - 任何属性(包括非主属性和主属性)不能被非主属性所决定。第三范式强调非主属性不能依赖于其他非主属性,BC范式是第三范式的加强,强调“任何属性”。因此如果满足第三范式,并且只有一个主键,则一定满足BC范式

一般,范式越高,表越多,数据库操作时需要表关联,增加了查询的复杂性,降低了查询性能。因此并不是范式越高越好,要根据需要进行权衡,第三范式已经消除了大部分的数据冗余,插入异常,更新异常和删除异常。

posted on 2011-10-30 22:27 *** 阅读(228) 评论(0)  编辑  收藏


只有注册用户登录后才能发表评论。


网站导航:
 
<2011年10月>
2526272829301
2345678
9101112131415
16171819202122
23242526272829
303112345

导航

统计

常用链接

留言簿

随笔档案

搜索

最新评论

阅读排行榜

评论排行榜