SqlServer 数据库 三大 范式 |
1 概述 一般地,在进行数据库设计时,应遵循三大原则,也就是我们通常说的三大范式,即第一范式要求确保表中每列的原子性,也就是不可拆分;第二范式要求确保表中每列与主键相关,而不能只与主键的某部分相关(主要针对联合主键),主键列与非主键列遵循完全函数依赖关系,也就是完全依赖;第三范式确保主键列之间没有传递函数依赖关系,也就是消除传递依赖 。 本文将基于三大范式原则,结合具体的实例做简要分析,难度系数:基础 。 2 第一范式 2.1 例子引入 根据如下场景设计出两种数据表,请分析两种数据表的合理性 。
第一种表设计 第二种表设计 2.2 分析 第一种表设计不满足第一范式,为什么不满足第一范式?因为region列不具有原子性,能拆分成省份、市和具体地址; 3 第二范式 3.1 例子引入 根据如下场景设计出两种数据表,请分析两种数据表的合理性 。
第一种表设计 第二种表设计 3.2 分析 第一种表设计不满足第二范式,订单编号和商品编号作为联合主键,由于商品名称,单位,价格这几列只与商品编号有关,与订单编号无关,因此与主键(联合主键)无关,违反范式第二原则; 第二种表设计满足第二范式,把第一种设计表进行拆分,把商品信息分离到另一个表中,把订单项目表也分离到另一个表中 。 4 第三范式 4.1 例子引入 根据如下场景设计出两种数据表,请分析两种数据表的合理性 。
第一种表设计 第二种表设计 4.2 分析 第一种表设计不满足第三范式,在表中,一个UserID能确定一个UserLevel 。这样,UserID依赖于StudentNo和CardNo,而UserLevel又依赖于UserID,这就导致了传递依赖,3NF就是消除这种依赖 。 第二种表设计满足第三范式,将第一种表格拆分成成两个表格 。 5 参考文献 【01】http://www.cnblogs.com/springside-example/archive/2011/10/06/2530207.html 【02】http://www.cnblogs.com/linjiqin/archive/2012/04/01/2428695.html#undefined 6 版权 感谢您的阅读,若有不足之处,欢迎指教,共同学习、共同进步 。博主网址:http://www.cnblogs.com/wangjiming/ 。极少部分文章利用读书、参考、引用、抄袭、复制和粘贴等多种方式整合而成的,大部分为原创 。如您喜欢,麻烦推荐一下;如您有新想法,欢迎提出,邮箱:2016177728@qq.com 。可以转载该博客,但必须著名博客来源 。 |