自由有许多困难, 民主亦非完美。然而, 我们从未建造一堵墙, 把我们的人民关在里面, 不准他们离开@《在柏林墙下的演说》肯尼迪 (美国前总统) http://program-think.blogspot.com/2009/07/break-through-berlin-wall.html

范式&事务&索引

MySQL 2017-09-29 浏览量: 1660 字数统计: 1595 最后更新: 2017-11-16 15:05

文章目录[显示]

今天有个好朋友要参加面试 问了我几个问题,简单的描述一下数据库的三范式,本来我是想直接说,第一范式是啥,第二范式是啥,第三范式是啥的,后来我转眼一想,虽然平时 比较随意,但这么糊弄朋友好像感觉真的有些不负责任,于是我开始码起了这篇文章,也没什么深厚的底子,就只是懂一点点,如果有什么不对的地方还请大家多多指教 哈哈哈

范式

两个角度去理解范式

一个是从 直接使用上来看

要想 知道什么是范式,首先要知道范式是做什么的,其次要知道怎么去定义范式。

    • 那么我们就来先说范式是做什么的

你可能会想了,这能是做什么的啊,不就是一个规范么,还能是做啥的,肯定是约束啊。

所以你可能会这么说:“规范数据库结构吧 ? ”,那么问题就来了,数据库结构是啥呢?关系型数据库的基础元素有什么?当然了你可能会像俺开始一样,果断的说 基础元素 当然是 数据了,再就是列和属性咯 。其实,如果从另一个角度上来看的话,关系型数据库的基础元素应该是表,表里面包含关系和结构,表和表之间再关联。然后总结一下就是 :范式就是用来 规范表的数据结构 和 表之间的关系

    • 怎么去定义范式

其实 你一百度或者 Google 搜到的基本上都是怎么去定义范式 ,所以具体的定义方法,也就不去举例子了,就大概说一下就好

  • 第一范式

所谓第一范式就是让表里面的每一列都不可以再分

  • 第二范式

所谓第二范式就是 满足第一范式的基础上 表里面的属性完全依赖于主键

  • 第三范式

所谓第三范式就是 满足第二范式的基础上,表里面的属性不依赖于其他的非主属性

一个是 从根本上去理解

我们来换一个角度来想 什么是范式:

因为关系型数据库的关系复杂度高 ,为了管理或者梳理关系型数据库的结构, 以便 来更 好的使用, 需要规范表的数据结构 和 表之间的关系 ,我们 把这个规范的东西就叫做 范式 (规范模板的数据关系格式定义)。然后 为了让范式更加平滑的使用 ,我们规定通用的三个级别 ,每个级别添加不同的约束 ,从而让数据库从乱到简的过程平滑有梯度, 更易理解和使用 ,而且对于 不同的业务场景我们 可以使用不同的级别来规范。

事务

首先 我们先说 数据库对数据有几种处理方式?

你可能会下意识的说出 四种! 增删改查!

其实,数据库里面的数据基本上都是放在磁盘里面的,于是对磁盘里面的数据进行操作无外乎就是在对文件的操作,然后 文件是存的数据库的相关信息(数据 和 结构等等),而对文件的操作有两种 r / w

OK, 那 r(读)数据还好 w (写)数据会出现什么情况?

可能会造成数据的丢失等等,也就是说我们需要保证数据是对的,OK,比如现在由于 业务需要,要 同时添加 6 条数据 然后 添加这 6 条中 有2条没加上去 怎么办?

肯定是把已经插入的删除,然后重新同时添加,

然后我们再来想,你插入这6条数据的时候数据的状态是要么 就是 6条数据插入了,要么 就是没有插入。

然后我们再回过头来看最初的问题:

事务是做什么的?

保证数据状态的一致性

锁和事务

然后我们再来说说 锁和事务的关系,什么时候能用到锁

如果只有一个线程 I/O 在写 肯定是不需要锁的,而 锁是为了保证并发数据的一致性,而 事务是为了保证单个操作的 ACID ,简单来说也就是并发才有锁的概念,而单独的一个 操作 靠的是事务。

索引

索引

数据在磁盘上是以 block (块)的形式存储的。为确保对磁盘操作的原子性,访问数据的时候会一并访问所有数据块。磁盘上的这些数据块与链表类似,即它们都包含一个数据段和一个指针,指针指向下一个节点(数据块)的内存地址,而且它们都不需要连续存储.

因为很多记录只能做到按一个字段排序,所以要查询某个未经排序的字段,就需要使用线性查找,也就是要搜索整个表空间,而对于经过排序的字段,就可以用二分查找,这样性能就会很大的提高。

在数据库中,索引使用的数据结构 基本上是 B-Tree 或者 B+Tree 。就比如说现在最流行的 MySQL 使用的 就 是 B+Tree ,而 Oracle 使用的就 是B-Tree。

其实在数据库中,索引的意义和我们平时生活中,索引的意义基本上是相同的,没有多大的区别,无非就是为了提高数据的访问速度,正常情况下如果没有索引,就是全表扫描,而索引则可以避免全表扫描,但并不是使用索引就可以使数据库性能得以提升,而是需要适当的使用索引,否则也会导致数据库系统更新数据的性能下降,因为大部分数据更新的时候都是需要同时更新索引的。

总结来看

其实 索引 不过就是 对一个数据的排序,然后就是排序算法,数据呢,无外乎就是从硬盘 读到内存里

索引基本分两类:一类是聚集索引,一类是非聚集索引

小蜗牛 说:
Freedom is the source from which all meaning and all values spring .


文章版权归 原文作者所有丨本站默认采用CC-BY-NC-SA 4.0协议进行授权| 转载必须包含本声明,并以超链接形式注明原文作者和本文原始地址: https://www.tougetu.com/2017/09/databases-1.html

还不快抢沙发

添加新评论

代码 Pastebin Gist 加粗 删除线 斜体 链接 签到