范式

海量数据处理的SQL性能优化

≡放荡痞女 提交于 2019-12-08 19:07:28
1 设计阶段的优化 1.1 表设计 1.1.1 范式化 数据库设计三范式定义: 1. 第一范式:每个字段只包含最小的信息属性。 例如常见的学号:入学年份+班级+编号,是不符合第一范式的,需要将其拆解为:入学年份、班级、编号。 2. 第二范式:(在满足第一范式基础上) 模型含有主键,非主键字段依赖主键。 3. 第三范式:(在满足第二范式基础上) 模型非主键字段不能相互依赖 。 例如订单表,一般来说订单表的主键是订单号。在此表中,字段下单时间、客户ID是符合第二范式的,而客户姓名这个字段就不满足第二范式,应当放入客户表内,组成客户ID客户姓名。 范式化的设计能有效降低数据冗余,更新方便快速,降低了数据不一致的风险。故常见于联机交易型的数据库。 1.1.2 反范式化 有意不符合范式化的设计,常见于反第二第三范式。 符合三范式的设计在降低冗余的同时也带来了问题。如果需要对数据进行加工处理(例如具有订单表、客户表,需要统计某个年龄的客户的订单总金额)的时候,需要不断进行关联操作。当订单数量极为庞大的时候,这个关联操作所需要消耗的资源将会相当巨大,导致查询性能低下。因此在数据仓库的海量数据的处理中,常使用反范式化的方式进行设计来提高性能,用空间换取时间。例如在订单表内添加上下订单的客户的生日,则只需直接执行筛选即可。 反范式化的设计并没有定势,需要视具体的业务而定

数据库范式

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

MySQL数据库(一)_基础概念

↘锁芯ラ 提交于 2019-12-06 06:43:45
本章内容 数据库管理系统 关系型数据库 简易数据规划流程 数据库的正规化分析 MySQL基本概念 数据模型 MariaDB初识 其实MySQL和MariaDB是同一个人开发的,所以在功能和用法和,几乎一致。自从MySQL被ORICAL收购后,开源的MySQL就成为了商业化的产品,以后的趋势是去IOE,这个概念是由阿里巴巴 2008 年提出,所谓的“IOE”,指的是以 IBM 、Oracle、EMC 为代表的小型机、 集中式数据库和高端存储所组成的 IT 技术架构。 所以下面所讲的MySQL其实就是MariaDB,实际使用的软件是MariaDB。 数据库的发展史 萌芽阶段:文件系统 使用磁盘文件来存储数据 初级阶段:第一代数据库 出现了网状模型、层次模型的数据库 中级阶段:第二代数据库 关系型数据库和结构化查询语言 高级阶段:新一代数据库 “关系-对象”型数据库 数据库管理系统 数据库是数据的汇集,它以一定的组织形式存于存储介质上。 DBMS 是管理数据库的系统软件,它实现数据库系统的各种功能。是数据库系统的核心。 DBA 负责数据库的规划、设计、协调、维护和管理等工作 数据库管理系统的优点 相互关联的数据的集合 较少的数据冗余 程序与数据相互独立 保证数据的安全、可靠 最中大限度地保证数据的正确性 数据可以并发使用并能同时保证一致性 文件管理系统的缺点 编写应用程序不方便

数据库设计

眉间皱痕 提交于 2019-12-06 00:26:28
目录 数据库设计 三范式 第一范式(1NF): 第二范式(2NF): 第三范式(3NF): E-R模型 数据库设计 关系型数据库建议在E-R模型的基础上,我们需要根据产品经理的设计策划,抽取出来模型与关系,制定出表结构,这是项目开始的第一步。 在开发中有很多设计数据库的软件,常用的如power designer,db designer等,这些软件可以直观的看到实体及实体间的关系。 设计数据库,可能是由专门的数据库设计人员完成,也可能是由开发组成员完成,一般是项目经理领组员完成。 三范式 经过研究和对使用中问题的总结,对于设计数据库提出了一些规范,这些规范被称为范式(Normal Form) 目前有迹可循的共有8种范式,一般需要遵循3范式即可: 第一范式(1NF): 第一范式是最基本的范式,强调的是列的原子性,即列不能再分成其他几列 上图不符合第一范式,买家地址可以拆分 这样修改就遵循了第一范式。修改后的订单表 在用户使用城市进行分类的时候会非常方便,提高了数据库性能 第二范式(2NF): 首先是基于第一范式,另外包含两部分内容,一是表必须有一个主键;二是没有包含在主键中的列必须完全依赖于主键,而不能只依赖主键的一部分。 也就是说在一个数据表中,只能保存一种数据,不能把多种数据保存在同一张表中。 上面的订单表可以继续拆分 第三范式(3NF): 首先是基于第二范式

面向对象总结

二次信任 提交于 2019-12-06 00:25:44
1、什么是面向对象? 面向对象编程是一种编程范式( 英文为:Object Oriented Programming ,缩写为:OOP ),它将代码分为具有属性和方法的对象。 2、什么是编程范式? 所谓的编程范式(英文为:programming paradigm),指的是计算机编程的基本风格或典范模式。 在编程语言中,根据编程范式来分类可以分为2个大类:分别为 命令式编程 和 声明式编程 1、命令式编程 所谓命令式编程,就是以命令为主,给机器提供一条又一条的命令序列让其原封不动的执行。程序执行的效率取决于执行命令的数量,(概括起来就是:命令式编程就是命令“机器”如何去做事情(how),这样不管你想要的是什么(what),它都会按照你的命令实现),我们常见的命令式编程有 :C++ , C语言 ,Java , C# 在命令式编程语言里面,又可以分为2个大类: 面向过程 和 面向对象 a、面向过程:就是分析出解决问题所需要的步骤,然后把这些步骤一步一步实现 b、面向对象:面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描述某个事物在整个解决问题的步骤中的行为 2、声明式编程 声明式编程就是告诉“机器”你想要的是什么(what),让机器想出如何去做(how) 在声明式编程里面又分为2个大类:领域专用语言和函数式编程 3、面向对象的三大特征(封装 ,继承

什么是关系型数据库?

╄→尐↘猪︶ㄣ 提交于 2019-12-05 22:03:30
百度百科给的定义: 关系型数据库,是指采用了 关系模型 来组织数据的数据库,其以行和列的形式存储数据,以便于用户理解,关系型数据库这一系列的行和列被称为表,一组表组成了 数据库 。用户通过查询来检索数据库中的数据,而查询是一个用于限定数据库中某些区域的执行代码。关系模型可以简单理解为二维表格模型,而一个关系型数据库就是由二维表及其之间的关系组成的一个数据组织。 [1] 通俗易懂的定义: 关系型,当然就是关于这个表与表之间的关系,相互依赖关系,来减少冗余,比如:主外键关系 为了复合设计数据库所谓的三范式,而这样命名的。对于大数据量是很有必要的,一个字符串倒没有多大,但是 海量数据 的话,则很占用硬盘空间,不利于部署转移。 数据库三范式了解: 第一范式: http://baike.baidu.com/view/176725.htm 第二范式: http://baike.baidu.com/view/176736.htm 第三范式: http://baike.baidu.com/view/176738.htm 为了建立冗余较小、结构合理的数据库,设计数据库时必须遵循一定的规则。在关系型数据库中这种规则就称为范式。范式是符合某一种设计要求的总结。要想设计一个结构合理的关系型数据库,必须满足一定的范式。 来源: https://www.cnblogs.com/xibuhaohao/p

mysql常见面试题

落爺英雄遲暮 提交于 2019-12-05 16:45:31
[SELECT *] 和[SELECT 全部字段]的 2 种写法有何优缺点? 1. 前者要解析数据字典,后者不需要 2. 结果输出顺序,前者与建表列顺序相同,后者按指定字段顺序。 3. 表字段改名,前者不需要修改,后者需要改 4. 后者可以建立索引进行优化,前者无法优化 5. 后者的可读性比前者要高所以, 尽量使用后者来查询 若一张表中只有一个字段 VARCHAR(N)类型,utf8 编码,则 N 最大值为多少? 由于 utf8 的每个字符最多占用 3 个字节。而 MySQL 定义行的长度不能超过65535(text和blob不计算在内), 因此 N 的最大值计算方法为:(65535-1-2)/3。 减去 1 的原因是实际存储从第二个字节开始,减去 2 的原因是因为要在列表长度存储实际的字符长度(长度大于256用两个字节存储),除以 3 是因为 utf8 限制:每个字符最多占用 3 个字节。 MySQL 中 InnoDB 引擎的行锁是通过加在什么上完成(或称实现)的? InnoDB 行锁是通过给索引上的索引项加锁来实现的,这一点 MySQL 与Oracle 不同,后者是通过在数据块中对相应数据行加锁来实现的。 InnoDB 这种行锁实现特点意味着:只有通过索引条件检索数据,InnoDB 才使用行级锁,否则,InnoDB 将使用表锁 mysql 中 myisam 与 innodb

MySql学习笔记(基础)

ぃ、小莉子 提交于 2019-12-05 12:00:46
MySql学习笔记(基础) 学习笔记 数据库基础 SQL的基本操作 基本操作:CRUD(增删改查) 更新数据库 删除数据库 表操作 修改数据表 查看数据 更新数据 删除数据 中文数据问题 校对集问题 数据类型(列类型) 字段属性 范式: 蠕虫复制 查询数据 连接查询 学习笔记 数据库基础 1.什么是数据库? 数据库:database,存储数据的仓库 数据库:高效的存储和处理数据的介质(介质主要是两种:磁盘和内存) 2.数据库的分类? 数据库基于存储介质的不同:进行了分类,分为两大类:关系型数据库(SQL)和非关系型数据库(NoSQL:Not Noly SQL,不是关系型的数据库都叫做非关系型数据库) 3.不同的数据库阵营中的产品有哪些? 关系型数据库: 大型:Oracle,DB2 中型:SQL-SERVER,MySql等 小型:access等 非关系型数据库: memcached,mongodb,redis(同步到磁盘) 4.两种数据库阵营的区别? 关系型数据库:安全(保存磁盘基本不可能丢失)容易理解,比较浪费空间(二维表) 非关系型数据库:效率高,不安全(断电会丢失) 关系型数据库 1.什么是关系型数据库? 关系型数据库:是一种建立在关系模型(数学模型)上的数据库。 关系模型:一种所谓建立在关系上的模型,关系模型包含三个方面。 数据结构:数据存储的问题,二维表(有行和列)

L6-12 类的实例

自古美人都是妖i 提交于 2019-12-05 11:07:29
一、课程导入 在之前的学习中,我们学习了很多知识,列表可以收集变量、字符串等数据,函数可以把一些代码收集到反复使用的单元中,今天我们将学习Python中的类。 二、编程范式 编程是程序员用特定的语法+数据结构+算法组成的代码来告诉计算机如何执行任务的过程, 一个程序是程序员为了得到一个任务结果而编写的一组指令的集合, 正所谓条条大路通罗马,实现一个任务的方式有很多种不同的方式, 对这些不同的编程方式的特点进行归纳总结得出来的编程方式类别,即为编程范式。 常见的编程范式分为:面向过程和面向对象 那面向过程和面向对象分别是什么呢? 面向过程: 基本设计思路就是程序一开始是要着手解决一个大的问 题,然后把一个大问题分解成很多个小问题或子过程,这些 子过程再执行的过程再继续分解直到小问题足够简单到可以 在一个小步骤范围内解决。 缺点:一套流水线或者流程就是用来解决一个问题,如果修改代码就都得改变。 面向对象:上帝的思想 开发正规的程序跟那种写个运行一次就扔了的小脚本一个很大不同,你的代码总是需要不断的 更改,不是修改bug就是添加新功能等。面向对象 编程思想更像是一个真实的世界,生活中我们会 将事物分类,通过创建类和对象来描述这个世界。 优点:解决了程序的扩展性。对某一个对象单独修改,会立刻反映到整个体系中,如对游戏中一个人物参数的特征和技能修改都很容易。 缺点:可控性差

数据库的设计

好久不见. 提交于 2019-12-05 02:54:39
1.多表之间的关系      Ⅰ.一对一      如:人和身份证      分析:一个人只有一个身份证,一个身份证只能对应一个人     实现方式:一对一关系中可以在任意一方添加唯一的外键指向另一方1的主键,比如:下面的图中的id为3的字段就不能添加上,因为他的cid和id为1的字段的cid冲突   Ⅱ.一对多(多对一)      如:部门和员工      分析:一个部门对应多个员工,一个员工对应一个部门     实现方式:在多的一方建立外键,指向一的一方的主键   Ⅲ.多对多      如:学生和课程      分析:一个学生可以选择多门课程,一个课程可以被多个学生选择     实现方式:多对多关系需要借助第三张中间表,中间表至少包含两个字段,这两个字段作为第三张表的外键,分别指向两张表的主键 2.数据库范式    概念: 设计数据库时,需要遵循的一些规范,要遵循后面的范式要求,必须先遵循前面的所有范式要求      设计关系数据库时,遵循不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式,各种范式呈递次规范,越高的范式数据库冗余越小      目前关系型数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)、第五范式(5NF)    分类:       1.第一范式: