数据库系统0T1(0):基础概念

  数据库,简单来说可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据运行新增、截取、更新、删除等操作。

  数据库存储的基本对象是数据,数据可以是数字、文字、图片、音频、视频等等。

数据库的基本特征

  数据按一定的数据模型组织、描述和储存

  可为各种用户共享

  冗余度较小

  数据独立性较高,与应用程序互不依赖

  易扩展

类型

  关系数据库:MySQL、SQL Server、Oracle等

  非关系型数据库(NoSQL):BigTable(Google)Cassandra、MongoDB等

  键值(key-value)数据库:Apache Cassandra、Dynamo、LevelDB(Google)

数据抽象

  数据库为屏蔽底层复杂性,采用了层次抽象,可以大致区分为三个概括层次:物理层、逻辑层、视图层。

  物理层:最接近实际存储体,亦即有关数据的实际存储方式。

  逻辑层:介于两者之间的间接层,描述数据怎么存储及数据间关系。

  视图层:最接近用户,即有关用户观看数据的方式。一个逻辑层可以对应多个视图层。

 

  从上图可以看到,虽然逻辑相互独立,但是通过在物理层上只存储一份学生基本情况,使冗余度最小化。

数据模型

  数据库结构的基础是数据模型。数据模型提供了一种描述物理层、逻辑层以及视图层数据库设计的方式。通俗地讲数据模型就是现实世界的模拟。

  数据模型可被划分为四类:

  实体-联系模型(entity-relationship model)。现实世界由一组称作实体的基本对象以及这些对象间的联系构成。

  关系模型(relational model)。关系模型用表的集合来表示数据和数据间联系。每个表有多个列,每列有唯一的列名。关系模型是基于记录模型的一种。关系数据模型是使用最广泛的数据模型。

  基于对象数据模型(object-based data model)。面向对象数据模型可以看成是E-R模型增加了封装、方法(函数)和对象标识等概念后的扩展。

  半结构化数据模型(semistructured data model)。半结构化数据模型允许那些相同类型的数据项含有不同的属性集的数据说明。

数据库索引

  数据索引的观念由来已久,像是一本书前面几页都有目录,目录也算是索引的一种,只是它的分类较广,例如车牌、身份证字号、条码等,都是一个索引的号码,当我们看到号码时,可以从号码中看出其中的端倪,若是要找的人、车或物品,也只要提供相关的号码,即可迅速查到正确的人事物。

数据库管理系统(DBMS)

  位于用户与操作系统之间的一层数据管理软件。

  

用途:

  科学地组织和存储数据、高效地获取和维护数据

功能:

  提供数据定义语言(DDL)

  定义数据库中的数据对象

  数据组织、存储和管理(安全性、完整性、并发性控制、恢复)

数据库操作:事务

  事务(Transaction)是用于完成单一逻辑功能的一个数据库操作序列,这些操作要么全做,要么全不做,是一个不可分区的工作单位。

  为保证事务(transaction)是正确可靠的,事务的ACID特性:

  1)原子性(Atomicity):一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态(故障恢复)。

  2)一致性(Consistency):在事务开始之前和事务结束以后,数据库的完整性没有被破坏。这表示写入的资料必须完全符合所有的预设规则,这包含资料的精确度、串联性以及后续数据库可以自发性地完成预定的工作。

  3)隔离性(Isolation):当两个或者多个事务并发访问(此处访问指查询和修改的操作)数据库的同一数据时,一个事务不能让其他事务看到该事务的中间状态。

  4)持久性(Durability):在事务完成以后,该事务对数据库所作的更改便持久地保存在数据库之中,并且是完全的。

  看下面的例子:

  韩梅梅给李雷转账,必须保障韩梅梅账户减去100时,在李雷账户增加100(原子性),如果服务器断电,从韩梅梅账户减去100后,, 李雷账户却没有增加100,要将整个事务进行回滚。

  转账完成后,两人的账户和必须保持不变(一致性),不能破坏关系数据的完整性以及业务逻辑上的一致性。

  其他事务,比如一个查询事务,不能查询到转账中间状态,比如韩梅梅账户减去100, 李雷账户却没有增加100的状态。(隔离性)

  当转账成功后,即使机器故障,韩梅梅和李雷账户也保持转账后的金额(持久性)

  让我们来看一下隔离性中的几个概念:

  1)脏读(Dirty Reads):脏数据所指的就是未提交的数据。也就是说,一个事务正在对一条记录做修改,事务来读取其他事物更改却未提交的数据。

  2)不可重复读(Non-Repeatable Reads):一个事务先后读取同一条记录,但两次读取的数据不同,我们称之为不可重复读。也就是说,这个事务在两次读取之间该数据被其它事务所修改。

  3)幻读(Phantom Reads):一个事务按相同的查询条件重新读取以前检索过的数据,却发现其他事务插入了满足其查询条件的新数据,这种现象就称为幻读。

  隔离分为不同级别,包括:

  读未提交(Read uncommitted):读取其他事务已经修改但还未提交的数据(脏数据),这是最低的隔离级别。

  读提交(read committed):只能读取到已经提交的数据。即解决了脏读问题。

  可重复读(repeatable read):在一个事务中,对同一个项,前后读取结果一样

  串行化(Serializable):各事务串行执行(锁机制)

  隔离级别对比表:

  

参考:

https://zh.wikipedia.org/wiki/%E6%95%B0%E6%8D%AE%E5%BA%93

https://zh.wikipedia.org/wiki/ACID

http://www.cppblog.com/wolf/articles/121626.html

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 07-29

数据库系统0T1(0):基础概念的相关文章

分布式学习——基础概念篇

概述 最近这段时间一直在看分布式有关的东西,但是关于分布式自己还是不能很好的理解,所以本文对分布式基础概念进行下学习. 分布式处理 首先先了解一下分布式处理,分布式处理和集中式处理正好是相反的的体系架构,集中传输集中到式处理顾名思义就是将所有的信息都一个统一的信息中心进行处理:分布式处理就是将不同地点的,或具有不同功能的,或拥有不同数据的多台计算机利用通信网络连接起来,让各个计算机各自承担同一个工作任务的不同部分,在控制中心的管理下,同时运行,共同完成同一个工作任务. 提到分布式处理就不能不提到

js基础--javascript基础概念之数组(二)

js基础--javascript基础概念之数组 数组栈方法 数组可以像栈一样.栈是一种先进后出的数据结构,最先添加的数据最后一个出来.栈方法添加数据也称为 推入  移除数据称为 弹出. js为数值栈方法提供了 push()   和  pop() ;  两个方法. push() push() 方法接受参数就是你要添加进入到数组的值.push()  方法会将他们逐一添加到数组的末尾  数组的length属性会跟着更新数据. *push(多个数组元素值) 返回的修改后的数组长度 var array =

js基础--javascript基础概念之数组

js基础--javascript基础概念之数组 在ECMAScript 中 ,数组是很常用的数据类型,js中的数组和其他很多语言的数组有明显的区别.js的数组可以保持任何类型的数值,一个数组中可以保存着多个不同类型的数值.js数组大小(长度)是可以调整的.可以随着数据的添加自动增长数组长度. 创建数组: 一.数组字面量 数组字面量由一对包含数组项的方括号[]表示. var array = [ 'kin', 'cheong', 'change', 'hello', 'haha', 'hi' ];

Linux基础概念-----Linux I/O重定向 ,管道

标准输入:键盘 标准输出:显示器 错误输出:显示器 FD:文件描述符:让程序可以文件交互,并且便于内核识别文件,打开的每一个文件都有一个描述符 程序在和文件交互式,通过文件描述符来进行交互,而非文件名,文件名是方便用户分别文件. Linux一切皆文件,所以标准输入,标准输出都有各自的文件描述符 标准输入描述符:0 标准输出描述符:1 标准错误输出描述符:2 将其默认数据流改为其他设备:IO重定向 输出重定向 > 覆盖重定向 >> 追加重定向 /dev/null  黑洞 只针对当前Shel

js基础--javascript基础概念之语句(二)

js基础--javascript基础概念之语句(二)label,break,continue.. break .  continue 语句. break  continue 语句用于在循环中精确控制代码的执行,其中break语句会立即退出循环,执行循环后面的语句. continue 则退出循环后返回到再次进入循环中. 如: var num = 0; for(var i = 0; i<=100; i++){ if(i >= 10){ break; } num = i; } alert(num);

iOS开发OC基础:OC基础概念总结,OC面向对象的思想

一.什么是OOP: OOP(Object Oriented Programming):面向对象编程 二.面向对象和面向过程的区别: 面向过程编程:分析解决问题的步骤,实现函数,依次使用面向对象编程:分解问题组成的对象,协调对象间的联系和通信,解决问题. 面向过程是以事件为中心,关心的是完成这个事件的详细步骤:面向对象是以事物为中心,关心的是事物应该具备的功能,而完成一个事件只是事物所有功能里面的一个小功能(以过程为中心,以对象为中心) 三.类和对象 对象定义了解决问题的步骤中的行为,不刻意完成一

iptables基础概念

1.基础概念. 防火墙,其实说白了讲,用于实现Linux下访问控制的功能的,它分为硬件的或者软件的防火墙两种.无论是在哪个网络中,防火墙工作的地方一定是在网络的边缘.而我们的任务就是需要去定义到底防火墙如何工作,这就是防火墙的策略,规则,以达到让它对出入网络的IP.数据进行检测. 目前市面上比较常见的有3.4层的防火墙,叫网络层的防火墙,还有7层的防火墙,其实是代理层的网关. 对于TCP/IP的七层模型来讲,我们知道第三层是网络层,三层的防火墙会在这层对源地址和目标地址进行检测.但是对于七层的防

linux基础概念和个人笔记总结(6)

防伪码:曾经梦想仗剑走天涯,回过头,却发现还是放不下家的牵挂 后续理论的验证图文详解,我会更新,希望大家可以参考 第十一章 FTP文件传输服务 1.FTP连接 控制连接:tcp21端口,用于发送ftp命令信息 数据连接:tcp20端口,用于上传.下载数据 数据连接的建立类型: a.主动模式:服务器从20端口主动向客户端发起连接 b.被动模式:服务端在指定范围内某个端口被动等待客户端连接 2.FTP用户的类型 匿名用户:anonymous或ftp 本地用户:账号名称.密码等信息都保存在passwd

linux基础概念和个人笔记总结(1)

防伪码:青,取之于蓝而青于蓝:冰,水为之寒而寒于水 各位亲爱的朋友们,本次分为6次更新,共12章节,请大家务必温故而知新,重在消化理解,熟练掌握linux基础概念与命令 一.linux系统管理与维护 1.分区:/boot(100-200m) swap:(交换分区,建议是物理分区的1.5-2倍) /:剩余空间 root是管理员用户,区分于administrator 2.对初学者建议:关闭iptables a.chkconfig iptables off b.打开/etc/sysconfig/sel