ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

数据库设计三范式

2020-09-25 10:00:23  阅读:265  来源: 互联网

标签:3NF 范式 院校 数据库 2NF 数据表 地址 设计 主键


  面向对象程序开发都是以类为基础的。实体类中的字段或属性,基本上都是与数据库表中的字段一一对应的,所以数据表设计的好坏直接关系到程序执行的效率。

这里学生类中的Age属性是可以计算出来的,Age = Now.DateTime.Year - Convert.ToDateTime(objStu.Birthday).Year;所以实体类字段不必与数据表中的字段一一对应。如果仅仅想简化表设计,在设计学生信息表时不添加年龄这一字段,数据库也采用这种类似的方式计算Age,那么势必得不偿失。

那么数据表设计的三范式是什么呢?

  1NF:必须满足原子性(字段是否还能在拆分),这是针对具体开发项目而言的。

如下图:针对具体项目中,如家庭地址——是否有明确的省份、城市区分的要求,如果没有则可用一表,否则用二表

  2NF:所有非主属性都完全依赖于主键

从编程的角度看实体类,2NF是不是特别重要。但是从节约数据库内存资源的角度看,2NF很有必要。想象一下,下图中班级名称:varchar(30)类型,每插入一个学生记录,占用的字节不大,但是如果数据有1亿条,可以算一下会吃掉多少内存。下表中班级名称重复出现,这种现象被称为数据冗余。

我们完全可以设计两张表:学生表、班级表,通过班级编号,将两张表关联在一起,减少数据冗余,节约内存资源。

  3NF:所有非主属性字段对主键不存在传递依赖,即每个属性都跟主键有直接关系而不是间接关系。

2NF和3NF联系与区别:

  相同点:通过表格拆分,减少数据冗余

  不同点:3NF被拆分下来的第二张表,某两个字段之间一定描述了一种客观事实,它们一一对应。

比如下图学生表:姓名与所在专业是直接关系、所在专业与全国专业排名也是直接关系,二者短期并不会改变,是一种客观事实(假设全国高校各类专业每20年排名一次)。因此姓名与全国专业排名也就间接联系在了一起,这样的设计就违反了3NF。再比如(学号,姓名,年龄,性别,所在院校)--(所在院校,院校地址,院校电话),所在院校->院校地址,两者也是一一映射,一种事实。姓名->所在院校->院校地址,姓名和院校地址是间接联系的(别钻牛角说学校可能会迁址)。如果院校地址像股票一样随时变化,那就不存在间接关系了,这时就可以用2NF原则来拆分两表了。

 

标签:3NF,范式,院校,数据库,2NF,数据表,地址,设计,主键
来源: https://www.cnblogs.com/pandora2050/p/13728425.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有