数状态"置疑"据库三大,,范式

  

  

一般地,在进行数据库设计时,应遵循三大原则,也就是我们通常说的三大范式,即第一范式要求确保表中每列的原子性,也就是不可拆分;第二范式要求确保表中每列与主键相关,而不能只与主键的某部分相关(主要针对联合主键),主键列与非主键列遵循完全函数依赖关系,也就是完全依赖;第三范式确保主键列之间没有传递函数依赖关系,也就是消除传递依赖。

  

本文将基于三大范式原则,结合具体的实例做简要分析,难度系数:基础。

  

  

2.1例子引入

  

根据如下场景设计出两种数据表,请分析两种数据表的合理性。

  
  

问题:需求描述:数据库系统中需要一个实体表,该表用来存储用户信息,其中“地址”这个属性,要求查询到省份,城市和详细地址。
  2
  3具体例子:
  4姓名:张红欣,,性别:男;年龄:26岁;联系电话:0378 - 23459876;省份:河南省;城市:开封,,详细地址:朝阳区新华路23号,
  5姓名:王艳,,,,性别:女;年龄:25岁;联系电话:021 - 2348768,,省份:贵州省;城市:贵阳市;详细地址:南明区南明区狮峰路6号;
  6姓名:汪梅,,,,性别:女;年龄:21岁;联系电话:0571 - 3876450;省份:浙江省;城市:杭州市;详细地址:滨江区滨康路352号;

     

第一种表设计

  

数状态

  

第二种表设计

  

数状态

  

2.2分析   

第一种表设计不满足第一范式,为什么不满足第一范式?因为地区列不具有原子性,能拆分成省份,市和具体地址;

  

  

3.1例子引入

  

根据如下场景设计出两种数据表,请分析两种数据表的合理性。

  
  

需求描述:设计一个订单信息表,订单有多种商品,将订单编号和商品编号作为联合主键。

     

第一种表设计

  

数状态

  

第二种表设计

  

数状态

  

3.2分析   

第一种表设计不满足第二范式,订单编号和商品编号作为联合主键,由于商品名称,单位、价格这几列只与商品编号有关,与订单编号无关,因此与主键(联合主键)无关,违反范式第二原则,

  

第二种表设计满足第二范式,把第一种设计表进行拆分,把商品信息分离到另一个表中,把订单项目表也分离到另一个表中。

  

  

4.1例子引入

  

根据如下场景设计出两种数据表,请分析两种数据表的合理性。

  
  

需要在数据库中存储如下信息:
  ,,学生编号;学生卡号;用户ID号,操作员级别,操作日期,操作时间,

     

第一种表设计

  

数状态

  

第二种表设计

  

数状态

  

数状态

  

4.2分析   

第一种表设计不满足第三范式,在表中,一个用户标识能确定一个UserLevel。这样,UserID依赖于StudentNo和CardNo,而UserLevel又依赖于UserID,这就导致了传递依赖,3 nf就是消除这种依赖。

  

第二种表设计满足第三范式,将第一种表格拆分成成两个表格。

  

5参考文献

  【1】

http://www.cnblogs.com/springside-example/archive/2011/10/06/2530207.html

  【2】

http://www.cnblogs.com/linjiqin/archive/2012/04/01/2428695.html定义

  

6版权   

  

感谢您的阅读,若有不足之处,欢迎指教,共同学习,共同进步。博主网址:http://www.cnblogs.com/wangjiming/<俨糠治恼吕枚恋氖?参考,引用,抄袭,复制和粘贴等多种方式整合而成的,大部分为原创。如您喜欢,麻烦推荐一下,如您有新想法,欢迎提出,邮箱:2016177728 @qq.com。可以转载该博客,但必须著名博客来源。

数状态"置疑"据库三大,,范式