数据库设计的三大范式

数据库设计的三大范式

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

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

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

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

时间: 2024-10-24 11:35:50

数据库设计的三大范式的相关文章

E-R画图规则和数据库设计的三大范式

总结:1.E-R图设计: 理念:一对一(1 1):将任意1端的主键拿来做另一端的外键 一对多(1 n):将1端的主讲拿来做n端的外键 多对多(n m):互相将双方的主键拿来做另一端的外键 数据库设计的三大范式:一.表中的每个字段必须是不能再分割的最小独立字段. 二.在第一范式的基础上,表中的每个字段都必须和主键的类型相同比如员工的表都是员工的信息不要出现产品或者其他信息 三.在第二范式的基础上,表中的每个字段都要和表中的主键有直接关系. 就是.表中的所有字段都是不能再小的独立单位且表中的所有字段

数据库基础和三大范式以及基本的增删改查命令

所谓数据库就是建库 建表 建约束.① 确定实体 就是确定有几张表 ② 确定表的属性 规范化的三个级别:数据库设计的三大范式!!!! 第一范式(1NF):原子性:数据表中的每一列是不可拆分的最小单元,也就是确保每一列的原子性. 例如:userInfo:'山东省烟台市 11233445667' 拆分成: '山东省烟台市' 和''11233445667": 第二范式(2NF):满足1NF后,要求:表中的所有列都依赖于主键,而不能有任何一列与主键没有关系. 也就是说每张表只能描述一件事情. 例如:订单表

第三十二章——数据库打包和三大范式

package程序包和程序体 package---包头 package body---包体 dbms_output.put_line(); 上面的输出语句就是一个程序包加存储过程 dbms_output是包的名字, 调用里面的某个方法 包头的语法: create or replace package 包头名 as 变量的说明... 存储过程或者函数的声明(不需要写实现的代码块) end; 声明了一个包头, 就要有一个包体与之对应, 去实现包头中写明的存储过程或者函数 包体的语法: create

数据库设计的三范式(六范式)

数据库是设计范式理解:关系型数据库的核心"规范化",规范化的存在是为了在数据库组织保存数据时使数据 保持完整性并且最小化的冗余数据. 数据库设计有六种范式规则,但通常我们再设计数据库时,通常用到3种范式. 1.1  第一范式: 概念:指数据库表的每一列的数据不可拆分,同一列不能有多个值,并且不能有重复的属性(列) 第一范式是所有范式的基础,不满足的数据库就不能称为关系行数据库 1:如图 简单来说第一范式没有重复的列,列中不包含多值 1.2 第二范式 概念: 在表满足第一范式的设计在数据

6.7-数据库设计,三大范式

一.数据库设计 软件开发: 需求分析 概要设计 详细设计 代码编写 测试 上线部署 ER图: 画ER图 : visio 亿图 二.三大范式 第一范式: 确保每列的原子性 保证每列都是不可再分的最小数据单元 第二范式: 要求每张表只描述一个事情 第三范式 如果一个关系满足2NF, 并且除了主键以外的其他列都不传递依赖于主键列, 则满足第三范式(3NF) 三.JDBC java连接数据库技术 DriverManager :依据数据库的不同,管理JDBC驱动 Connection :负责连接数据库并担

数据库设计3大范式

第一范式:确保每列的原子性. 如果每列(或者每个属性)都是不可再分的最小数据单元(也称为最小的原子单元),则满足第一范式. 例如:顾客表(姓名.编号.地址.--)其中"地址"列还可以细分为国家.省.市.区等. 第二范式:在第一范式的基础上更进一层,目标是确保表中的每列都和主键相关. 如果一个关系满足第一范式,并且除了主键以外的其它列,都依赖于该主键,则满足第二范式. 例如:订单表(订单编号.产品编号.定购日期.价格.--),"订单编号"为主键,"产品编号&

数据库设计的三范式

目前,主要有六种范式:第一范式.第二范式.第三范式.BC范式.第四范式和第五范式. 今天我们暂时只了解基本的三范式. 第一范式(1NF)定义:如果关系模式R的每个关系r的属性都是不可分的数据项,那么就称R是第一范式的模式. (也就是针对的是表中的字段要有唯一不可分割性) 例如(学生信息表):学生编号 姓名 性别 联系方式20080901 张三 男 email:[email protected],phone:8888666620080902 李四 女 email:[email protected]

MySql三大范式与数据库设计和表创建常用语句

[数据库设计的三大范式] 1.第一范式(1NF First Normal Fromate):数据表中的每一列(字段),必须是不可拆分的最小单元.也就是确保每一列的原子性. 例如: userInfo: '山东省烟台市 13181621008' => userAds:'山东省烟台市' tel:'13181621008' 2.第二范式(2NF):满足1NF后,要求:表中所有的列,都必须功能依赖于主键,而不能有任何一列与主键没有关系.(一张表值描述一件事情) 3.第三范式(3NF):满足2NF后,要求:

mysql-(三)-数据库设计三大范式

一.数据库设计在业务流程的位置 需求分析时要将原始的需求抽象成业务模型 写成需求说明书 <需求说明书> 概要设计 抽取实体  :  业务模型  ->   实体模型 (java类) 数据库设计  : 业务模型/实体模型  ->  数据模型 详细设计 ... 二.数据库设计的三大范式 第一范式:要求表的每个字段必须是不可分割的独立单元 反例 如: student 名字有曾用名和现在的名字 student name 小王|小明 查询不便 ====违法第一范式 student name o