精华内容
下载资源
问答
  • 关系数据库原理、数据模型

    千次阅读 2008-12-06 13:55:00
    数据库是以某种数据模型所确定的数据结构方式来组织和存储某个组织(或部门)相互关联的数据集。数据库管理系统是一种帮助用户建立...数据模型 数据模型是对现实世界数据特征进行抽象的工具,用来描述和处理现实世界

           数据库是以某种数据模型所确定的数据结构方式来组织和存储某个组织(或部门)相互关联的数据集。数据库管理系统是一种帮助用户建立、使用、管理和维护数据库的计算机系统软件。或者说,数据库管理系统是开发一个实际应用数据库的工具并支撑其运行的平台。数据库管理系统必须与其管理的数据库的数据模型相一致。

      1.数据模型

      数据模型是对现实世界数据特征进行抽象的工具,用来描述和处理现实世界中的数据和信息。数据模型要能较真实地模拟现实世界,既要便于人们理解,又要便于在计算机上实现。数据模型主要由数据结构、数据操作、数据完整性规则三个部分组成。数据结构描述了组成数据库的基本成分;数据操作描述了对数据结构允许执行的操作集合;完整性规则描述了对数据结构所具有的约束和存储规则。

      2.关系数据模型

      关系数据模型的数据结构是人们日常事务处理中常见的二维表结构(如工资发放表)。关系数据模型将数据看成是二维表中唯一的行号和列号确定的一个表中元素,即关系数据模型是用二维表的方式来组织、存储和处理数据和信息的。从应用的角度来看,任何一个组织(或部门)的关系数据库的基本组成成分是二维表,或者说某个组织(或部门)的数据库是由若干张相互关联的二维表组成。由于二维表结构清晰、简单、易于理解,也易于计算机实现(存储、操作、控制),加上关系数据模型有数学理论基础(集合论、关系代数),因此现在的数据库管理系统软件都是基于关系数据模型研发的,如SQL SERVER、ORACLE、DB2、SYBASE、ACCESS、FOXPRO等等。也就是说,用这些关系数据库管理系统软件为某个组织开发的会计数据库系统必须按关系数据模型来组织数据。那么,关系数据模型中的二维表与数据库中的数据文件之间有何联系?

      下面我们通过会计科目代码表来介绍关系数据模型的基本概念及其与数据库中的数据文件之间的对应关系:

      (1)关系、二维表、数据文件:关系数据模型中用关系来表述现实世界中能够相互区别的要管理的数据对象集。每一个关系都有一个关系名和一组表述其特征的属性集,人们就是通过这些属性集区别不同的关系。如记账凭证、会计科目、总账都可以称之为关系,它们都是要管理的数据对象集,都有各自的属性集。一个关系用一张二维表表示,表名对应关系名。二维表由有限个不重复的行组成,表中的每一列不可再分。一张二维表在关系数据库中用一个数据文件存储。如“会计科目代码表”在会计数据库中用一个数据文件存储,文件名可以用表名“会计科目代码”,使计算机中存储的文件内容与现实世界管理的数据对象相联系。

      (2)记录:二维表中的每一行称为一个记录,描述了关系中一个具体的个体,在数据文件中是一个记录值。如表1中第一行为现金账户的记录,描述了现金账户在会计科目代码文件中所有属性的取值(特征)。

      (3)属性、列、字段:二维表中的每一列是一个属性,描述了关系的一个特征。一个二维表的所有列构成了一个关系的属性集,通过它可以区别不同的二维表(关系)。二维表中的每一列的数据属于同一类型。每一列的列名对应关系的属性名,同时对应数据文件中的字段名。如表1用6个列表示会计科目代码的属性,其中第三列表示属性“科目性质”,当某条记录取值为1时,表示是资产类科目。

      (4)主码、主关键字:指二维表中的某个列(属性)或某几个列(或属性组),它们的值能够唯一确定表中或数据文件中的一个记录。如表1中的“科目代码”属性可以作为主码(或主关键字),用来唯一识别表中的每一个会计科目。

      (5)域:描述二维表中每一列属性或数据文件的某一字段的取值类型和范围。如表1中每一列的列名下面的括号中的内容表示该列的取值类型和范围,其中第四列“底层明细标志”表示某个科目是不是最底层明细科目(不再有下层科目),只有两种取值T(真)和F(假)。

      (6)关系模式:一个关系模式由一个关系名及它所有的属性构成,它对应一个二维表的表名和表头栏目行(列的集合),构成了一个二维表的框架,同时也是设计该二维表的数据文件结构的依据。

      至此,我们直观地介绍了关系数据库中的关系、二维表、数据文件之间各个概念的对应关系。由于二维表中的行与数据文件的记录、二维表的列(属性)与数据文件的字段之间相互对应,因此,审计人员只要掌握了会计账务数据库的二维表结构及表之间的关联也就能够分析电子账的结构。

      例如,将会计科目代码表(表1)转换成关系数据库中的数据文件结构:

      3.关系数据模型的数据操作

      从数学的角度看,关系数据模型的数据操作是基于集合的操作,操作对象和操作结果都是集合。从数据处理的角度看,数据操作的对象和结果都是二维表。对二维表的操作主要有:

      (1)对表中的行(记录)进行操作:指对一张表中指定范围的记录进行有条件的操作,操作的结果组成一张新表。例如,从“会计科目代码表”中筛选出资产类科目组成新的“资产类科目代码表”,操作的范围是整个“会计科目代码表”,条件是“科目性质等于1”。对表中的行进行操作后的结果表的结构与原表相同,记录数小于或等于原表。

      (2)对表中的列(属性)进行操作:指对一张表中指定的列进行有条件的操作,操作的结果组成一张新表。例如,从“会计科目代码表”中选出“科目代码”、“科目名称”两列,组成新的科目代码对应表,新表只有“科目代码”和“科目名称”两列。显然,列操作后的结果表的结构与原表不同,结果表小于或等于原表。

      (3)连接:对两张表或多张表进行有条件的连接操作,生成一张新表。连接操作后的结果表大于等于操作前的表。

      从应用的角度看,对二维表中的数据操作功能主要包括更新(增加、修改、删除)数据和检索(查询)数据,即对二维表填入和修改数据,并从表中检索出数据进行加工应用。

      4.关系数据模型的数据完整性规则

      数据完整性是指数据库中存储的数据是有意义的或正确的。关系数据模型中的数据完整性规则是指对二维表的定义和操作过程中要遵循的某些约束条件。主要包括:

      (1)实体完整性:指每张表都必须有主码,而且表中不允许存在无主码值的记录和主码值相同的记录。如表1中的每一个记录都必须有科目代码,并且不能有相同科目代码的记录和无科目代码的记录。

      (2)参照完整性:指一张表的某列的取值受另一张表的某列的取值范围约束,描述了多张表之间的关联关系。例如,记账凭证表中的“科目代码”列的取值受到会计科目代码表的“科目代码”取值范围的限定。

      (3)用户定义完整性。指针对某一具体应用定义的数据库约束条件,反映某一具体应用所涉及的数据必须满足应用语义的要求。即限制属性的取值类型及范围,防止属性的值与应用语义矛盾。如表1中,“科目性质”的取值只能是1(资产)、2(负债)、3(权益)、4(成本)、5(损益)。

      5.从关系数据模型得到的启示

      (1)基于关系数据模型的会计账务数据库是以二维表为基本部件构建的,数据库中的每一个数据文件对应一张二维表,数据文件之间的关联也可以用二维表之间的关联来表示,对二维表的定义和数据操作必须满足数据完整性约束条件。构建一个会计账务数据库首先要将会计账务管理的对象,如会计科目、记账凭证、日记账、明细账、总账及它们之间的关系抽象成二维表的形式,弄清了它们的二维表结构也就弄清了它们的数据文件结构,即电子账结构。因此,会计账务数据库结构设计可以转变成会计账务数据的二维表及二维表之间的关联设计,而一张二维表的表头栏目(属性集)反映了表的结构特征,是设计数据文件结构的依据。

      (2)依据关系数据模型研发的关系数据库管理系统是开发和管理会计数据库系统的工具软件,也是支持所开发的会计数据库系统运行的平台,任何一个会计账务数据库都必须在某一个关系数据库管理系统的在线管理下运行。由于不同的数据库软件公司提供的关系数据库管理系统软件的各个版本的功能强弱、所适应的计算机系统的运行环境(单机、网络等)、所提供的对表的操作命令等都有所不同,因此,审计人员要审查电子账,首先要了解被审单位的电子账的数据库管理系统软件的名称(例如是SQL SERVER或ORACLE)、版本(单机、网络,第几版)、打开数据库(表)以及对表操作的命令格式和命令等。尽管各种关系数据库管理系统软件版本有差异,但通过以上对关系数据模型的操作可以了解到:表的主要操作类型和功能基本一致。审计人员仅需要掌握最基本的打开、检索、汇总数据库(表)等操作命令就能进行审查会计账务数据库的基本工作,并非深不可测。

     

    数据库原理,数据模型

    http://202.192.164.101/News/20061191249.html

    展开全文
  • 关系数据库与非关系数据库的区别

    万次阅读 2018-11-01 20:50:59
    当前主流的关系数据库有Oracle、DB2、Microsoft SQL Server、Microsoft Access、MySQL等。 非关系数据库有 NoSql、Cloudant。 nosql和关系数据库比较? 优点: 1)成本:nosql数据库简单易部署,基本都是开源...

    当前主流的关系型数据库Oracle、DB2、Microsoft SQL Server、Microsoft Access、MySQL等。

    非关系型数据库有 NoSql、Cloudant。

    nosql和关系型数据库比较?
    优点:
    1)成本:nosql数据库简单易部署,基本都是开源软件,不需要像使用oracle那样花费大量成本购买使用,相比关系型数据库价格便宜。
    2)查询速度:nosql数据库将数据存储于缓存之中,关系型数据库将数据存储在硬盘中,自然查询速度远不及nosql数据库。
    3)存储数据的格式:nosql的存储格式是key,value形式、文档形式、图片形式等等,所以可以存储基础类型以及对象或者是集合等各种格式,而数据库则只支持基础类型。
    4)扩展性:关系型数据库有类似join这样的多表查询机制的限制导致扩展很艰难。
    缺点:
    1)维护的工具和资料有限,因为nosql是属于新的技术,不能和关系型数据库10几年的技术同日而语。
    2)不提供对sql的支持,如果不支持sql这样的工业标准,将产生一定用户的学习和使用成本。

    3)不提供关系型数据库对事物的处理。


    非关系型数据库的优势:1. 性能NOSQL是基于键值对的,可以想象成表中的主键和值的对应关系,而且不需要经过SQL层的解析,所以性能非常高。2. 可扩展性同样也是因为基于键值对,数据之间没有耦合性,所以非常容易水平扩展。

    关系型数据库的优势:1. 复杂查询可以用SQL语句方便的在一个表以及多个表之间做非常复杂的数据查询。2. 事务支持使得对于安全性能很高的数据访问要求得以实现。对于这两类数据库,对方的优势就是自己的弱势,反之亦然。




    关系型数据库把所有的数据都通过行和列的二元表现形式表示出来。

     

    关系型数据库的优势:

    1. 保持数据的一致性(事务处理)

    2.由于以标准化为前提,数据更新的开销很小(相同的字段基本上都只有一处)

    3. 可以进行Join等复杂查询

    其中能够保持数据的一致性是关系型数据库的最大优势。

     

    关系型数据库的不足:

    不擅长的处理

    1. 大量数据的写入处理

    2. 为有数据更新的表做索引或表结构(schema)变更

    3. 字段不固定时应用

    4. 对简单查询需要快速返回结果的处理

    --大量数据的写入处理

    读写集中在一个数据库上让数据库不堪重负,大部分网站已使用主从复制技术实现读写分离,以提高读写性能和读库的可扩展性。

    所以在进行大量数据操作时,会使用数据库主从模式。数据的写入由主数据库负责,数据的读入由从数据库负责,可以比较简单地通过增加从数据库来实现规模化,但是数据的写入却完全没有简单的方法来解决规模化问题。

    第一,要想将数据的写入规模化,可以考虑把主数据库从一台增加到两台,作为互相关联复制的二元主数据库使用,确实这样可以把每台主数据库的负荷减少一半,但是更新处理会发生冲突,可能会造成数据的不一致,为了避免这样的问题,需要把对每个表的请求分别分配给合适的主数据库来处理。

    第二,可以考虑把数据库分割开来,分别放在不同的数据库服务器上,比如将不同的表放在不同的数据库服务器上,数据库分割可以减少每台数据库服务器上的数据量,以便减少硬盘IO的输入、输出处理,实现内存上的高速处理。但是由于分别存储字不同服务器上的表之间无法进行Join处理,数据库分割的时候就需要预先考虑这些问题,数据库分割之后,如果一定要进行Join处理,就必须要在程序中进行关联,这是非常困难的。

     

     

    --为有数据更新的表做索引或表结构变更

    在使用关系型数据库时,为了加快查询速度需要创建索引,为了增加必要的字段就一定要改变表结构,为了进行这些处理,需要对表进行共享锁定,这期间数据变更、更新、插入、删除等都是无法进行的。如果需要进行一些耗时操作,例如为数据量比较大的表创建索引或是变更其表结构,就需要特别注意,长时间内数据可能无法进行更新。

     

    --字段不固定时的应用

    如果字段不固定,利用关系型数据库也是比较困难的,有人会说,需要的时候加个字段就可以了,这样的方法也不是不可以,但在实际运用中每次都进行反复的表结构变更是非常痛苦的。你也可以预先设定大量的预备字段,但这样的话,时间一长很容易弄不清除字段和数据的对应状态,即哪个字段保存有哪些数据。

    --对简单查询需要快速返回结果的处理  (这里的“简单”指的是没有复杂的查询条件)

    这一点称不上是缺点,但不管怎样,关系型数据库并不擅长对简单的查询快速返回结果,因为关系型数据库是使用专门的sql语言进行数据读取的,它需要对sql与越南进行解析,同时还有对表的锁定和解锁等这样的额外开销,这里并不是说关系型数据库的速度太慢,而只是想告诉大家若希望对简单查询进行高速处理,则没有必要非使用关系型数据库不可。

    ---------------------------

    NoSQL数据库

    关系型数据库应用广泛,能进行事务处理和表连接等复杂查询。相对地,NoSQL数据库只应用在特定领域,基本上不进行复杂的处理,但它恰恰弥补了之前所列举的关系型数据库的不足之处。

    优点:

     易于数据的分散

    各个数据之间存在关联是关系型数据库得名的主要原因,为了进行join处理,关系型数据库不得不把数据存储在同一个服务器内,这不利于数据的分散,这也是关系型数据库并不擅长大数据量的写入处理的原因。相反NoSQL数据库原本就不支持Join处理,各个数据都是独立设计的,很容易把数据分散在多个服务器上,故减少了每个服务器上的数据量,即使要处理大量数据的写入,也变得更加容易,数据的读入操作当然也同样容易。

     

    典型的NoSQL数据库

    临时性键值存储(memcached、Redis)、永久性键值存储(ROMA、Redis)、面向文档的数据库(MongoDB、CouchDB)、面向列的数据库(Cassandra、HBase)

    一、 键值存储

    它的数据是以键值的形式存储的,虽然它的速度非常快,但基本上只能通过键的完全一致查询获取数据,根据数据的保存方式可以分为临时性、永久性和两者兼具 三种。

    (1)临时性

          所谓临时性就是数据有可能丢失,memcached把所有数据都保存在内存中,这样保存和读取的速度非常快,但是当memcached停止时,数据就不存在了。由于数据保存在内存中,所以无法操作超出内存容量的数据,旧数据会丢失。总结来说:

          。在内存中保存数据

          。可以进行非常快速的保存和读取处理

          。数据有可能丢失

     (2)永久性

           所谓永久性就是数据不会丢失,这里的键值存储是把数据保存在硬盘上,与临时性比起来,由于必然要发生对硬盘的IO操作,所以性能上还是有差距的,但数据不会丢失是它最大的优势。总结来说:

           。在硬盘上保存数据

           。可以进行非常快速的保存和读取处理(但无法与memcached相比)

           。数据不会丢失

    (3) 两者兼备

           Redis属于这种类型。Redis有些特殊,临时性和永久性兼具。Redis首先把数据保存在内存中,在满足特定条件(默认是 15分钟一次以上,5分钟内10个以上,1分钟内10000个以上的键发生变更)的时候将数据写入到硬盘中,这样既确保了内存中数据的处理速度,又可以通过写入硬盘来保证数据的永久性,这种类型的数据库特别适合处理数组类型的数据。总结来说:

           。同时在内存和硬盘上保存数据

           。可以进行非常快速的保存和读取处理

           。保存在硬盘上的数据不会消失(可以恢复)

           。适合于处理数组类型的数据

         

    二、面向文档的数据库

       MongoDB、CouchDB属于这种类型,它们属于NoSQL数据库,但与键值存储相异。

       (1)不定义表结构

         即使不定义表结构,也可以像定义了表结构一样使用,还省去了变更表结构的麻烦。

       (2)可以使用复杂的查询条件 

         跟键值存储不同的是,面向文档的数据库可以通过复杂的查询条件来获取数据,虽然不具备事务处理和Join这些关系型数据库所具有的处理能力,但初次以外的其他处理基本上都能实现。

    三、 面向列的数据库

       Cassandra、HBae、HyperTable属于这种类型,由于近年来数据量出现爆发性增长,这种类型的NoSQL数据库尤其引入注目。

       普通的关系型数据库都是以行为单位来存储数据的,擅长以行为单位的读入处理,比如特定条件数据的获取。因此,关系型数据库也被成为面向行的数据库。相反,面向列的数据库是以列为单位来存储数据的,擅长以列为单位读入数据。

    面向列的数据库具有搞扩展性,即使数据增加也不会降低相应的处理速度(特别是写入速度),所以它主要应用于需要处理大量数据的情况。另外,把它作为批处理程序的存储器来对大量数据进行更新也是非常有用的。但由于面向列的数据库跟现行数据库存储的思维方式有很大不同,故应用起来十分困难。

     

    总结:关系型数据库与NoSQL数据库并非对立而是互补的关系,即通常情况下使用关系型数据库,在适合使用NoSQL的时候使用NoSQL数据库,让NoSQL数据库对关系型数据库的不足进行弥补。




    展开全文
  • 数据库通常分为层次式数据库、网络式数据库关系数据库三种。而不同的数据库是按不同的数据结构来联系和组织的。  1.数据结构模型  (1)数据结构  所谓数据结构是指数据的组织形式或数据之间的联系。...

    数据库通常分为层次式数据库、网络式数据库和关系式数据库三种。而不同的数据库是按不同的数据结构来联系和组织的。

      1.数据结构模型

      (1)数据结构

      所谓数据结构是指数据的组织形式或数据之间的联系。如果用D表示数据,用R表示数据对象之间存在的关系集合,则将DS=(D,R)称为数据结构。例如,设有一个电话号码簿,它记录了n个人的名字和相应的电话号码。为了方便地查找某人的电话号码,将人名和号码按字典顺序排列,并在名字的后面跟随着对应的电话号码。这样,若要查找某人的电话号码(假定他的名字的第一个字母是Y),那么只须查找以Y开头的那些名字就可以了。该例中,数据的集合D就是人名和电话号码,它们之间的联系R就是按字典顺序的排列,其相应的数据结构就是DS=(D,R),即一个数组

      (2)数据结构种类

      数据结构又分为数据的逻辑结构和数据的物理结构。数据的逻辑结构是从逻辑的角度(即数据间的联系和组织方式)来观察数据,分析数据,与数据的存储位置无关。数据的物理结构是指数据在计算机中存放的结构,即数据的逻辑结构在计算机中的实现形式,所以物理结构也被称为存储结构。这里只研究数据的逻辑结构,并将反映和实现数据联系的方法称为数据模型。

      目前,比较流行的数据模型有三种,即按图论理论建立的层次结构模型和网状结构模型以及按关系理论建立的关系结构模型。

      2.层次、网状和关系数据库系统

      (1)层次结构模型

      层次结构模型实质上是一种有根结点的定向有序树(在数学中"树"被定义为一个无回的连通图)。下图是一个高等学校的组织结构图。这个组织结构图像一棵树,校部就是树根(称为根结点),各系、专业、教师、学生等为枝点(称为结点),树根与枝点之间的联系称为边,树根与边之比为1:N,即树根只有一个,树枝有N个。

      按照层次模型建立的数据库系统称为层次模型数据库系统。IMS(Information Manage-mentSystem)是其典型代表。

      (2)网状结构模型

      按照网状数据结构建立的数据库系统称为网状数据库系统,其典型代表是DBTG(Data Base Task Group)。用数学方法可将网状数据结构转化为层次数据结构。

      (3)关系结构模型

      关系式数据结构把一些复杂的数据结构归结为简单的二元关系(即二维表格形式)。例如某单位的职工关系就是一个二元关系。

      由关系数据结构组成的数据库系统被称为关系数据库系统。

      在关系数据库中,对数据的操作几乎全部建立在一个或多个关系表格上,通过对这些关系表格的分类、合并、连接或选取等运算来实现数据的管理。dBASEII就是这类数据库管理系统的典型代表。对于一个实际的应用问题(如人事管理问题),有时需要多个关系才能实现。用dBASEII建立起来的一个关系称为一个数据库(或称数据库文件),而把对应多个关系建立起来的多个数据库称为数据库系统。dBASEII的另一个重要功能是通过建立命令文件来实现对数据库的使用和管理,对于一个数据库系统相应的命令序列文件,称为该数据库的应用系统。因此,可以概括地说,一个关系称为一个数据库,若干个数据库可以构成一个数据库系统。数据库系统可以派生出各种不同类型的辅助文件和建立它的应用系统。


    在上面提到的“三高”需求面前,关系数据库遇到了难以克服的障碍,而对于web2.0网站来说,关系数据库的很多主要特性却往往无用武之地,例如: 

    1、数据库事务一致性需求 
    很多web实时系统并不要求严格的数据库事务,对读一致性的要求很低,有些场合对写一致性要求也不高。因此数据库事务管理成了数据库高负载下一个沉重的负担。 

    2、数据库的写实时性和读实时性需求 
    对关系数据库来说,插入一条数据之后立刻查询,是肯定可以读出来这条数据的,但是对于很多web应用来说,并不要求这么高的实时性,比方说我(JavaEye的robbin)发一条消息之后,过几秒乃至十几秒之后,我的订阅者才看到这条动态是完全可以接受的。 

    3、对复杂的SQL查询,特别是多表关联查询的需求 
    任何大数据量的web系统,都非常忌讳多个大表的关联查询,以及复杂的数据分析类型的复杂SQL报表查询,特别是SNS类型的网站,从需求以及产品设计角度,就避免了这种情况的产生。往往更多的只是单表的主键查询,以及单表的简单条件分页查询,SQL的功能被极大的弱化了。 


    关系数据库的特点:
    特点
    数据库管理系统将具有一定结构的数据组成一个集合,它主要具有以下几个特点:
    1. 数据的结构化 数据库中的数据并不是杂乱无章、毫不相干的,它们具有一定的组织结构,属于同一集合的数据具有相似的特征。
    2. 数据的共享性 在一个单位的各个部门之间,存在着大量的重复信息。使用数据库的目的就是要统一管理这些信息,减少冗余度,使各个部门共同享有相同的数据。
    3. 数据的独立性 数据的独立性是指数据记录和数据管理软件之间的独立。数据及其结构应具有独立性,而不应该去改变应用程序。
    4. 数据的完整性 数据的完整性是指保证数据库中数据的正确性。可能造成数据不正确的原因很多,数据库管理系统通过对数据性质进行检查而管理它们。
    5. 数据的灵活性 数据库管理系统不是把数据简单堆积,它在记录数据信息的基础上具有很多的管理功能,如输入、输出、查询、编辑修改等。
    6. 数据的安全性 根据用户的职责,不同级别的人对数据库具有不同的权限,数据库管理系统应该确保数据的安全性。

    简单言之,关系数据库就是,数据库表跟表之间需要存在一定的关系。比如,你系跟学生的一对多关系之类。
    而非关系数据库,就是表跟表之间不存在关系

    关系型数据库的特点

    关系型数据库最大特点就是事务的一致性:传统的关系型数据库读写操作都是事务的,具有ACID(原子性Atomicity、一致性Consistency、隔离性Isolation、持久性Durability)的特点,C就是一致性(Consistency),这个特点是关系型数据库的灵魂(其他三个AID都是为其服务的),这个特性使得关系型数据库可以用于几乎所有对一致性有要求的系统中,如典型的银行系统。

    但是,在网页应用中,尤其是SNS应用中,一致性却不是显得那么重要,用户A看到的内容和用户B看到同一用户C内容更新不一致是可以容忍的,或者说,两个人看到同一好友的数据更新的时间差那么几秒是可以容忍的,因此,关系型数据库的最大特点在这里已经无用武之地,起码不是那么重要了。

    相反的,关系型数据库为了维护一致性所付出的巨大代价就是其读写性能比较差,而像微博,facebook这类SNS的应用,对并发读写能力要求极高,关系型数据库已经无法应付(在读方面,传统上为了克服关系型数据库缺陷,提高性能,都是增加一级memcache来静态化网页,而在SNS中,变化太快,memcache已经无能为力),因此,必须用新的一种数据结构化存储来来代替关系数据库。

    关系数据库的另一个特点就是其具有固定的表结构,因此,其扩展性极差,而在SNS中,系统的升级,功能的增加,往往意味着数据结构巨大改动,这一点关系型数据库也难以应付,需要新的结构化数据存储。

    于是,非关系数据库(NoSQL)应运而生,由于不可能用一种数据结构化存储方式应付所有的新的需求,因此,非关系型数据库严格上不是一种数据库,应该是一种数据结构化存储方法的集合。

    必须强调的是,数据的持久存储,尤其是海量数据的持久存储,还是需要关系数据库这员老将。

    非关系型数据库分类

    由于关系型数据库本身天然的多样性,以及出现的时间较短,因此,不像关系型数据库,有几种数据库能够一统江山,关系型数据库的非常多,并且大部分都是开源的,这里列出一些:Redis,Tokyo Cabinet,Cassandra,Voldemort,MongoDB,Dynomite,HBase,CouchDB,Hypertable,Riak,Tin, Flare,Lightcloud,KiokuDB,Scalaris,Kai,ThruDB…

    这些数据库中,其实实现大部分都比较简单,除了一些共性外,很大一部分都是针对某些特定的应用需求出现的,因此,对于该类应用,具有极高的性能。依据结构化方法以及应用场合的不同,主要分为以下几类:

    1. 面向高性能并发读写的Key-Value数据库:Key-Value数据库的主要特点就是具有极高的并发读写性能,Redis,Tokyo Cabinet,Flare就是这类的代表。
    2. 面向海量数据访问的面向文档数据库(Document store):这类数据库的特点是,可以在海量的数据中快速的查询数据。典型代表为MongoDB以及CouchDB。
    3. 面向可扩展性的分布式数据库(Object Store):这类数据库想解决的问题就是传统数据库在可扩展性上的缺陷,这类数据库可以适应数据量的增加以及数据结构的变化,Google Appengine的Big Table就是这类的典型代表,并且,BigTable特别适用于Map Reduce处理。

    这里只对这几类数据库简要的介绍,需要详情可以看:http://en.wikipedia.org/wiki/NoSQL

    有空的话,以后也扯扯各类的具体差别,另外,个人感觉RAM Database挺有前途的,果如此,memcache就几乎不用了。



    1. 关系型数据库

    关系型数据库,是指采用了关系模型来组织数据的数据库。

    关系模型是在1970年由IBM的研究员E.F.Codd博士首先提出的,在之后的几十年中,关系模型的概念得到了充分的发展并逐渐成为主流数据库结构的主流模型。

    简单来说,关系模型指的就是二维表格模型,而一个关系型数据库就是由二维表及其之间的联系所组成的一个数据组织

    关系模型中常用的概念:

    • 关系:可以理解为一张二维表,每个关系都具有一个关系名,就是通常说的表名
    • 元组:可以理解为二维表中的一行,在数据库中经常被称为记录
    • 属性:可以理解为二维表中的一列,在数据库中经常被称为字段
    • :属性的取值范围,也就是数据库中某一列的取值限制
    • 关键字:一组可以唯一标识元组的属性,数据库中常称为主键,由一个或多个列组成
    • 关系模式:指对关系的描述。其格式为:关系名(属性1,属性2, ... ... ,属性N),在数据库中成为表结构

    关系型数据库的优点:

    • 容易理解:二维表结构是非常贴近逻辑世界的一个概念,关系模型相对网状、层次等其他模型来说更容易理解
    • 使用方便:通用的SQL语言使得操作关系型数据库非常方便
    • 易于维护:丰富的完整性(实体完整性、参照完整性和用户定义的完整性)大大减低了数据冗余和数据不一致的概率

    2. 关系型数据库瓶颈

    • 高并发读写需求

    网站的用户并发性非常高,往往达到每秒上万次读写请求,对于传统关系型数据库来说,硬盘I/O是一个很大的瓶颈

    • 海量数据的高效率读写

    网站每天产生的数据量是巨大的,对于关系型数据库来说,在一张包含海量数据的表中查询,效率是非常低的

    • 高扩展性和可用性

    在基于web的结构当中,数据库是最难进行横向扩展的,当一个应用系统的用户量和访问量与日俱增的时候,数据库却没有办法像web server和app server那样简单的通过添加更多的硬件和服务节点来扩展性能和负载能力。对于很多需要提供24小时不间断服务的网站来说,对数据库系统进行升级和扩展是非常痛苦的事情,往往需要停机维护和数据迁移。


    对网站来说,关系型数据库的很多特性不再需要了:

    • 事务一致性

    关系型数据库在对事物一致性的维护中有很大的开销,而现在很多web2.0系统对事物的读写一致性都不高

    • 读写实时性

    对关系数据库来说,插入一条数据之后立刻查询,是肯定可以读出这条数据的,但是对于很多web应用来说,并不要求这么高的实时性,比如发一条消息之后,过几秒乃至十几秒之后才看到这条动态是完全可以接受的

    • 复杂SQL,特别是多表关联查询

    任何大数据量的web系统,都非常忌讳多个大表的关联查询,以及复杂的数据分析类型的复杂SQL报表查询,特别是SNS类型的网站,从需求以及产品阶级角度,就避免了这种情况的产生。往往更多的只是单表的主键查询,以及单表的简单条件分页查询,SQL的功能极大的弱化了


    在关系型数据库中,导致性能欠佳的最主要原因是多表的关联查询,以及复杂的数据分析类型的复杂SQL报表查询。为了保证数据库的ACID特性,我们必须尽量按照其要求的范式进行设计,关系型数据库中的表都是存储一个格式化的数据结构。每个元组字段的组成都是一样,即使不是每个元组都需要所有的字段,但数据库会为每个元组分配所有的字段,这样的结构可以便于标语表之间进行链接等操作,但从另一个角度来说它也是关系型数据库性能瓶颈的一个因素。

    3. NoSQL

    NoSQL一词首先是Carlo Strozzi在1998年提出来的,指的是他开发的一个没有SQL功能,轻量级的,开源的关系型数据库。这个定义跟我们现在对NoSQL的定义有很大的区别,它确确实实字如其名,指的就是“没有SQL”的数据库。但是NoSQL的发展慢慢偏离了初衷,我们要的不是“no sql”,而是“no relational”,也就是我们现在常说的非关系型数据库了。

    2009年初,Johan Oskarsson举办了一场关于开源分布式数据库的讨论,Eric Evans在这次讨论中再次提出了NoSQL一词,用于指代那些非关系型的,分布式的,且一般不保证遵循ACID原则的数据存储系统。Eric Evans使用NoSQL这个词,并不是因为字面上的“没有SQL”的意思,他只是觉得很多经典的关系型数据库名字都叫“**SQL”,所以为了表示跟这些关系型数据库在定位上的截然不同,就是用了“NoSQL“一词。

    注:数据库事务必须具备ACID特性,ACID是Atomic原子性,Consistency一致性,Isolation隔离性,Durability持久性。


    非关系型数据库提出另一种理念,例如,以键值对存储,且结构不固定,每一个元组可以有不一样的字段,每个元组可以根据需要增加一些自己的键值对,这样就不会局限于固定的结构,可以减少一些时间和空间的开销。使用这种方式,用户可以根据需要去添加自己需要的字段,这样,为了获取用户的不同信息,不需要像关系型数据库中,要对多表进行关联查询。仅需要根据id取出相应的value就可以完成查询。但非关系型数据库由于很少的约束,他也不能够提供像SQL所提供的where这种对于字段属性值情况的查询。并且难以体现设计的完整性。他只适合存储一些较为简单的数据,对于需要进行较复杂查询的数据,SQL数据库显的更为合适。


    4. 关系型数据库  V.S.  非关系型数据库

    关系型数据库的最大特点就是事务的一致性:传统的关系型数据库读写操作都是事务的,具有ACID的特点,这个特性使得关系型数据库可以用于几乎所有对一致性有要求的系统中,如典型的银行系统。

    但是,在网页应用中,尤其是SNS应用中,一致性却不是显得那么重要,用户A看到的内容和用户B看到同一用户C内容更新不一致是可以容忍的,或者说,两个人看到同一好友的数据更新的时间差那么几秒是可以容忍的,因此,关系型数据库的最大特点在这里已经无用武之地,起码不是那么重要了。

    相反地,关系型数据库为了维护一致性所付出的巨大代价就是其读写性能比较差,而像微博、facebook这类SNS的应用,对并发读写能力要求极高,关系型数据库已经无法应付(在读方面,传统上为了克服关系型数据库缺陷,提高性能,都是增加一级memcache来静态化网页,而在SNS中,变化太快,memchache已经无能为力了),因此,必须用新的一种数据结构存储来代替关系数据库。

    关系数据库的另一个特点就是其具有固定的表结构,因此,其扩展性极差,而在SNS中,系统的升级,功能的增加,往往意味着数据结构巨大变动,这一点关系型数据库也难以应付,需要新的结构化数据存储。

    于是,非关系型数据库应运而生,由于不可能用一种数据结构化存储应付所有的新的需求,因此,非关系型数据库严格上不是一种数据库,应该是一种数据结构化存储方法的集合

    必须强调的是,数据的持久存储,尤其是海量数据的持久存储,还是需要一种关系数据库这员老将


    5. 非关系型数据库分类

    由于非关系型数据库本身天然的多样性,以及出现的时间较短,因此,不想关系型数据库,有几种数据库能够一统江山,非关系型数据库非常多,并且大部分都是开源的。

    这些数据库中,其实实现大部分都比较简单,除了一些共性外,很大一部分都是针对某些特定的应用需求出现的,因此,对于该类应用,具有极高的性能。依据结构化方法以及应用场合的不同,主要分为以下几类:

    • 面向高性能并发读写的key-value数据库:

    key-value数据库的主要特点即使具有极高的并发读写性能,Redis,Tokyo Cabinet,Flare就是这类的代表

    • 面向海量数据访问的面向文档数据库:

    这类数据库的特点是,可以在海量的数据中快速的查询数据,典型代表为MongoDB以及CouchDB

    • 面向可扩展性的分布式数据库:

    这类数据库想解决的问题就是传统数据库存在可扩展性上的缺陷,这类数据库可以适应数据量的增加以及数据结构的变化







    展开全文
  • 数据模型是指数据库的组织形式,它决定了数据库中数据之间联系的表达方式,即把在计算机表示客观事物及其联系的数据及结构称为数据模型。本文详细讲述传统三大数据模型和空间数据模型。 一、数据模型概述 数据模型...

    数据模型是指数据库的组织形式,它决定了数据库中数据之间联系的表达方式,即把在计算机中表示客观事物及其联系的数据及结构称为数据模型。本文详细讲述传统三大数据模型和空间数据模型。

     

    一、数据模型概述


    数据模型是指数据库的组织形式,它决定了数据库中数据之间联系的表达方式,即把在计算机中表示客观事物及其联系的数据及结构称为数据模型

    组织方式的不同,常见的有四种:

    1、传统数据模型(层次模型、网状模型、关系模型)

    2、面向对象模型

    3、时态GIS模型

    4、三维数据模型

     

    二、传统数据模型


    1. 层次模型

    层次模型是一种结构模型,它把数据按自然的层次关系组织起来,以反映数据间的隶属关系。

    2. 网状模型

    网状模型是将数据组织成有向图的结构,图中的节点代表数据记录,连线描述不同节点数据间的联系。

    3. 关系模型

    关系模型的基本数据机构是二维表,是一种非格式化的模型。实体跟实体之间的联系用关系来表示,满足一定规范化条件的集合就构成了一个关系模型

     

    三、面向对象数据模型


    面向对象数据模型是一种新兴的数据模型,它采用面向对象的方法来设计数据库。

    面向对象的数据库存储对象是以对象为单位,每个对象包含对象的属性和方法,具有类和继承等特点。

    1. 面向对象的基本思想

    面向对象是模拟人类认识客观世界的方式,将现实世界的一切事物或现象(或称为实体)模型化为对象或对象的集合来表达。实体的静态特征(可以用数据来表达的特征用对象的属性来表示;实体的动态特征(事物的行为)用对象的方法来表示。

    2. 面向对象的几个基本概念

    (1)对象

    对象是现实世界中实际存在的实体.是构成系统的基本单位。-个对象由-组属性和对这组属性进行操作的方法构成。属性用来描述对象的静态特征,方法用来描述对象的动态特征。每个对象都有一个标识号(ID)来唯一标识。

    (2)类

    类是具有相同属性和方法的一组对象的集合,它为属于该类的全部对象提供了统- -的抽象描述,其内部包括属性和方法两个主要部分。类给出了属于该类的全部对象的抽象定义,而对象则是符合这种定义的一个实例。例如,每条河流均具有名称、长度、流域面积等属性,以及查询、计算长度、求流域面积等操作方法,因此可以抽象为河流类。

    (3)继承

    类对象可继承另类对象的特性和能力。子类继承父类的共性,继承不仅可以把父类的特征传递给中间类,还可以向下传递给中间类的子类。例如,建筑物类具有业主、地址.建筑时间等属性,以及显示、删除等(操作)方法,而酒店也属于建筑物,也具有以上属性和方法。因此,建筑物类是酒店类的父类酒店类是建筑物类的子类,若在建筑物类中定义了以上属性和方法,则酒店类会自动继承这些属性和方法,不需要重新定义。

    3. 面向对象数据模型的概念

    面向对象的数据模型即用面向对象的方法建立的数据模型,包括数据模式、建立在模式上的操作和建立在模式上的约束。

    (1)数据模式(数据结构):对象与类结构。

    (2)模式上的操作(数据操作):用对象与类中的方法来构建模式上的操作,这种操作语义范围比传统数据模型更具优势。例如,构建一个矩形类,其操作包括查询、增加、删除、修改,还可以包括放大、缩小、平移、拼接等。因此,面向对象的数据模型比传统的数据模型功能更强。

    (3)模式上的约束(数据约束):与关系模型等传统的数据模型相同,模式上的约束包括实体完整性、参照完整性和用户定义完整性。

    在面向对象的数据模型中,可以采用面向对象中的对象、方法和继承等概念来表示以上三个组成部分。例如,汽车类具有车窗、车门、方向盘、座椅等属性和行驶、刹车、停止、启动等方法,是小汽车类、公共汽车类、大卡车类的父类,其属性和方法均可以被小汽车类、公共汽车类、大卡车类所继承。

     

    四、时态GIS模型


    为了能够表示时空过程,近年来,作为GIS研究和应用的一个领域,时态GIS已经得到GIS界的广泛关注,人们再研究能支持时态GIS产品的时空数据模型。目前有时空数据的四种组织方法。

     参考:【空间数据库】时空数据库,时态数据模型详解

     

    五、三维空间数据模型


    地理空间在本质上是三维的。随着应用的深入和时间的需要,二维GIS逐渐暴露出缺点。现在GIS的研究人员和开发者们不得不重新思考地理空间的三维本质特征及在三维空间概念数据模型下的一系列处理方法。

    从三维GIS的角度出发考虑,地理空间应有如下不同于二维空间的三维特征:

    集合坐标上增加了第三维信息,即垂向坐标信息;

    向坐标信息的增加导致空间拓扑关系的复杂化,其中突出的一点是无论零维、一维、二维还是三维对象,在垂向上都具有复杂的空间拓扑关系;如果说二维拓扑关系是在平面上呈圆状发散伸展的话,那么三维拓扑关系则是在三维空间中呈球状向无穷维方向伸展;

    三维地理空间中的三维对象还具有丰富的内部信息(如属性分布、结构形式等)

    展开全文
  • 目录: 1.什么是数据库 2.数据库的种类 3.数据库的存储方式 4.关系数据库的优缺点及使用场景 ...数据库根据其数据的存储方式可以分为关系数据库和非关系数据库。常见的关系数据库有Oracle、D...
  • 关系数据库和非关系数据

    千次阅读 2019-06-10 15:01:48
    关系数据库最典型的数据结构是表,由二维表及其之间的联系所组成的一个数据组织 当今十大主流的关系数据库 Oracle,Microsoft SQL Server,MySQL,PostgreSQL,DB2, Microsoft Access, SQLite,Teradata,...
  • 关系数据库——数据库恢复

    千次阅读 2019-12-02 14:04:14
    如何利用这些冗余数据实施数据库恢复 数据转储 数据转储定义: 转储是指DBA将整个数据库复制到其他存储介质上保存起来的过程,备用的数据称为后备副本或后援副本 如何使用 数据库遭到破坏后可以将后备副本...
  • 关系数据库 一单项选择题 试题1 关系模型,一个码() 以上都不是 可以由多个任意属性组成 由一个或多个属性组成,其值能够唯一标识关系一个元组 至多由一个属性组成 [参考答案] 由一个或多个属性组成,其...
  • 关系数据库:指采用了关系模型来组织数据数据库关系模型指的就是二维表格模型,而一个关系数据库就是由二维表及其之间的联系所组成的一个数据组织。 关系模型常用的概念: 关系:一张二维表,每个关系...
  • 关系数据库设计理论

    千次阅读 2018-07-11 18:32:27
    关系数据库设计理论 设计一个好的关系数据库系统,关键是要设计一个好的数据库模式(数据库逻辑设计问题) 数据库逻辑设计主要解决的问题 关系数据库应该组织成几个关系模式 关系模式包括哪些属性 ...
  • 目录 关系数据库 关系数据库关系模型的常用概念 优点 ...非关系数据库 ...非关系数据库: ...关系模型指的就是二维表格模型,而一个关系数据库就是由二维表及其之间的联系所组成的一个数据组织。...
  • Mysql数据库中数据类型的长度是什么

    万次阅读 2017-07-30 16:18:09
    在mysql新建数据表的时候会有长度一说,其实用建表语句建数据表的时候也有涉及 例如: CREATE TABLE user( uid int(4), name varchar(255), passward varchar(20) birthday data ) 不知道你有没有注意这个...
  • 1. 存储方式 传统的关系数据库采用表格的...关系数据库按照结构化的方法存储数据, 每个数据表都必须对各个字段定义好(也就是先定义好表的结构),再根据表的结构存入数据,这样做的好处就是由于数据的形式和...
  • 关系数据库如何工作

    千次阅读 2021-05-15 10:54:02
    当涉及到关系数据库时,我不禁会以为有些东西丢失了。它们无处不在。有许多不同的数据库:从小型且有用的SQLite到功能强大的Teradata。但是,只有少数几篇文章解释了数据库的工作方式。您可以自己在Google上搜索...
  • 关系数据库基础

    千次阅读 2016-11-26 15:38:58
    数据库是按照数据结构来组织、存储和管理数据的仓库(图书馆),数据库技术产生于20世纪60年代末70年代初,其发展阶段为:人工管理阶段,文件系统阶段,数据库系统阶段。 人工管理阶段 20世纪50年代中期之前,计算机...
  • Database:Database数据库的简介、类型及其区别(关系数据库VS非关系型数据库)、案例应用之详细攻略 目录 Database数据库的简介 1、数据库的发展历史:80年代以来的关系型数据库→基于分布式技术云计算和...
  • (一个值的集合怎么理解呢,比如在C语言,char类型数据范围是:-127~128,。而一组操作可以理解为类型所支持的操作方式,比如int和char类型支持+、-、*、/、%这5种操作。) 二、数据项 概念:数据项可以是字母、...
  • 传统的关系数据库RDB遵循一致的关系型模型,其中的数据(记录)以表格的方式存储,并且能用统一的结构化查询语言(Structual Query Language,SQL)进行数据查询,因此它的应用常被称为联机交易处理(OLTP),其...
  • 关系数据库与非关系数据库

    万次阅读 2018-04-18 15:45:07
    当前主流的关系数据库有Oracle、DB2、Microsoft SQL Server、... 性能NoSQL是基于键值对的,可以想象成表的主键和值的对应关系,而且不需要经过SQL层的解析,所以性能非常高。 2. 可扩展性同样也是因为基...
  • 1. 关系数据库  关系型数据库模型是把复杂的数据结构归结为简单的二元关系(即二维表格形式)。 2. 非关系数据库  非关系型数据库也被称为NoSQL数据库,NOSQL的本意是”Not Olnly SQL”。指的是非关系型数据库...
  • 数据库,表空间,及数据文件关系密切,但同时又有很多区别: 一个Oracle数据库是由一个或多个表空间(tablespace)的逻辑存储单位构成的,这些表空间共同来存储数据库数据 Oracle数据库的每个表空间由一个或多个...
  • 数据仓库和传统数据库关系

    千次阅读 2017-02-07 13:14:50
    数据仓库
  • 常见的非关系数据库(nosql数据库)

    千次阅读 2017-07-11 15:27:00
    常见的非关系数据库(nosql数据库)
  • 关系数据库的特点

    千次阅读 2013-08-21 17:11:24
    关系数据库的特点 数据库管理系统将具有一定结构的数据组成一个集合,它主要具有以下几个特点: 1. 数据的结构化 数据库数据并不是杂乱无章、毫不相干的,它们具有一定的组织结构,属于同一集合的...
  • 关系数据库与NOSQL数据库的区别

    千次阅读 2014-01-02 11:12:24
    关系数据库与NOSQL数据库的区别
  • 数据存储知识(1)--关系数据库

    千次阅读 2016-05-21 09:31:40
    本文转载自:http://www.cnblogs.com/chay1227/archive/2013/03/17/2964020.html关系数据库关系数据库把所有的数据都通过行和列的二元表现形式表示出来。关系数据库的优势:1.保持数据的一致性(事务处理)2....

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 176,661
精华内容 70,664
关键字:

关系数据库中的数据单位