为了建立冗余较小、结构合理的数据库,设计数据库时必须遵循一定的规则。在关系型数据库中这种规则就称为范式。范式是符合某一种设计要求的总结。要想设计一个结构合理的关系型数据库,必须满足一定的范式。
在实际开发中最为常见的设计范式有三个:
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
|
这样在查询订单信息的时候,就可以使用客户编号来引用客户信息表中的记录,也不必在订单信息表中多次输入客户信息的内容,减小了数据冗余。
分享到:
相关推荐
此文档是关于数据库三大范式的描述,以及在何种情况下应该用何种范式已达到数据库的良好效率!
### 数据库设计三大范式应用实例剖析 #### 引言 数据库的设计范式是指一系列用于指导数据库设计的规范化准则,其目的是确保数据的完整性、减少数据冗余,并提高数据库的操作效率。遵循这些范式可以避免在数据库...
数据库设计范式是数据库设计所需要满足的规范,满足这些规范的数据库是简洁的、结构明晰的,同时,不会发生插入、删除和更新操作异常。 第一范式(1NF)是数据库设计的基础规范,它规定了数据库表中的字段都是单一...
"数据库设计三大范式应用实例剖析" 数据库设计是数据库系统的核心部分,直接影响着数据库的性能、安全性和可维护性。数据库设计的目的是为了使数据库系统满足某些标准,使得数据库系统更加简洁、明晰、易于维护和...
数据库设计三大范式五大约束 数据库设计是指对数据库的结构、数据模型和数据关系的设计和规划。好的数据库设计可以提高数据库的性能、安全性和可维护性。本文将对数据库设计三大范式和五大约束进行详细的介绍和分析...
【数据库设计三大范式】是数据库设计的基本原则,它们确保了数据库的结构合理、数据一致性和减少冗余。这三个范式分别是第一范式(1NF)、第二范式(2NF)和第三范式(3NF)。 **第一范式(1NF)**要求数据库表中的...
【计算机等考三级数据库基础:数据库设计三大范式应用实例剖析】 数据库设计是构建高效、稳定、易维护的信息系统的基础,而三大范式——第一范式(1NF)、第二范式(2NF)和第三范式(3NF)是确保数据库设计规范的...
数据库设计范式是一系列规则,它们帮助开发者创建出既高效又易于维护的数据模型。遵循这些规范能有效避免数据冗余、插入异常、删除异常以及更新异常等问题。本文将详细介绍数据库设计的三大范式——第一范式(1NF)、...
数据库设计是信息系统构建的核心环节,其中的三大范式——第一范式、第二范式和第三范式,是确保数据规范化和避免数据冗余的关键原则。这些范式是根据关系数据库理论建立的,目的是提高数据库的逻辑独立性和减少数据...
数据库设计的三大范式是构建高效、稳定、无冗余关系型数据库的关键准则。这些范式为数据库设计者提供了一套标准,确保数据的一致性和完整性。以下是这三大范式的详细解释: 1. 第一范式(1NF - First Normal Form)...
在数据库设计中,三大范式(Normal Forms)是确保数据逻辑结构合理化、减少冗余、避免数据不一致的关键原则。这些范式是第一范式(1NF)、第二范式(2NF)和第三范式(3NF)。下面将详细阐述这三大范式及其在MySQL...
数据库设计的三大范式——第一范式(1NF)、第二范式(2NF)和第三范式(3NF)——是构建高效、无冗余、易于维护的数据库的基础。它们确保了数据的一致性和完整性,避免了数据异常,如插入异常、删除异常和更新异常...
数据库设计是构建高效、稳定的信息系统的关键步骤,其中三大范式——第一范式(1NF)、第二范式(2NF)和第三范式(3NF)是关系型数据库设计的基本准则,它们旨在减少数据冗余,提高数据一致性,并降低更新异常的...