数据库背景知识整理

数据库简介关系型数据库非关系型数据库数据库的常用术语数据库引擎

 

数据库简介

      数据库,是以一定方式(模型结构)储存在一起、能与多个用户共享、具有尽可能小的冗余度、与应用程序彼此独立的数据集合,简而言之类似于存储数据的仓库。

      几乎所有的数据库管理系统都配备了一个开放式数据库连接(ODBC)驱动程序,令各个数据库之间得以互相集成。

      主要的数据模型有:

  • 对象模型。  
  • 层次模型(轻量级数据访问协议)。  层次模型数据库系统是最早研制成功的数据库系统。用树型(层次)结构表示实体类型及实体间联系的数据模型
  • 网状模型(大型数据储存)。 满足下面两个条件的基本层次联系的集合为网状模型。 1. 允许一个以上的结点无双亲; 2. 一个结点可以有多于一个的双亲。
  • 关系模型
  • 面向对象模型。 面向对象数据库系统(OODBS)
  • 半结构化模型
  • 平面模型(表格模型,一般在形式上是一个二维数组。如表格模型数据Excel)

  数据库的三大范式,数据库的设计范式是数据库设计所需要满足的规范,满足这些规范的数据库是简洁的、结构明晰的,同时,不会发生插入(insert)、删除(delete)和更新(update)操作异常。

  • 第一范式(1NF):列不可再分
  • 第二范式(2NF)属性完全依赖于主键
  • 第三范式(3NF)属性不依赖于其它非主属性    属性直接依赖于主键

 

关系型数据库

      关系型数据库(Relational database),关系模型就是指二维表格模型,因而一个关系型数据库就是由二维表及其之间的联系组成的一个数据组织。关系数据库中的核心内容是关系即二维表。而对这样一张表的使用主要包括按照某些条件获取相应行、列的内容,或者通过表之间的联系获取两张表或多张表相应的行、列内容。概括起来关系操作包括选择、投影、连接操作。关系操作其操作对象是关系,操作结果亦为关系。。 常见的关系型数据库有:oracle、MySQL、Microsoft SQL Server、DB2、postgresql、sqlite、Microsoft access、以及浪潮K-DB等。

      关系型数据库的主要优势

  1. 易于维护:都是使用表结构,格式一致;
  2. 容易理解:二维表结构是非常贴近逻辑世界一个概念,关系模型相对网状、层次等其他模型来说更容易理解
  3. 方便使用:SQL语言通用,可用于复杂查询;
  4. 支持复杂操作:支持SQL,可用于一个表以及多个表之间非常复杂的查询。

      关系型数据库面临的瓶颈:

  1. 为了维护一致性牺牲了读写性能,尤其是在海量数据的高效率读写表现性能差;
  2. 固定的表结构,灵活度稍欠;
  3. 高并发读写需求,传统关系型数据库来说,硬盘I/O是一个很大的瓶颈。

非关系型数据库

       非关系型数据库,又被称为NoSQL。最早出现于1998 年,是由Carlo Storzzi最早开发的个轻量、开源、不兼容SQL 功能的关系型数据库,2009 年,在一次分布式开源数据库的讨论会上,再次提出了NoSQL 的概念,此时NoSQL主要是指非关系型、分布式、不提供ACID (数据库事务处理的四个基本要素)的数据库设计模式。同年,在亚特兰大举行的“NoSQL(east)”讨论会上,对NoSQL 最普遍的定义是“非关联型的”,强调Key-Value 存储和文档数据库的优点,而不是单纯地反对RDBMS,至此,NoSQL 开始正式出现在世人面前。

      NoSQL描述的是大量结构化数据存储方法的集合,根据结构化方法以及应用场合的不同,大致可分为三类:

  1. 面向检索的列式存储(Column_Oriented),其存储结构为列式结构,同于关系型数据库的行式结构,这种结构会让很多统计聚合操作更简单方便,使系统具有较高的可扩展性,这类数据库还可以适应海量数据的增加以及数据结构的变化,这个特点与云计算所需的相关需求是相符合的。例如,BigTable,HBase等
  2. 面向高性能并发读/写的缓存存储(Key_Value),其结构类似于数据结构中的Hash表,每个Key分别对应一个Value,能够提供非常快的查询速度、大数据存放量和高并发操作,非常适合通过主键对数据进行查询和修改等操作。Key-Value数据库的主要特点是具有极高的并发读/写性能,非常适合作为缓存系统使用。例如,MemcacheDB、BerkeleyDB、Redis等。
  3. 面向海量数据访问的文档存储(Document_Oriented),这类存储的结构与Key-Value非常相似,也是每个Key分别对应一个Value,但是这个Value主要以JSON或者XML等格式的文档来进行存储。这种存储方式可以很方便地被面向对象的语言所使用。这类数据库可在海量的数据中快速查询数据。例如,MongoDB、CouchDB等。

      非关系型数据库优势:

  1. 格式灵活:存储数据的格式可以是key,value形式、文档形式、图片形式等等,文档形式、图片形式等等,使用灵活,应用场景广泛,而关系型数据库则只支持基础类型。
  2. 速度快、读写性能很高:nosql可以使用硬盘或者随机存储器作为载体,无需经过sql层的解析;
  3. 高扩展性:基于键值对,数据没有耦合性;
  4. 投入成本低:nosql数据库部署简单,基本都是开源软件。

 

      非关系型数据库面临的瓶颈:

  1. 不提供sql支持,学习和使用成本较高;
  2. 无事务处理,附加功能bi和报表等支持也不好;

关于其他非关系型数据库的例子,参考:https://blog.csdn.net/qq_34116402/article/details/79578187

 

数据库的常用术语

  • 关系操作:关系模型中常用的关系操作包括查询操作 和 插入、删除、修改操作两大部分,而查询操作由可分出选择、投影、并、差、笛卡尔积等基本操作。关系操作的特点是集合操作方式,即操作的对象和结果都是集合。这种操作方式也称为一次一集合的方式。相应地,非关系数据模型的数据操作方式则为一次一记录的方式。
  • 数据库管理系统(DBMS):数据库管理系统是数据库系统的核心,是管理数据库的软件。数据库管理系统就是实现把用户意义下抽象的逻辑数据处理,转换成为计算机中具体的物理数据处理的软件。有了数据库管理系统,用户就可以在抽象意义下处理数据,而不必顾及这些数据在计算机中的布局和物理位置。一般具有存储、截取、安全保障、备份等基础功能。数据库管理系统可以依据它所支持的数据库模型来作分类,例如关系式、XML;或依据所支持的计算机类型来作分类,例如服务器群集、移动电话;或依据所用查询语言来作分类,例如SQL、XQuery;或依据性能冲量重点来作分类,例如最大规模、最高运行速度;亦或其他的分类方式。不论使用哪种分类方式,一些DBMS能够跨类别,例如,同时支持多种查询语言。
  • 数据表:数据表(或称表)是数据库最重要的组成部分之一。数据库只是一个框架,数据表才是其实质内容。这些各自独立的数据表通过建立关系被联接起来,成为可以交叉查阅、一目了然的数据库。
  • 列:在关系型数据库中,列的内容也称为字段,每列都有固定的数据类型、数据长度及储存的具体数据。
  • 行:在关系型数据库中,行就是记录数据,一行数据代表一条完整的信息。
  • 冗余:数据冗余是指数据之间的重复,也可以说是同一数据存储在不同数据文件中的现象。可以说增加数据的独立性和减少数据冗余是企业范围信息资源管理和大规模信息系统获得成功的前提条件。
  • 主键(primary key):表中经常有一个列或多列的组合,其值能唯一地标识表中的每一行。这样的一列或多列称为表的主键,通过它可强制表的实体完整性。当创建或更改表时可通过定义 PRIMARY KEY 约束来创建主键。一个表只能有一个 PRIMARY KEY 约束,而且 PRIMARY KEY 约束中的列不能接受空值。主键虽然不是必须设置的,但是在实际应用场景中是非常有必要的,另外设置主键时要保证主键的无意义性,即一般情况下主键无执行意义也就不会被修改。
  • 外键(foreign key):如果公共关键字在一个关系中是主关键字(主键),那么这个公共关键字被称为另一个关系的外键。外键表示了两个关系之间的相关联系。以另一个关系的外键作主关键字的表被称为主表,具有此外键的表被称为主表的从表。外键又称作外关键字。被参照的表是主表,外键所在字段的表为子表。设置外键的原则,就是依赖于数据库中已存在的表的主键。外键的作用是建立该表与其父表的关联关系。父表中对记录做操作时,子表中与之对应的信息也应有相应的改变。特别注意:父表和子表必须使用相同的存储引擎,而且禁止使用临时表;数据表的存储引擎只能为InnoDB;外键列和参照列必须具有相似的数据类型。其中数字的长度或是否有符号位必须相同;而字符的长度则可以不同;外键列和参照列必须创建索引,如果外键列不存在索引的话,MySQL将自动创建索引。实现了一对多的条件约束。
  • 复合主键:当单一字段都不能唯一确定表中的记录信息时,由一个以上字段组合作为主键。
  • 联合主键:在多对多的对应关系中,例如由两个数据表形成的多对多的关系,那么需要通过两个数据表的主键来组成联合主键,就可以确定每个数据表的其中一条记录了由一个以上的主键字段组合成为主键。
  • 索引:索引跟字段有着相应的关系,索引即是由字段而来,其中字段有所谓的关键字段(Key Field),该字段具有唯一性,即其值不可重复,且不可为"空值(null)"。例如:在合并数据时,索引便是扮演欲附加字段数据之指向性用途的角色。故此索引为不可重复性且不可为空。唯一索引,可以为空。
  • 数据库引擎:数据库引擎是用于存储、处理和保护数据的核心服务。它利用不同的技术也就是不同的引擎将数据库的数据存储在内存和硬盘中。合理的选择和利用数据库引擎可以为服务带来良好的性能。不同的引擎有不同的特点,适应不同的工作环境和要求。
  • 参照关系:
  • 参照完整性:
  • 实体完整性
  • 用户自定义完整性
  • 事务(数据库操作transaction):用户定义的一个数据库操作序列,这些操作要么全做,要么全不做,是一个不可分割的工作单位。
  • 事务的ACID特性——
    • 基元性也叫原子性(atomicity) 事务本身是完全不可分割的整体,在执行事务过程中,不能执行一半就不做了,要么做完,要么就一点都不做,如果把一个事务看作是一个程序,DBMS保证它要么完整的被执行,要么完全不执行;
    • 一致性(consistency)事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态,保证数据库一致性是指当事务完成时,必须使所有数据都具有一致的状态,在关系型数据库中,所有的规则必须应用到事务的修改上,以便维护所有数据的完整性,假如数据库的状态满足所有的完整性约束,就说该数据库是一致的;
    • 隔离性(isolation)事务的隔离性是多个用户并发访问数据库时,数据库为一个事务内部的操作及正在操作的数据必须封锁起来,不能被其他事务的操作数据所干扰,多个并发事务之间要相互隔离,隔离性是DBMS针对并发事务间的冲突提供的安全保证,不同的隔离级别会出现脏读、不可重复读、虚读等不同方面的现象,隔离的级别和并发事务的吞吐量之间存在反比关系,较多事务的可隔离性可能会带来较高的冲突和较多的事务流产,流产的事务要消耗资源,这些资源必须要重新被访问,因此,确保高隔离级别的DBMS需要更多的开销;
    • 持续性也叫持久性或永久性(durability)一个事务一旦提交,它对数据库中数据的改变就应该是永久性的,一旦一个事务提交,DBMS保证它对数据库数据的改变应该是永久性的,耐得住任何系统故障,持久性通过数据库备份和恢复来保证 ,持久性意味着当系统或介质发生故障时,确保已提交事务的更新不能丢失;
      事务的并发性是指多个事务的并行操作轮流交叉运行,事务的并发可能会访问和存储不正确的数据,破坏交易的隔离性和数据库的一致性。
       

 mysql数据库引擎

      在数据库引擎文档中,各主题的顺序遵循用于实现使用数据库引擎进行数据存储的系统的任务的主要顺序。

      设计并创建数据库以保存系统所需的关系或XML文档实现系统以访问和更改数据库中存储的数据。包括实现网站或使用数据的应用程序,还包括生成使用SQL Server工具和实用工具以使用数据的过程。为单位或客户部署实现的系统提供日常管理支持以优化数据库的性能。

      ISAM是一个定义明确且历经时间考验的数据表格管理方法,它在设计之时就考虑到数据库被查询的次数要远大于更新的次数。因此,ISAM执行读取操作的速度很快,而且不占用大量的内存和存储资源。ISAM的两个主要不足之处在于,它不支持事务处理,也不能够容错:如果你的硬盘崩溃了,那么数据文件就无法恢复了。如果你正在把ISAM用在关键任务应用程序里,那就必须经常备份你所有的实时数据,通过其复制特性,MYSQL能够支持这样的备份应用程序。

      MYISAM是MYSQL的ISAM扩展格式和缺省的数据库引擎。提供ISAM里所没有的索引和字段管理的功能,MYISAM还使用一种表格锁定的机制,来优化多个并发的读写操作。实现了表格级别的数据库锁,在大并发同时访问数据库时进行了优化。且支持数据的崩溃修复。当然,在它的主要特征快速读取上,进行了进一步的优化,使得读取速度更加快速。其代价是你需要经常运行OPTIMIZE TABLE命令,来恢复被更新机制所浪费的空间。MYISAM还有一些有用的扩展,例如用来修复数据库文件的MYISAMCHK工具和用来恢复浪费空间的MYISAMPACK工具。MYISAM强调了快速读取操作,这可能就是为什么MYSQL受到了WEB开发如此青睐的主要原因:在WEB开发中你所进行的大量数据操作都是读取操作。所以,大多数虚拟主机提供商和INTERNET平台提供商只允许使用MYISAM格式。

      HEAP(MENORY)允许只驻留在内存里的临时表格。驻留在内存里让HEAP要比ISAM和MYISAM都快,但是它所管理的数据是不稳定的,而且如果在关机之前没有进行保存,那么所有的数据都会丢失。在数据行被删除的时候,HEAP也不会浪费大量的空间。HEAP表格在你需要使用SELECT表达式来选择和操控数据的时候非常有用。要记住,在用完表格之后就删除表格。

      INNODB和BERKLEYDB(BDB)数据库引擎都是造就MYSQL灵活性的技术的直接产品,这项技术就是MYSQL++ API。在使用MYSQL的时候,你所面对的每一个挑战几乎都源于ISAM和MYISAM数据库引擎不支持事务处理也不支持外来键。尽管要比ISAM和MYISAM引擎慢很多,但是INNODB和BDB包括了对事务处理和外来键的支持,这两点都是前两个引擎所没有的。如前所述,如果你的设计需要这些特性中的一者或者两者,那你就要被迫使用后两个引擎中的一个了。当需要使用数据库事务时,INNODB引擎当然是首选。由于锁的粒度更小,写操作不会锁定全表,所以在并发较高时,使用Innodb引擎会提升效率。但是使用行级锁也不是绝对的,如果在执行一个SQL语句时MySQL不能确定要扫描的范围,InnoDB表同样会锁全表。

 

posted @ 2019-05-20 15:22  林山风火  阅读(80)  评论(0编辑  收藏  举报