数据库范式

数据库设计准则(第一、第二、第三范式说明)

浪子不回头ぞ 提交于 2020-01-04 23:48:29
关于数据库的设计准则,平时我也就知道怎么去做。当有人问起我第三范式的时候,我还真不知道怎么去表述了。找到这篇解说,觉得概念和例子都讲得不错,收藏起来,以备后用。 I、关系数据库设计范式介绍 1.1 第一范式(1NF)无重复的列 所谓第一范式(1NF)是指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。如果出现重复的属性,就可能需要定义一个新的实体,新的实体由重复的属性构成,新实体与原实体之间为一对多关系。在第一范式(1NF)中表的每一行只包含一个实例的信息。简而言之,第一范式就是无重复的列。 说明:在任何一个关系数据库中,第一范式(1NF)是对关系模式的基本要求,不满足第一范式(1NF)的数据库就不是关系数据库。 1.2 第二范式(2NF)属性完全依赖于主键[消除部分子函数依赖] 第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF)。第二范式(2NF)要求数据库表中的每个实例或行必须可以被惟一地区分。为实现区分通常需要为表加上一个列,以存储各个实例的惟一标识。例如员工信息表中加上了员工编号(emp_id)列,因为每个员工的员工编号是惟一的,因此每个员工可以被惟一区分。这个惟一属性列被称为主关键字或主键、主码。 第二范式(2NF

数据库设计三大范式

主宰稳场 提交于 2020-01-03 11:43:36
数据库设计三大范式 数据库设计的三大范式 为了建立冗余较小、结构合理的数据库,设计数据库时必须遵循一定的规则。在关系型数据库中这种规则就叫做范式。 范式就是符合某一种设计要求的总结,要想设计一个结构合理的关系型数据库,必须满足一定的范式。 在实际开发中最常见的设计范式有三个: 1、第一范式(确保每列保持原子性) 第一范式是最基本的范式。如果数据库表中的 所有字段值都是不可分解的原子值,就说明该数据库满足第一范式。 第一范式的合理遵循需要根据系统给的实际需求来确定。比如某些数据库系统中需要用到“地址”这个属性,本来直接将“地址”属性设计成为一个数据库表的字段就行,但是如果系统经常访问“地址”属性中的“城市”部分,那么一定要把“地址”这个属性重新拆分为省份、城市、详细地址等多个部分来进行存储,这样对地址中某一个部分操作的时候将非常方便,这样设计才算满足数据库的第一范式。如下图。 上图所示的用户信息遵循第一范式的要求,这样对用户使用城市进行分类的时候就非常方便,也提高了数据库的性能。 2、第二范式(确保表中的每列都和主键相关) 第二范式在第一范式的基础上更进一层,第二范式需要确保数据库表中每一列都和主键相关,而不能只与主键的某一部分相关(主要针对联合主键而言)。也就是说在一个数据库表中,一个表中只能保存一种数据,不可以把多种数据保存在同一张数据库表中。 比如要设计一个订单信息表

数据库设计:三范式

房东的猫 提交于 2019-12-28 13:15:43
数据库设计的三范式 三范式: 1.第一范式(1NF):确保每一列的原子性 (做到每列不可拆分) 2.第二范式(2NF):在第一范式的基础上,非主字段必须依赖于主字段(一个表只做一件事) 3.第三范式(3NF):在第二范式的基础上,消除传递依赖 反三范式: 反三范式是基于第三范式所调整的,没有冗余的数据库未必是最好的数据库,有时为了提高运行效率,就必须降低范式标准,适当保留冗余数据。 来源: CSDN 作者: Leon_Jinhai_Sun 链接: https://blog.csdn.net/Leon_Jinhai_Sun/article/details/103742626

数据库 三大范式

给你一囗甜甜゛ 提交于 2019-12-28 09:53:43
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 数据库设计三大范式 为了建立冗余较小、结构合理的数据库,设计数据库时必须遵循一定的规则。在关系型数据库中这种规则就称为范式。范式是符合某一种设计要求的总结。要想设计一个结构合理的关系型数据库,必须满足一定的范式。 在实际开发中最为常见的设计范式有三个: 1 .第一范式 ( 确保每列保持原子性 ) 第一范式是最基本的范式。如果数据库表 , 每一列属性都是不可再分的属性值,确保每一列的原子性 ,就说明该数据库表满足了第一范式。 第一范式的合理遵循需要根据系统的 实际需求 来定。比如某些数据库系统中需要用到 “ 地址 ” 这个属性,本来直接将 “ 地址 ” 属性设计成一个数据库表的字段就行。但是如果系统经常会访问 “ 地址 ” 属性中的 “ 城市 ” 部分,那么就非要 将 “ 地址 ” 这个属性重新拆分为省份、城市、详细地址等多个部分进行存储 ,这样在对地址中某一部分操作的时候将非常方便。这样设计才算满足了数据库的第一范式,如下表所示。 编号 姓名 性别 年龄 省份 城市 详细地址 1 张三 男 23 北京 北京 朝阳区新华路 23 号 上表所示的用户信息遵循了第一范式的要求,这样在对用户使用城市进行分类的时候就非常方便,也提高了数据库的性能。 2 .第二范式 ( 不能部分依赖 ) 第二范式是在满足第一范式的基础上

数据库设计-范式

北城以北 提交于 2019-12-28 09:44:03
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 数据库范式是数据库设计中必不可少的知识,没有对范式的理解,就无法设计出高效率、优雅的数据库。甚至设计出错误的数据库。而想要理解并掌握范式却并不是那 么容易。教科书中一般以关系代数的方法来解释数据库范式。这样做虽然能够十分准确的表达数据库范式,但比较抽象,不太直观,不便于理解,更难以记忆。 本文用较为直白的语言介绍范式,旨在便于理解和记忆,这样做可能会出现一些不精确的表述。但对于初学者应该是个不错的入门。我写下这些的目的主要是为了加强 记忆,其实我也比较菜,我希望当我对一些概念生疏的时候,回过头来看看自己写的笔记,可以快速地进入状态。如果你发现其中用错误,请指正。 下面开始进入正题: 一、基础概念 要理解范式,首先必须对知道什么是关系数据库,如果你不知道,我可以简单的不能再简单的说一下:关系数据库就是用二维表来保存数据。表和表之间可以……(省略10W字)。 然后你应该理解以下概念: 实体:现实世界中客观存在并可以被区别的事物。比如“一个学生”、“一本书”、“一门课”等等。值得强调的是这里所说的“事物”不仅仅是看得见摸得着的“东西”,它也可以是虚拟的,不如说“老师与学校的关系”。 属性:教科书上解释为:“实体所具有的某一特性”,由此可见,属性一开始是个逻辑概念,比如说,“性别”是“人”的一个属性。在关系数据库中

MySQL设计之三范式

岁酱吖の 提交于 2019-12-26 05:39:24
网上查找了一些资料,记录如下并加入自己的理解。 设计关系 数据库 时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式,各种范式呈递次规范,越高的范式数据库冗余越小。但是有些时候一昧的追求范式减少冗余,反而会降低数据读写的效率,这个时候就要反范式,利用空间来换时间。 目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)。满足最低要求的范式是第一范式(1NF)。在第一范式的基础上进一步满足更多规范要求的称为第二范式(2NF),其余范式以次类推。一般说来,数据库只需满足第三范式(3NF)就行了。所以这里就只记录三范式相关的知识。 三范式 1NF:字段不可分; 2NF:有主键,非主键字段依赖主键; 3NF:非主键字段不能相互依赖; 解释: 1NF:原子性 字段不可再分,否则就不是关系数据库; 2NF:唯一性 一个表只说明一个事物; 3NF:每列都与主键有直接关系,不存在传递依赖; 第一范式(1NF) 即表的列的具有原子性,不可再分解,即列的信息,不能分解, 只要数据库是关系型数据库( MySQL / Oracle /db2/informix/sysbase/sql server),就自动的满足1NF。数据库表的每一列都是不可分割的原子数据项

数据库三范式

杀马特。学长 韩版系。学妹 提交于 2019-12-25 18:32:17
范式的概念   为了建立冗余较小、结构合理的数据库,设计数据库时必须遵循一定的规则。在关系型数据库中这种规则就称为范式。范式是符合某一种设计要求的总结。要想设计一个结构合理的关系型数据库,必须满足一定的范式。 在实际开发中最为常见的设计范式有三个: 1 .第一范式(确保每列保持原子性) 第一范式是最基本的范式。如果数据库表中的所有字段值都是不可分解的原子值,就说明该数据库表满足了第一范式。 第一范式的合理遵循需要根据系统的实际需求来定。比如某些数据库系统中需要用到“地址”这个属性,本来直接将“地址”属性设计成一个数据库表的字段就行。但是如果系统经常会访问“地址”属性中的“城市”部分,那么就非要将“地址”这个属性重新拆分为省份、城市、详细地址等多个部分进行存储,这样在对地址中某一部分操作的时候将非常方便。这样设计才算满足了数据库的第一范式,如下表所示。 上表所示的用户信息遵循了第一范式的要求,这样在对用户使用城市进行分类的时候就非常方便,也提高了数据库的性能。 2 .第二范式(确保表中的每列都和主键相关) 第二范式在第一范式的基础之上更进一层。第二范式需要确保数据库表中的每一列都和主键相关,而不能只与主键的某一部分相关(主要针对联合主键而言)。也就是说在一个数据库表中,一个表中只能保存一种数据,不可以把多种数据保存在同一张数据库表中。 比如要设计一个订单信息表

数据库设计范式

拜拜、爱过 提交于 2019-12-22 17:19:45
简介   关系数据库中的关系必须满足一定的要求,即满足不同的范式。   目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、第四范式(4NF)、 第五范式 (5NF)和第六范式(6NF)。满足最低要求的范式是第一范式(1NF)。在第一范式的基础上进一步满足更多要求的称为第二范式(2NF),其余范式以次类推。一般说来,数据库只需满足第三范式(3NF)就行了。 第一范式(1NF)无重复的列   所谓第一范式(1NF)是指数据库表的每一列都是不可分割的基本数据项,同一列中不能同时有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。如果出现重复的属性,就可能需要定义一个新的实体,新的实体由重复的属性构成,新实体与原实体之间为一对多关系。在第一范式(1NF)中表的每一行只包含一个实例的信息。简而言之,第一范式就是无重复的列。   说明:在任何一个关系数据库中,第一范式(1NF)是对关系模式的基本要求,不满足第一范式(1NF)的数据库就不是关系数据库。 第二范式(2NF)属性   完全依赖于主键[消除非主属性对主码的部分函数依赖]   第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF)。第二范式(2NF)要求数据库表中的每个实例或行必须可以被唯一地区分。为实现区分通常需要为表加上一个列

数据库范式理解

蹲街弑〆低调 提交于 2019-12-20 02:07:53
   当前我们使用的主流数据库是关系型数据库,所以我是记录在关系型数据库中对范式的一些理解和看法.数据库库范式分为六种(其实还有有一个BCNF),分别为从第一范式到第六范式.高级一层是建立在所有低层的基础上的,如第2范式是建立在第一范式的基础上的,依次类推. 下面分别举例讲解各种范式: 1.第一范式(1NF):   第一范式的核心描述为:数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值.该范式讲的是列的原子性.有两层意思:一层是说每一列只能存一个属性值(如果把2个属性值存在1列中).第二层说的是在一张表中属性值不能重复. 在现代关系行数据库中,都是默认满足第一范式的,所以你想要写出不满足第一范式的结构来还是不可能的事情,所以第一范式就不再多说.如果想深入,可以研究下其他非关系型的数据库的情况. 2.第二范式(2NF)   第二范式的核心描述为:行有唯一的主键,非主键仅对主键依赖. 有2层意思,第一层,每一行都要有主键(单独信息或组合信息),这个容易理解. 第二层意思是非主键对主键依赖,如果是复合主键的情况,非主键属性不能依赖于部分主键属性.如 【产品,仓库号,数量,仓库地址,仓库管理员】,这里(产品+仓库号)为复合主键,而仓库地址和仓库管理员依赖于仓库号,这就是上面描述的'主键属性不能依赖于部分主键属性',因此这是违背第二范式的,符合范式的设计应该为:【产品,仓库号

数据库三范式理解

末鹿安然 提交于 2019-12-19 01:38:59
在谈数据库范式之前,我们要明白一些关于数据库的基本概念,具体有一下几个: 元组(Tuple):是关系数据库中的基本概念,关系是一张表,表中的每行即数据库中的一条记录,就是一个元组,每列就是一个属性。 超键(Super Key):能够唯一决定一个元组的属性集合。可以是一个属性也可以是多个属性,都叫做超键。 候选键(Candidate Key):不含有多余属性的超键,称为候选键。 主键(Primary Key):标识元组的一个候选键。 PS:1 无论是超键、候选键、主键,他们都是唯一确定一个元组 2 超键包含候选键、候选键包含主键 数据库范式出现的背景 数据冗余:指数据之间的重复,也可以说是同一数据存储在不同数据文件中的现象; 函数依赖:如果一个属性决定于另一个属性,那么可以说另一个属性依赖于这个属性,比如《机房收费系统》中学生表,学生号可以决定学生姓名,即知道了一个学生的学生号,就可以知道他的姓名。 函数依赖又可以分为平凡依赖和非平凡依赖。 按性质分可分为部分依赖和完全依赖。 完全依赖:设X,Y是关系R的两个属性集合,X’是X的真子集,存在X→Y,但对每一个X’都有X’!→Y,则称Y完全函数依赖于X。 部分依赖:设X,Y是关系R的两个属性集合,存在X→Y,若X’是X的真子集,存在X’→Y,则称Y部分函数依赖于X。 传递函数依赖:设X,Y,Z是关系R中互不相同的属性集合,存在X→Y(Y