数据库范式

关系型数据库设计-三范式

狂风中的少年 提交于 2020-01-16 02:45:26
链接:https://www.zhihu.com/question/24696366/answer/29189700 来源:知乎 首先要明白”范式(NF)”是什么意思。按照教材中的定义,范式是“符合某一种级别的关系模式的集合,表示一个关系内部各属性之间的联系的合理化程度”。很晦涩吧?实际上你可以把它粗略地理解为 一张数据表的表结构所符合的某种设计标准的级别 。就像家里装修买建材,最环保的是E0级,其次是E1级,还有E2级等等。数据库范式也分为1NF,2NF,3NF,BCNF,4NF,5NF。一般在我们设计关系型数据库的时候,最多考虑到BCNF就够。符合高一级范式的设计,必定符合低一级范式,例如符合2NF的关系模式,必定符合1NF。 接下来就对每一级范式进行一下解释,首先是 第一范式(1NF)。 符合1NF的关系(你可以理解为数据表。“关系模式”和“关系”的区别,类似于面向对象程序设计中”类“与”对象“的区别。”关系“是”关系模式“的一个实例,你可以把”关系”理解为一张带数据的表,而“关系模式”是这张数据表的表结构。 1NF的定义为:符合1NF的关系中的每个属性都不可再分。表1 所示的情况,就不符合1NF的要求。 表1 实际上, 1NF是所有关系型数据库的最基本要求 ,你在关系型数据库管理系统(RDBMS),例如SQL Server,Oracle,MySQL中创建数据表的时候

数据库关系模式之范式详解

烈酒焚心 提交于 2020-01-13 02:56:25
概念理解 术语定义:范式是符合某一种级别的关系模式的集合 通俗理解:相当于一个衡量数据库表关系模式设计优劣的一个标准,同教师的职称有初级、中级、高级、特级等等一样,范式同样分为几个级别 关系模式的冗余和异常问题 数据冗余:同一数据在系统中重复出现,在数据库管理中, 数据冗余 一直是影响系统性能的大问题。 操作异常:由于数据冗余,对数据库的操作会引起各种异常(修改异常,插入异常,删除异常) 范式 由于关系模式的各种问题,所以就出现了一个衡量数据库关系模式的标准也就是范式 第一范式(1NF) 定义:数据库表中的字段都是单一属性的,不可再分的(段是最小的单元不可再分) 1NF是关系模式应具备的最起码的条件 第二范式(2NF) 定义:在满足第一范式的情况下,且每个非主属性完全依赖于候选键 理解这句话的时候,我们先理解一下其中的一些名词 码(候选键): 设 K 为某表中的一个属性或属性组,若除 K 之外的所有属性都完全函数依赖于 K(这个“完全”不要漏了),那么我们称 K 为 候选码(候选键) ,简称为 码 。在实际中我们通常可以理解为: 假如当 K 确定的情况下,该表除 K 之外的所有属性的值也就随之确定,那么 K 就是码 非主属性:包含在任何一个码中的属性成为主属性,其他的称为非主属性 第三范式(3NF) 定义:在满足第二范式的情况下,且每个非主属性都不传递对于码的函数依赖 实例 1

MySQL笔记-数据库的设计、备份和还原

≡放荡痞女 提交于 2020-01-12 04:03:47
## 数据库的设计 1. 多表之间的关系 1. 分类: 1. 一对一(了解): * 如:人和身份证 * 分析:一个人只有一个身份证,一个身份证只能对应一个人 2. 一对多(多对一): * 如:部门和员工 * 分析:一个部门有多个员工,一个员工只能对应一个部门 3. 多对多: * 如:学生和课程 * 分析:一个学生可以选择很多门课程,一个课程也可以被很多学生选择 2. 实现关系: 1. 一对多(多对一): * 如:部门和员工 * 实现方式:在多的一方建立外键,指向一的一方的主键。 2. 多对多: * 如:学生和课程 * 实现方式:多对多关系实现需要借助第三张中间表。中间表至少包含两个字段,这两个字段作为第三张表的外键,分别指向两张表的主键 3. 一对一(了解): * 如:人和身份证 * 实现方式:一对一关系实现,可以在任意一方添加唯一外键指向另一方的主键。 3. 案例 -- 创建旅游线路分类表 tab_category -- cid 旅游线路分类主键,自动增长 -- cname 旅游线路分类名称非空,唯一,字符串 100 CREATE TABLE tab_category ( cid INT PRIMARY KEY AUTO_INCREMENT, cname VARCHAR(100) NOT NULL UNIQUE ); -- 创建旅游线路表 tab_route /* rid

数据库三大范式

偶尔善良 提交于 2020-01-10 08:27:30
数据库设计三大范式 数据库设计范式 什么是范式:简言之就是,数据库设计对数据的存储性能,还有开发人员对数据的操作都有莫大的关系。所以建立科学的,规范的的数据库是需要满足一些 规范的来优化数据数据存储方式。在关系型数据库中这些规范就可以称为范式。 什么是三大范式: 第一范式:当关系模式R的所有属性都不能在分解为更基本的数据单位时,称R是满足第一范式的,简记为1NF。满足第一范式是关系模式规范化的最低要 求,否则,将有很多基本操作在这样的关系模式中实现不了。 第二范式:如果关系模式R满足第一范式,并且R得所有非主属性都完全依赖于R的每一个候选关键属性,称R满足第二范式,简记为2NF。 第三范式:设R是一个满足第一范式条件的关系模式,X是R的任意属性集,如果X非传递依赖于R的任意一个候选关键字,称R满足第三范式,简记为3NF. 注:关系实质上是一张二维表,其中每一行是一个元组,每一列是一个属性 理解三大范式 第一范式 1、每一列属性都是不可再分的属性值,确保每一列的原子性 2、两列的属性相近或相似或一样,尽量合并属性一样的列,确保不产生冗余数据。 如果需求知道那个省那个市并按其分类,那么显然第一个表格是不容易满足需求的,也不符合第一范式。 显然第一个表结构不但不能满足足够多物品的要求,还会在物品少时产生冗余。也是不符合第一范式的。 第二范式 每一行的数据只能与其中一列相关

MySQL数据库设计规范感悟

╄→гoц情女王★ 提交于 2020-01-10 08:07:48
前言 在设计关系型数据库时,我们从课上的学习得知,需要参照不同的范式及原则,设计表结构与表关系。在课上,我们关注的角度更多是,设计要符合范式,保证数据不冗余。但在实际的开发设计中,我们往往要从更多角度思考数据库的设计原则,根据不同的需求场景,进行不同角度的侧重。比如开发是否便捷,表结构是否易维护,查询效率是否达到要求等等。 设计原则 一般的企业级应用数据库中,对于数据的冗余是有一定容忍性的,但对于数据库增删改查的效率,往往会有很高的要求。这时候,我们之前遵循的一些原则,就要做出不同程度的改变。比如,之前依据少冗余原则,参考的设计三大范式,可能在数据库增删改查效率的面前,就要做一些妥协了。 在设计能容忍冗余、重视效率的数据库时,个人认为,主要需要考虑以下几方面: 中间表不可以随意使用 在充分遵循三大范式的前提下,我们的设计就会有很多的中间表(关系表)。但如果在两个表中,其中有一个表增删改频繁,那么从效率角度而言,这样的设计就是不合格的。这样的设计确实会减少很多数据冗余,但是也会大大增加每条数据增删改的开销。所以从一般的企业级应用场景来看,中间表不可以随意使用。 通过了解中间表的使用缺陷,我们也就知道了什么时候可以使用中间表。当左表和右表都没有非常频繁的改动需求,但有非常频繁的联表查询需求的时,我们就可以运用中间表,来提升查询效率,并减少数据冗余。 每个表增删改的范围尽量都在本表进行

数据库——关系数据库规范化习题

落花浮王杯 提交于 2020-01-09 14:20:06
对以下的关系模式, 分别写出: (1)码 ,主属性,非主属性? (2)函数依赖? (3)属于第几范式?为什么? (4)有什么问题? (5)如何分解?分解后能否达到几范式? 原问题是否解决? ps(函数依赖的方法: 1.先找出码,再写出码函数依赖:码-〉其他属性 2.再写出其他非码的函数依赖 ) 1 SCG(Sno, Sname, Sage, Cno, Grade) (1)码:(SNO,CNO) 主属性: SNO,CNO 非主属性:SNAME,SAGE,GRADE (2)函数依赖:(SNO,CNO)-〉SNAME,(SNO,CNO)-〉SAGE,(SNO,CNO)-〉GRADE SNO-〉SNAME,SNO-〉SAGE (3)属于第几范式,为什么? 存在非主属性sname部分函数依赖于码,是1范式 (4)有什么问题? 问题⒈ 数据冗余大 每一个学生的姓名年龄重复出现 浪费大量的存储空间 问题⒉ 修改困难 例:某学生要修改姓名或年龄,系统必须修改多次 问题3.插入异常 假设某学生(新生)还未选课,因课号是主属性,按实体完整性约束,该学生的信息无法插入 ----该插入的不能插入 问题4.删除异常 假定某个学生本来只选修了一门课。现在因身体不适,他连这门程也不选修了,要删除该选课。此操作将导致该学生信息也被删除 -----不该删的删了 (5)如何分解?分解后能否达到几范式? 原问题是否解决

SQL Server 数据库设计

拈花ヽ惹草 提交于 2020-01-08 19:19:45
一、数据库设计的必要性 在实际的软件项目中,如果系统中需要存储的数据量比较大,需要设计的表比较多,表与表之间的关系比较复杂,那我们就需要进行规范的数据库设置。如果不经过数据库的设计,我们构建的数据库不合理、不恰当,那么数据库的维护、运行效率会有很大的问题。这将直接影响到项目的运行性和可靠性。 二、什么是数据库设计 数据库设计实际上就是规划和结构化数据库中的数据对象以及这些数据对象之间的关系过程。 三、数据库设计的重要性 Ø 不经过设计的数据库或是设计糟糕的数据库很可能导致 1、 数据库运行效率地下 2、 更新、删除、添加数据出现问题 Ø 良好设计的数据库 1、 执行效率高 2、 使应用程序更便于开发 3、 扩展性好 4、 维护性好 四、数据模型 数据模型就像是数据间联系的一个轮廓图,整个模型就像一个框架。 如果按照记录间联系的表示方式,对数据模型进行分类,可以分为:层次模型、网状模型、关系模型。前两种又称为格式化数据模型。数据模型的好坏直接影响到数据库的性能,所以数据模型的选择是数据库设计的首要任务。 Ø 实体-关系(E-R)数据模型 E-R数据模型(Entity-Relationship data model),即实体-关系数据模型。E-R数据模型不同于传统的关系数据模型,它不是面向实现,而是面向现实物体的。 Ø 实体(Entity) 数据是用来描述现实中的物体的

SQL Server 数据库设计

…衆ロ難τιáo~ 提交于 2020-01-08 19:18:25
一、数据库设计的必要性 在实际的软件项目中,如果系统中需要存储的数据量比较大,需要设计的表比较多,表与表之间的关系比较复杂,那我们就需要进行规范的数据库设置。如果不经过数据库的设计,我们构建的数据库不合理、不恰当,那么数据库的维护、运行效率会有很大的问题。这将直接影响到项目的运行性和可靠性。 二、什么是数据库设计 数据库设计实际上就是规划和结构化数据库中的数据对象以及这些数据对象之间的关系过程。 三、数据库设计的重要性 Ø 不经过设计的数据库或是设计糟糕的数据库很可能导致 1、 数据库运行效率低下 2、 更新、删除、添加数据出现问题 Ø 良好设计的数据库 1、 执行效率高 2、 使应用程序更便于开发 3、 扩展性好 4、 维护性好 四、数据模型 数据模型就像是数据间联系的一个轮廓图,整个模型就像一个框架。 如果按照记录间联系的表示方式,对数据模型进行分类,可以分为:层次模型、网状模型、关系模型。前两种又称为格式化数据模型。数据模型的好坏直接影响到数据库的性能,所以数据模型的选择是数据库设计的首要任务。 Ø 实体-关系(E-R)数据模型 E-R数据模型(Entity-Relationship data model),即实体-关系数据模型。E-R数据模型不同于传统的关系数据模型,它不是面向实现,而是面向现实物体的。 Ø 实体(Entity) 数据是用来描述现实中的物体的

数据的三大范式以及什么是反三大范式

南笙酒味 提交于 2020-01-07 15:48:23
一、什么是数据库? 数据库是以一定方式储存在一起、能与多个用户共享、具有尽可能小的冗余度、与应用程序彼此独立的数据集合,可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据进行新增、查询、更新、删除等操作 二、什么是范式? 范式来自英文Normal form,简称NF。要想设计—个好的关系,必须使关系满足一定的约束条件,此约束已经形成了规范,分成几个等级,一级比一级要求得严格。 三、什么是数据库范式? 设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式,各种范式呈递次规范,越高的范式数据库冗余越小。   列举几个关系数据库:oracle、db2、sqlserver、sybase、mysql~ 目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)。 数据的三大范式以及什么是反三大范式 一:首先说一下什么是三大范式:   1.第一范式(1NF):确保每一列的原子性(做到每列不可拆分)   2.第二范式(2NF):在第一范式的基础上,非主字段必须依赖于主字段(一个表只做一件事)   3.第三范式(3NF):在第二范式的基础上,消除传递依赖   上面都是官话 ,对于设计表来说 第一范式是什么意思呢 看表1-1    

如何理解关系型数据库的常见设计范式?

你说的曾经没有我的故事 提交于 2020-01-07 03:20:47
作者:知乎用户 链接:https://www.zhihu.com/question/24696366/answer/29189700 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 ============ 2015-1-6 更新,补充了 BCNF 的解释 ============ 国内绝大多数院校用的王珊的《数据库系统概论》这本教材,某些方面并没有给出很详细很明确的解释,与实际应用联系不那么紧密,你有这样的疑问也是挺正常的。 我教《数据库原理》这门课有几年了,有很多学生提出了和你一样的问题,试着给你解释一下吧。 (基本来自于我上课的内容,某些地方为了不过于啰嗦,放弃了一定的严谨,主要是在“关系”和“表”上) 首先要明白”范式(NF)”是什么意思。按照教材中的定义,范式是“ 符合某一种级别的关系模式的集合,表示一个关系内部各属性之间的联系的合理化程度 ”。 很晦涩吧?实际上你可以把它粗略地理解为 一张数据表的表结构所符合的某种设计标准的级别 。就像家里装修买建材,最环保的是E0级,其次是E1级,还有E2级等等。 数据库范式也分为1NF,2NF,3NF,BCNF,4NF,5NF。 一般在我们设计关系型数据库的时候,最多考虑到BCNF就够 。符合高一级范式的设计,必定符合低一级范式,例如符合2NF的关系模式,必定符合1NF。