数据库范式

MySQL之三大范式

末鹿安然 提交于 2019-12-18 07:21:18
必须保证数据库设计的合理性 数据库设计关系整个系统的架构,关系到后续的开发效率和运行效率 数据库的设计主要包含了设计表结构和表之间的联系 如何是合理数据库 结构合理 冗余较小 尽量避免插入删除修改异常 如何才能保证数据库设计水平 遵循一定的规则 在关系型数据库中这种规则就称为范式 什么是范式(NF= Normal Form) 范式是符合某一种设计要求的总结。 要想设计一个结构合理的关系型数据库,必须满足一定的范式。 第一范式 要求 最基本的范式 数据库表每一列都是不可分割的基本数据项,同一列中不能有多个值 简单说就是要确保每列保持原子性 第一范式的合理遵循需要根据系统的实际需求来定 示例 用户表(用户名,家庭地址) 用户表(用户名,省,城市,详细地址) 第二范式 要求 第二范式需要确保数据库表中的每一列都和主键相关,而不能只与主键的某一部分相关(主要针对联合主键而言)。 即在一个数据库表中只能保存一种数据,不可以把多种数据保存在同一张数据库表中。 示例 学号和课程编号作为联合主键 课程名称只依赖于课程编号,而和学号没有关系 解决 提取出学生表 提取成课程表 提取选课表,存放选课记录 第三范式 要求 确保数据表中的每一列数据都和主键直接相关,而不能间接相关 属性不依赖于其他非主属性。 范式的优缺点 优点 结构合理 冗余较小 尽量避免插入删除修改异常 缺点 性能降低

数据库设计范式

我与影子孤独终老i 提交于 2019-12-18 04:07:34
什么是范式:简言之就是,数据库设计对数据的存储性能,还有开发人员对数据的操作都有莫大的关系。所以建立科学的,规范的的数据库是需要满足一些 规范的来优化数据数据存储方式。在关系型数据库中这些规范就可以称为范式。 什么是三大范式: 第一范式: 数据库表的每一列都是不可分割的原子数据项 时,称R是满足第一范式的,简记为1NF。 第二范式: 要求实体的属性完全依赖于主关键字。简而言之,第二范式就是在第一范式的基础上属性完全依赖于主键。 第三范式: 在1NF基础上,任何非主属性不依赖于其它非主属性(在2NF基础上消除传递依赖)。 注: 关系实质上是一张二维表,其中每一行是一个元组,每一列是一个属性。 理解三大范式 第一范式 1、每一列属性都是不可再分的属性值,确保每一列的原子性。 2、两列的属性相近或相似或一样,尽量合并属性一样的列,确保不产生冗余数据。 如果需求知道那个省那个市并按其分类,那么显然第一个表格是不容易满足需求的,也不符合第一范式。 显然第一个表结构不但不能满足足够多物品的要求,还会在物品少时产生冗余。也是不符合第一范式的。 第二范式 每一行的数据只能与其中一列相关,即一行数据只做一件事。只要数据列中出现数据重复,就要把表拆分开来。 一个人同时订几个房间,就会出来一个订单号多条数据,这样子联系人都是重复的,就会造成数据冗余。我们应该把他拆开来。 这样便实现啦一条数据做一件事

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

别来无恙 提交于 2019-12-16 22:59:29
I、关系数据库设计范式介绍 1.1 第一范式(1NF)无重复的列 所谓第一范式(1NF)是指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。 如果出现重复的属性,就可能需要定义一个新的实体,新的实体由重复的属性构成,新实体与原实体之间为一对多关系。在第一范式(1NF)中表的每一行只包含 一个实例的信息。简而言之,第一范式就是无重复的列。 说明:在任何一个关系数据库中,第一范式(1NF)是对关系模式的基本要求,不满足第一范式(1NF)的数据库就不是关系数据库。 1.2 第二范式(2NF)属性完全依赖于主键[消除部分子函数依赖] 第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF)。第二范式(2NF)要求数据库 表中的每个实例或行必须可以被惟一地区分。为实现区分通常需要为表加上一个列,以存储各个实例的惟一标识。例如员工信息表中加上了员工编号 (emp_id)列,因为每个员工的员工编号是惟一的,因此每个员工可以被惟一区分。这个惟一属性列被称为主关键字或主键、主码。 第二范式(2NF)要求实体的属性完全依赖于主关键字。所谓完全依赖是指不能存在仅依赖主关键字一部分的属性,如果存在,那么这个属性和主关键字的 这一部分应该分离出来形成一个新的实体

三范式

早过忘川 提交于 2019-12-16 20:17:16
关系数据库设计范式介绍 .1 第一范式(1NF)无重复的列 所谓第一范式(1NF)是指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。如果出现重复的属性,就可能需要定义一个新的实体,新的实体由重复的属性构成,新实体与原实体之间为一对多关系。在第一范式(1NF)中表的每一行只包含一个实例的信息。简而言之,第一范式就是无重复的列。 说明:在任何一个关系数据库中,第一范式(1NF)是对关系模式的基本要求,不满足第一范式(1NF)的数据库就不是关系数据库。 1.2 第二范式(2NF)属性完全依赖于主键[消除部分子函数依赖] 第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF)。第二范式(2NF)要求数据库表中的每个实例或行必须可以被惟一地区分。为实现区分通常需要为表加上一个列,以存储各个实例的惟一标识。例如员工信息表中加上了员工编号(emp_id)列,因为每个员工的员工编号是惟一的,因此每个员工可以被惟一区分。这个惟一属性列被称为主关键字或主键、主码。 第二范式(2NF)要求实体的属性完全依赖于主关键字。所谓完全依赖是指不能存在仅依赖主关键字一部分的属性,如果存在,那么这个属性和主关键字的这一部分应该分离出来形成一个新的实体,新实体与原实体之间是一对多的关系

数据库范式

不想你离开。 提交于 2019-12-16 17:44:12
后面的范式一定要满足前面的范式!!! 第一范式:(1NF) 是指在关系模型中,对于添加的一个规范要求,所有的域都应该是 原子性 的,即数据库表的每一列都是不可分割的原子数据项,而不能是集合,数组,记录等非原子数据项。即实体中的某个属性有多个值时,必须拆分为不同的属性。在符合第一范式(1NF)表中的每个域值只能是实体的一个属性或一个属性的一部分。简而言之,第一范式就是无重复的域(列不能在分)。 错误一:( 关系型数据库(列固定 行多个)MySQL oracle sqlserver 非关系型数据库NoSQL 是关系型数据库的补充(基于内存)缓存服务 redis ) id name age sex tel tel1 tel2 tel3 tel4 tel5 错误二: id name age sex tel 1 张三 18 男 2 李四 18 男 110 3 王五 18 男 120,130,140 正确 User telephone id name age sex id uid tel 1 张三 18 男 1 2 120 2 李四 19 男 2 3 130 3 王五 19 男 3 3 140 第二范式:(2NF) 第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF)。第二范式(2NF

4-MySQL DBA笔记-开发进阶

末鹿安然 提交于 2019-12-13 18:10:31
第4章 开发进阶 本章将介绍一些重中之重的数据库开发知识。 在数据库表设计中,范式设计是非常重要的基础理论,因此本章把它放在最前面进行讲解,而这其中又会涉及另一个重要的概念——反范式设计。 接下来会讲述MySQL的权限机制及如何固化安全。 然后介绍慢查询日志及性能管理的部分理念,并讲述数据库的逻辑设计、物理设计、导入导出数据、事务、锁等知识。 最后会提及 MySQL的一些非核心特性,并对于这些特性的使用给出一些建议。 4.1 范式和反范式 4.1.1 范式 什么是范式? 范式是数据库规范化的一个手段,是数据库设计中的一系列原理和技术,用于减少数据库中的数据冗余,并增进数据的一致性。 数据规范化通常是将大表分成较小的表,并且定义它们之间的关系。这样做的目的是为了避免冗余存放数据,并确保数据的一致性。 添加、删除和修改数据等操作可能需要修改多个表,但只需要修改一个地方即可保证所有表中相关数据的一致性(由于数据没有冗余存放,修改某部分数据一般只需要修改一个表即可)。 由于数据分布在多个表之间,因此检索信息可能需要根据表之间的关系联合查询多个表。 数据规范化的实质是简单写、复杂读。 写入操作比较简单,对于不同的信息,分别修改不同的表即可;而读取数据则相对复杂,检索数据的时候,可能需要编写复杂的SQL来联合查询多个表。 常用的范式有第一、第二、第三范式,通常来说

数据库三范式

℡╲_俬逩灬. 提交于 2019-12-09 12:24:01
什么是三范式 设计关系型数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式,各种范式呈递次规范,越高的范式数据库冗余越小。 目前关系型数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)。一般来说,数据库只需要满足第三范式就行了。 第一范式:保证每列的原子性 第一范式是最基本的范式。如果 数据库表中的所有字段值都是不可分解的原子值 ,就说明该数据库满足了第一范式。 第一范式需要根据系统的 实际需求 来定,比如有一张用户信息表: 一般来说"住址"设计成一个字段就行,但是如果经常访问"住址"中城市的部分,那 么就非要将"住址"这个属性重新拆分为"省份"、"城市"、"地址"等多个部分进行存储,这样在对"住址"中某一部分进行操作的时候将非常方便。这么设计 才算满足了数据库的第一范式,修改之后的表结构如图: 第二范式:保证一张表只描述一件事情 这是通俗的说法,用第二范式的定义描述第二范式,说的是在满足第一范式的基础上,数据库表中不存在非关键字段对任一候选关键字段的部分函数依赖,也即所有非关键字段都完全依赖于任一组候选关键字。 看不懂是吗,没关系,我也看不懂,下面举一个例子,有一张表如下图: 上表满足第一范式,即每个字段不可再分

mysql的约束、索引、范式

点点圈 提交于 2019-12-06 08:38:08
约束 表或列的primary key,unique,not null等修饰符常常被称作约束(constraint) 主要作用:是数据库用来提高数据质量和保证数据完整性的一套机制,是表定义(DDL语句)的一部分 约束主要包括: 非空约束 (not null) 唯一性约束 (unique) 主键约束 (primary key) 外键约束 (foreign key) 约束的定义方式 创建表时定义 列级别定义 表级别定义 修改表时进行追加定义 约束的查看 使用desc查看列属性查看约束 使用show create 命令查看 使用show index命令查看(无法查看not null 约束) 非空约束(not null) 用于确保其所在列的值不能为空值null,允许有多个列设置非空约束 只有列级定义和追加定义 列级定义 追加定义 非空约束的删除(将其改回为null) 或 惟一约束(unique) 列字段中不允许有重复值,但是可以有空值,允许有多个列设置惟一约束 也被称为惟一索引(其他数据库管理系统略有不同) 列级定义 表级定义 追加定义 删除惟一约束 主键约束(primary key) 主键列中不允许有重复值,也不可以有空值 一个表中只能有一个主键约束,但一个主键约束可以包含多个列 定义主键时会同时为主键创建唯一性索引 列级定义 表级定义 追加定义 删除主键约束 外键约束(foreign

数据库范式

笑着哭i 提交于 2019-12-06 08:21:37
数据库有六种范式,一级比一级更加严格,一般来说数据库满足第二/三范式就够了。各大教科书上对范式的定义都比较抽象,建议结合实例理解各大范式的含义,再回顾定义透彻理解。 第一范式:在关系模型中,对于添加的一个规范要求,所有的域都应该是原子性的,即数据库表的每一列都是不可分割的原子数据项,而不能是集合,数组,记录等非原子数据项。 简单理解就是列不可分割,比如产品表中,产品数量和产品价格要各为一列,笼统定义一列产品包含两个属性是不恰当的。 第二范式:在1NF的基础上,非码属性必须完全依赖于候选码(在1NF基础上消除非主属性对主码的部分函数依赖)。 候选码即可以唯一标识元组/记录的属性组。 例如员工表中员工号可以区分不同的员工/记录,员工号可以作为候选键, 员工号确定了,该员工姓名、年龄、性别等其他非码属性也就确定了 。任何一个候选键都可以被选作主键。在找不到候选键时,可额外增加属性以实现区分。 第三范式:在2NF基础上,任何非主属性不依赖于其它非主属性(在2NF基础上消除传递依赖)。 例如有一个学生表包含学生学号、姓名、年龄、学生属于的系编号,系的名称、地址等信息。学生表以学生学号为主键,那么系名称和系地址依赖于系编号(deptNo→location),系编号依赖于学号(stuNo→deptNo),对于这张表来说,系名称和系地址传递依赖于主属性学生学号,直接依赖于非主属性系编号

SQL中的复杂语句

别等时光非礼了梦想. 提交于 2019-12-06 08:08:55
目录 1. DQL:查询语句 1. 排序查询 2. 聚合函数 3. 分组查询 4. 分页查询 2. 约束 3. 多表之间的关系 4. 范式 5. 数据库的备份和还原 DQL:查询语句 1. 排序查询 语法:order by 子句 order by 排序字段1 排序方式1 , 排序字段2 排序方式2... 排序方式: ASC:升序,默认的。 DESC:降序。 注意:如果有多个排序条件,则当前边的条件值一样时,才会判断第二条件。 2. 聚合函数:将一列数据作为一个整体,进行纵向的计算。 1. count:计算个数 ####1. 一般选择非空的列:主键 ####2. count(*) 2. max:计算最大值 3. min:计算最小值 4. sum:计算和 5. avg:计算平均值 注意:聚合函数的计算,排除null值。 解决方案: 选择不包含非空的列进行计算 IFNULL函数 3. 分组查询: 语法:group by 分组字段; 注意: 分组之后查询的字段:分组字段、聚合函数 where 和 having 的区别? where 在分组之前进行限定,如果不满足条件,则不参与分组。having在分组之后进行限定,如果不满足结果,则不会被查询出来 where 后不可以跟聚合函数,having可以进行聚合函数的判断。 -- 按照性别分组。分别查询男、女同学的平均分 SELECT sex ,