为了建立冗余较小、结构合理的数据库,设计数据库时必须遵循一定的规则。在关系型数据库中这种规则就称为范式。范式是符合某一种设计要求的总结。要想设计一个结构合理的关系型数据库,必须满足一定的范式。

在实际开发中最为常见的设计范式有三个:

1.第一范式

第一范式是最基本的范式。如果数据库表中的所有字段值都是不可分解的原子值,就说明该数据库表满足了第一范式。

第一范式的合理遵循需要根据系统的实际需求来定。比如某些数据库系统中需要用到“地址”这个属性,本来直接将“地址”属性设计成一个数据库表的字段就行。但是如果系统经常会访问“地址”属性中的“城市”部分,那么就非要将“地址”这个属性重新拆分为省份、城市、详细地址等多个部分进行存储,这样在对地址中某一部分操作的时候将非常方便。这样设计才算满足了数据库的第一范式,如下表所示。

用户信息表

编号

姓名

性别

年龄

联系电话

省份

城市

详细地址

1

张红欣

26

0378-23459876

河南

开封

朝阳区新华路23号

2

李四平

32

0751-65432584

广州

广东

白云区天明路148号

3

刘志国

21

0371-87659852

河南

郑州

二七区大学路198号

4

郭小明

27

0371-62556789

河南

郑州

新郑市薛店北街218号

上表所示的用户信息遵循了第一范式的要求,这样在对用户使用城市进行分类的时候就非常方便,也提高了数据库的性能。

2.第二范式

第二范式在第一范式的基础之上更进一层。第二范式需要确保数据库表中的每一列都和主键相关,而不能只与主键的某一部分相关(主要针对联合主键而言)。也就是说在一个数据库表中,一个表中只能保存一种数据,不可以把多种数据保存在同一张数据库表中。

比如要设计一个订单信息表,因为订单中可能会有多种商品,所以要将订单编号和商品编号作为数据库表的联合主键,如下表所示。

订单信息表

订单编号

商品编号

商品名称

数量

单位

价格

客户

所属单位

联系方式

001

1

挖掘机

1

1200000¥

张三

上海玖智

020-1234567

001

2

冲击钻

8

230¥

张三

上海玖智

020-1234567

002

3

铲车

2

980000¥

李四

北京公司

010-1234567

这样就产生一个问题:这个表中是以订单编号和商品编号作为联合主键。这样在该表中商品名称、单位、商品价格等信息不与该表的主键相关,而仅仅是与商品编号相关。所以在这里违反了第二范式的设计原则。

而如果把这个订单信息表进行拆分,把商品信息分离到另一个表中,把订单项目表也分离到另一个表中,就非常完美了。如下所示。

订单信息表

订单编号

客户

所属单位

联系方式

001

张三

上海玖智

020-1234567

002

李四

北京公司

010-1234567

订单项目表

订单编号

商品编号

数量

001

1

1

001

2

8

002

3

2

商品信息表

商品编号

商品名称

单位

商品价格

1

挖掘机

1200000¥

2

冲击钻

230¥

3

铲车

980000¥

这样设计,在很大程度上减小了数据库的冗余。如果要获取订单的商品信息,使用商品编号到商品信息表中查询即可。

3.第三范式

第三范式需要确保数据表中的每一列数据都和主键直接相关,而不能间接相关。

比如在设计一个订单数据表的时候,可以将客户编号作为一个外键和订单表建立相应的关系。而不可以在订单表中添加关于客户其它信息(比如姓名、所属公司等)的字段。如下面这两个表所示的设计就是一个满足第三范式的数据库表。

订单信息表

订单编号

订单项目

负责人

业务员

订单数量

客户编号

001

挖掘机

刘明

李东明

1台

1

002

冲击钻

李刚

霍新峰

8个

2

003

铲车

郭新一

艾美丽

2辆

1

客户信息表

客户编号

客户名称

所属公司

联系方式

1

李聪

五一建设

13253661015

2

刘新明

个体经营

13285746958

这样在查询订单信息的时候,就可以使用客户编号来引用客户信息表中的记录,也不必在订单信息表中多次输入客户信息的内容,减小了数据冗余。

转载自:

http://www.cnblogs.com/zhhh/archive/2011/04/21/2023355.html

转载于:https://www.cnblogs.com/colder/archive/2012/03/18/2404513.html

数据库设计的三大范式相关推荐

  1. mysql增删改查不区分大小写吗_MySQL的增删改查语句以及数据库设计的三大范式...

    数据库设计的三大范式: 1.列的原子性,即列是不可再分的 2.表里的每一列都应该与主键有关系, 3.表里的每一列都应该与主键有直接关系, 当使用自增长列不满足2.3范式,是特殊例子,只用在解决较为复杂 ...

  2. 5、数据库设计的三大范式

    为了建立冗余较小.结构合理的数据库,设计数据库时必须遵循一定的规则.在关系型数据库中,这种规则就是范式.范式是符合某一种级别的关系模式的集合.关系型数据库中的关系必须满足一定的要求,即满足不同的范式. ...

  3. 数据库设计的三大范式:详细

    在大学学习数据库的时候,不明白为什么会学习很多关系代数.设计范式的理论.但是,有了这些理论基础,在遇到问题的时候脑袋会有灵光一闪的感觉.那种感觉很像是大雾天太阳照射大地的感觉,心中一片光亮.^_^ 那 ...

  4. 数据库设计常用三大范式

    前言 设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式,各种范式呈递次规范,越高的范式数据库冗余越小. 目前关系数据库有六种范式:第一范式(1NF). ...

  5. 数据库设计的三大范式(举例详解)

     为了建立冗余较小.结构合理的数据库,设计数据库时必须遵循一定的规则.在关系型数据库中这种规则就被称为范式.范式是符合某一种设计要求的总结.因此要设计一个结构合理的关系型数据库,就必须要满足下面这三大 ...

  6. 浅聊数据库设计的三大范式

    写在最前 为了建立冗余较小.结构合理的数据库,设计数据库时必须遵循一定的规则.在关系型数据库中,这种规则就是范式.范式是符合某一种级别的关系模式的集合.关系型数据库中的关系必须满足一定的要求,即满足不 ...

  7. 数据库设计的三大范式通俗解释

    一.三大范式通俗解释: (1)简单归纳: 第一范式(1NF):字段不可分: 第二范式(2NF):有主键,非主键字段依赖主键: 第三范式(3NF):非主键字段不能相互依赖. (2)解释: 1NF:原子性 ...

  8. 数据库设计的三大范式、BCNF、4NF

    一.理解数据库的范式需要理解几个基本概念: 码:表中可以唯一确定一个元组的某个属性(或者属性组),如果这样的码有不止一个,那么大家都叫候选码,我们从候选码中挑一个出来做老大,它就叫主码.相当于键值的意 ...

  9. 数据库设计的三大范式[学习笔记]

    * 概念:设计数据库时,需要遵循的一些规范.要遵循后边的范式要求,必须先遵循前边的所有范式要求 设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式,各种 ...

最新文章

  1. 利用HTML5 Canvas和Javascript实现的蚁群算法求解TSP问题演示
  2. [YTU]_2866(结构体---点坐标结构体)
  3. java src 文件路径_java中获得src路径下文件的常用方法
  4. 【转】BI 入门: 体系架构及相关技术
  5. 链表面试题1:反转单链表,不带头结点。
  6. excel公式:用countif、match、index合并同类项
  7. pyqt怎么button怎么链接_SEO内部链接怎么优化
  8. ORACLE expdp/impdp导出实例
  9. Java中的非对称加密算法RSA实现
  10. PAT 乙级 1005. 继续(3n+1)猜想 (25) Java版
  11. (25)软件工程开发规范
  12. 【原创】大数据基础之Spark(1)Spark Submit即Spark任务提交过程
  13. SECS/GEM封装库金南瓜平台(一)简介
  14. Kubernetes PV与PVC
  15. 华为AR路由器无法上网解决办法
  16. Java输入某年某月某日,判断这一天是这一年的第几天?
  17. 深入理解AQS之ReentrantReadWriteLock详解
  18. 关于压电式雨量传感器技术相关问答的回复
  19. 【Linux Centos6/7连接Oracle11g数据库,提示:ORA-12514 TNS 监听程序当前无法识别连接描述符中请求服务】
  20. 大连民族学院计算机科学与工程学院,赵丕锡 - 大连民族大学 - 计算机科学与工程学院...

热门文章

  1. 2021-2027年中国透明熔融石英管行业市场全景调查及投资前景分析报告
  2. JAVA用最简单的方法来构建一个高可用的服务端,提升系统可用性
  3. 2022-2028年中国橡胶漆产业发展动态及未来趋势预测报告
  4. 卷积神经网络(CNN)张量(图像)的尺寸和参数计算(深度学习)
  5. 汇编语言关于8086CPU多种寻址方式总结
  6. Intel发布FPGA
  7. GStreamer 1.18.4稳定的错误修复版本
  8. AMD–7nm “Rome”芯片SOC体系结构,支持64核
  9. 多传感器融合:自动驾驶(下)
  10. 自监督学习(Self-Supervised Learning)多篇论文解读(上)