精华内容
下载资源
问答
  • 数据库 - 关系数据库

    千次阅读 2015-05-03 13:13:04
    关系数据库提出关系模型的是美国IBM公司的E.F.Codd (Edgar Frank Codd,1923-2003) , “关系数据库之父” 1970年提出关系数据模型 E.F.Codd, “A Relational Model of Data for Large Shared Data Banks”, ...

    关系数据库

    提出关系模型的是美国IBM公司的E.F.Codd (Edgar Frank Codd,19232003) , “关系数据库之父”
    1970年提出关系数据模型
    E.F.Codd, “A Relational Model of Data for Large 
    Shared Data Banks”, 《Communication of the 
    ACM》,1970
    E.F.Codd 1923年出生在英格兰多塞特郡波特兰市的一个大家庭中。他曾经就读于牛津大学,主修数学,获得学士与硕士学位。第二次世界大战期间曾在皇家空军服役。第二次世界大战后,动身前往美国成为IBM的一名程序员。
    在40岁的时候,重返校园,在密歇根大学主修计算机与通信专业,于1965年获得博士学位。
    因为在数据库管理系统的理论和实践方面的杰出贡献于1981年获图灵奖。
     1984年从IBM退休, 于2003年谢世。
    

    关系

    单一的数据结构—-关系
    现实世界的实体以及实体间的各种联系均用关系来表示
    逻辑结构—-二维表
    从用户角度,关系模型中数据的逻辑结构是一张二维表
    关系模型建立在集合代数的基础上,这里从集合论的角度给出关系数据结构的形式化定义

    ⒈ 域(Domain)

    域是一组具有相同数据类型的值的集合。例:
    整数
    实数
    介于某个取值范围的整数
    长度小于25字节的字符串集合
    {‘男’,‘女’}
    ……………..
    
    1. 笛卡尔积(Cartesian Product)
    笛卡尔积
       给定一组域D1,D2,…,Dn,这些域中可以有相同的。
        D1,D2,…,Dn的笛卡尔积为:
        D1×D2×…×Dn =
                 {(d1,d2,…,dn)|diDi,i=12,…,n}
    所有域的所有取值的一个组合
     元组(Tuple)
    笛卡尔积中每一个元素(d1,d2,…,dn)叫作一个n元组(n-tuple)或简称元组(Tuple)
    (张清玫,计算机专业,李勇)、(张清玫,计算机专业,刘晨)等都是元组 
    
    分量(Component)
    笛卡尔积元素(d1,d2,…,dn)中的每一个值di叫作一个分量
    张清玫、计算机专业、李勇、刘晨等都是分量 
    基数(Cardinal number)
    
    笛卡尔积的表示方法
    笛卡尔积可表示为一个二维表
    表中的每行对应一个元组,表中的每列对应一个域
    
    1. 关系(Relation)
    1) 关系
    D1×D2×…×Dn的子集叫作在域D1,D2,…,Dn上的
    关系,表示为
    
             R(D1,D2,…,Dn)
    
    R:关系名
    n:关系的元,或目或度(Degree)
    2) 元组
    关系中的每个元素是关系中的元组,通常用t表示。
    3) 单元关系与二元关系
    当n=1时,称该关系为单元关系(Unary relation)
                                   或一元关系                             
    当n=2时,称该关系为二元关系(Binary relation)
    4) 关系的表示
    关系也是一个二维表,表的每行对应一个元组,表的每
    列对应一个域
    
    5)属性
    关系中不同列可以对应相同的域
    为了加以区分,必须对每列起一个名字,称为属性(Attribute)
    n目(元)关系必有n个属性
    6) 码
    候选码(Candidate key)
        若关系中的某一属性组的值能唯一地标识一个元组,则称该属性组为候选码 (教材上给出的此定义是否严谨?)
        简单的情况:候选码只包含一个属性
    全码(All-key)
        最极端的情况:关系模式的所有属性组是这个关系模式的候选码,称为全码(All-key6) 码
    候选码(Candidate key)
        若关系中的某一属性组的值能唯一地标识一个元组,则称该属性组为候选码 (教材上给出的此定义是否严谨?)
        简单的情况:候选码只包含一个属性
    全码(All-key)
        最极端的情况:关系模式的所有属性组是这个关系模式的候选码,称为全码(All-key)
    D1,D2,…,Dn的笛卡尔积的某个子集才有实际含义
    例:表2.1 的笛卡尔积没有实际意义
          取出有实际意义的元组来构造关系
    关系:SAP(SUPERVISOR,SPECIALITY,POSTGRADUATE)
    假设:导师与专业:1:1,   导师与研究生:1:n
    主码:POSTGRADUATE(假设研究生不会重名) 
          SAP关系可以包含三个元组
         { (张清玫,计算机专业,李勇),
        (张清玫,计算机专业,刘晨),
        (刘逸,信息专业,王敏)  }
    7) 三类关系
    基本关系(基本表或基表)
    实际存在的表,是实际存储数据的逻辑表示
    查询表
    查询结果对应的表
    视图表
    由基本表或其他视图表导出的表,是虚表,不对
    应实际存储的数据
    8)基本关系的性质
    ① 列是同质的(Homogeneous)
    ② 不同的列可出自同一个域
    其中的每一列称为一个属性
    不同的属性要给予不同的属性名
    ③ 列的顺序无所谓,列的次序可以任意交换
    ④ 任意两个元组的候选码不能相同
    ⑤ 行的顺序无所谓,行的次序可以任意交换
    

    关系模式

    关系模式(Relation Schema)是型
    关系是值
    关系模式是对关系的描述
    元组集合的结构
    属性构成
    属性来自的域
    属性与域之间的映象关系
    元组语义以及完整性约束条件
    属性间的数据依赖关系集合

    关系模式可以形式化地表示为:
    R(U,D,DOM,F)
    R 关系名
    U 组成该关系的属性名集合
    D 属性组U中属性所来自的域
    DOM 属性向域的映象集合
    F 属性间的数据依赖关系集合
    例:
    导师和研究生出自同一个域——人,
    取不同的属性名,并在模式中定义属性向域
    的映象,即说明它们分别出自哪个域:

       DOM(SUPERVISOR-PERSON)
    = DOM(POSTGRADUATE-PERSON)
    =PERSON

    关系模式通常可以简记为
    R (U) 或 R (A1,A2,…,An)
    R: 关系名
    A1,A2,…,An : 属性名
    注:域名及属性向域的映象常常直接说明为
    属性的类型、长度

    关系数据结构

    关系数据库的型: 关系数据库模式
    对关系数据库的描述。
    关系数据库模式包括
    若干域的定义
    在这些域上定义的若干关系模式
    关系数据库的值: 关系模式在某一时刻对应的关系的集合,简称为关系数据库
    常用的关系操作
    查询:选择、投影、连接、除、并、交、差、笛卡尔积
    数据更新:插入、删除、修改
    查询的表达能力是其中最主要的部分
    选择、投影、并、差、笛卡尔积是5种基本操作,其他操作可以由基本操作导出
    关系操作的特点
    集合操作方式:操作的对象和结果都是集合,一次一集合的方式
    关系代数语言
    用对关系的运算来表达查询要求
    代表:ISBL
    关系演算语言:用谓词来表达查询要求
    元组关系演算语言
    谓词变元的基本对象是元组变量
    代表:APLHA, QUEL
    域关系演算语言
    谓词变元的基本对象是域变量
    代表:QBE
    具有关系代数和关系演算双重特点的语言
    代表:SQL(Structured Query Language)

    关系的三类完整性约束

    实体完整性和参照完整性:
    关系模型必须满足的完整性约束条件
    称为关系的两个不变性,应该由关系系统自动支持
    用户定义的完整性:
    应用领域需要遵循的约束条件,体现了具体领域中的语义约束

    实体完整性

    规则2.1 实体完整性规则(Entity Integrity)
    若属性A是基本关系R的主属性,则属性A不能取空值
    例:
    SAP(SUPERVISOR,SPECIALITY,POSTGRADUATE)
    POSTGRADUATE:
    主码(假设研究生不会重名)
    不能取空值

    实体完整性规则的说明
    (1)实体完整性规则是针对基本关系而言的。一个基本表通常对应现实 世界的一个实体集。
    (2) 现实世界中的实体是可区分的,即它们具有某种唯一性标识。
    (3) 关系模型中以主码作为唯一性标识。
    (4) 主码中的属性即主属性不能取空值。

    参照完整性

    例2 学生、课程、学生与课程之间的多对多联系
    学生(学号,姓名,性别,专业号,年龄)
    课程(课程号,课程名,学分)
    选修(学号,课程号,成绩)
    设F是基本关系R的一个或一组属性,但不是关系R的码。如果F与基本关系S的主码Ks相对应,则称F是基本关系R的外码
    基本关系R称为参照关系(Referencing Relation)
    基本关系S称为被参照关系(Referenced Relation)
    或目标关系(Target Relation)
    参照完整性规则
    若属性(或属性组)F是基本关系R的外码它与基本关系S的主码Ks相对应(基本关系R和S不一定是不同的关系),则对于R中每个元组在F上的值必须为:
    或者取空值(F的每个属性值均为空值)
    或者等于S中某个元组的主码值

    
    [例1]:
    学生关系中每个元组的“专业号”属性只取两类值:
    (1)空值,表示尚未给该学生分配专业
    (2)非空值,这时该值必须是专业关系中某个元组的“专业号”值,表示该学生不可能分配一个不存在的专业
    
    〔例2〕 :
    选修(学号,课程号,成绩)
    “学号”和“课程号”可能的取值 :
     (1)选修关系中的主属性,不能取空值
     (2)只能取相应被参照关系中已经存在的主码值
    
    〔例3〕:
    学生(学号,姓名,性别,专业号,年龄,班长)
    “班长”属性值可以取两类值:
    (1)空值,表示该学生所在班级尚未选出班长
    (2)非空值,该值必须是本关系中某个元组的学号值
    

    用户定义的完整性

    针对某一具体关系数据库的约束条件,反映某一具体应用所涉及的数据必须满足的语义要求
    关系模型应提供定义和检验这类完整性的机制,以便用统一的系统的方法处理它们,而不要由应用程序承担这一功能

    例:
         课程(课程号,课程名,学分)
    “课程号”属性必须取唯一值
    非主属性“课程名”也不能取空值
    “学分”属性只能取值{1,2,3,4}
    
    展开全文
  • 关系数据库中的几个范式

    千次阅读 2013-11-21 12:14:47
    目前关系数据库有六种范式...在任何一个关系数据库中,第一范式(1NF)是对关系模式的基本要求,不满足第一范式(1NF)的数据库就不是关系数据库。 所谓第一范式(1NF)是指数据库表的每一都是不可分割的基本数据

     

    目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴德斯科范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)。

     

     

    第一范式(1NF)



    在任何一个关系数据库中,第一范式(1NF)是对关系模式的基本要求,不满足第一范式(1NF)的数据库就不是关系数据库。

    所谓第一范式(1NF)是指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。如果出现重复的属性,就可能需要定义一个新的实体,新的实体由重复的属性构成,新实体与原实体之间为一对多关系。在第一范式(1NF)中表的每一行只包含一个实例的信息。

     

    简而言之,第一范式就是无重复的列。

     

     

    第二范式(2NF)



    第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF)。第二范式(2NF)要求数据库表中的每个实例或行必须可以被惟一地区分。为实现区分通常需要为表加上一个列,以存储各个实例的惟一标识。

     

    简而言之,第二范式就是非主属性非部分依赖于主关键字。即(消除部分依赖)

     

     

    第三范式(3NF)



    满足第三范式(3NF)必须先满足第二范式(2NF)。简而言之,第三范式(3NF)要求一个数据库表中不包含已在其它表中已包含的非主关键字信息。

     

    简而言之,第三范式就是属性不依赖于其它非主属性。即(消除部分传递依赖)

     

     

    BC范式(BCNF):

     
    无论2NF还是3NF都没有涉及主属性间的函数依赖,所以有时仍会引起一些问题。
    定义:如果关系模式属于1NF,且每一个函数依赖关系中的决定因素都包含码,则关系满足BC范式。主属性对不含他的码完全函数依赖,没有属性完全函数依赖于一组非主属性。
     

    巴德斯科范式(BCNF)是第三范式(3NF)的一个子集,即满足巴德斯科范式(BCNF)必须满足第三范式(3NF)。通常情况下,巴德斯科范式被认为没有新的设计规范加入,只是对第二范式与第三范式中设计规范要求更强,因而被认为是修正第三范式,也就是说,它事实上是对第三范式的修正,使数据库冗余度更小。这也是BCNF不被称为第四范式的原因。

     

     

    第四范式(4NF)


    在BCNF基础上,简单的说就是消除了多值依赖。
    语言很难表达,数学公式又不好容易理解,看一个例子更清楚些而且个人认为知道怎么做最重要,考试是其次。
    如果只考虑多值依赖,则属于4NF的关系模式规范化已经是最高的了。

     

     

    参考资料:      关系数据库中的范式     http://www.studyofnet.com/news/221.html

     

    展开全文
  • 当前数据库分为关系数据库和非关系数据库 关系数据库 关系数据库:指采用了关系模型来组织数据的数据库关系模型指的就是二维表格模型...属性:二维表的一,在数据库中称为字段 域:属性的取值范...

    当前数据库分为关系型数据库和非关系型数据库

    • 关系型数据库

      关系型数据库:指采用了关系模型来组织数据的数据库。
      关系模型指的就是二维表格模型,而一个关系型数据库就是由二维表及其之间的联系所组成的一个数据组织。

    • 关系模型中常用的概念:

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

    • 关系型数据库的优点:

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

    • 关系型数据库存在的问题

      1.网站的用户并发性非常高,往往达到每秒上万次读写请求,对于传统关系型数据库来说,硬盘I/O是一个很大的瓶颈
      2.网站每天产生的数据量是巨大的,对于关系型数据库来说,在一张包含海量数据的表中查询,效率是非常低的
      3.在基于web的结构当中,数据库是最难进行横向扩展的,当一个应用系统的用户量和访问量与日俱增的时候,数据库却没有办法像web server和app server那样简单的通过添加更多的硬件和服务节点来扩展性能和负载能力。当需要对数据库系统进行升级和扩展时,往往需要停机维护和数据迁移。
      4.性能欠佳:在关系型数据库中,导致性能欠佳的最主要原因是多表的关联查询,以及复杂的数据分析类型的复杂SQL报表查询。为了保证数据库的ACID特性,必须尽量按照其要求的范式进行设计,关系型数据库中的表都是存储一个格式化的数据结构。

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

    当今十大主流的关系型数据库

    Oracle,Microsoft SQL Server,MySQL,PostgreSQL,DB2,
    Microsoft Access, SQLite,Teradata,MariaDB(MySQL的一个分支),SAP

    非关系型数据库

    非关系型数据库:指非关系型的,分布式的,且一般不保证遵循ACID原则的数据存储系统。

    非关系型数据库结构

    非关系型数据库以键值对存储,且结构不固定,每一个元组可以有不一样的字段,每个元组可以根据需要增加一些自己的键值对,不局限于固定的结构,可以减少一些时间和空间的开销。

    优点:
    1.用户可以根据需要去添加自己需要的字段,为了获取用户的不同信息,不像关系型数据库中,要对多表进行关联查询。仅需要根据id取出相应的value就可以完成查询。
    2.适用于SNS(Social Networking Services)中,例如facebook,微博。系统的升级,功能的增加,往往意味着数据结构巨大变动,这一点关系型数据库难以应付,需要新的结构化数据存储。由于不可能用一种数据结构化存储应付所有的新的需求,因此,非关系型数据库严格上不是一种数据库,应该是一种数据结构化存储方法的集合。

    不足
    只适合存储一些较为简单的数据,对于需要进行较复杂查询的数据,关系型数据库显的更为合适。不适合持久存储海量数据

    非关系型数据库的分类

    非关系型数据库都是针对某些特定的应用需求出现的,因此,对于该类应用,具有极高的性能。依据结构化方法以及应用场合的不同,主要分为以下几类:

    面向高性能并发读写的key-value数据库
    key-value数据库的主要特点是具有极高的并发读写性能
    Key-value数据库是一种以键值对存储数据的一种数据库,类似Java中的map。可以将整个数据库理解为一个大的map,每个键都会对应一个唯一的值。
    主流代表为Redis, Amazon DynamoDB, Memcached,
    Microsoft Azure Cosmos DB和Hazelcast

    面向海量数据访问的面向文档数据库
    这类数据库的主要特点是在海量的数据中可以快速的查询数据
    文档存储通常使用内部表示法,可以直接在应用程序中处理,主要是JSON。JSON文档也可以作为纯文本存储在键值存储或关系数据库系统中。
    主流代表为MongoDB,Amazon DynamoDB,Couchbase,
    Microsoft Azure Cosmos DB和CouchDB

    面向搜索数据内容的搜索引擎
    搜索引擎是专门用于搜索数据内容的NoSQL数据库管理系统。
    主要是用于对海量数据进行近实时的处理和分析处理,可用于机器学习和数据挖掘
    主流代表为Elasticsearch,Splunk,Solr,MarkLogic和Sphinx

    面向可扩展性的分布式数据库
    这类数据库的主要特点是具有很强的可拓展性
    普通的关系型数据库都是以行为单位来存储数据的,擅长以行为单位的读入处理,比如特定条件数据的获取。因此,关系型数据库也被成为面向行的数据库。相反,面向列的数据库是以列为单位来存储数据的,擅长以列为单位读入数据。
    这类数据库想解决的问题就是传统数据库存在可扩展性上的缺陷,这类数据库可以适应数据量的增加以及数据结构的变化,将数据存储在记录中,能够容纳大量动态列。由于列名和记录键不是固定的,并且由于记录可能有数十亿列,因此可扩展性存储可以看作是二维键值存储。
    主流代表为Cassandra,HBase,Microsoft Azure Cosmos DB,
    Datastax Enterprise和Accumulo

    CAP理论

    NoSQL的基本需求就是支持分布式存储,严格一致性与可用性需要互相取舍
    CAP理论:一个分布式系统不可能同时满足C(一致性)、A(可用性)、P(分区容错性)三个基本需求,并且最多只能满足其中的两项。对于一个分布式系统来说,分区容错是基本需求,否则不能称之为分布式系统,因此需要在C和A之间寻求平衡
    C(Consistency)一致性
    一致性是指更新操作成功并返回客户端完成后,所有节点在同一时间的数据完全一致。与ACID的C完全不同
    A(Availability)可用性
    可用性是指服务一直可用,而且是正常响应时间。
    P(Partition tolerance)分区容错性
    分区容错性是指分布式系统在遇到某节点或网络分区故障的时候,仍然能够对外提供满足一致性和可用性的服务。

    关系型与非关系型数据库的比较

    1.成本:Nosql数据库简单易部署,基本都是开源软件,不需要像使用Oracle那样花费大量成本购买使用,相比关系型数据库价格便宜。
    2.查询速度:Nosql数据库将数据存储于缓存之中,而且不需要经过SQL层的解析,关系型数据库将数据存储在硬盘中,自然查询速度远不及Nosql数据库。
    3.存储数据的格式:Nosql的存储格式是key,value形式、文档形式、图片形式等等,所以可以存储基础类型以及对象或者是集合等各种格式,而数据库则只支持基础类型。
    4.扩展性:关系型数据库有类似join这样的多表查询机制的限制导致扩展很艰难。Nosql基于键值对,数据之间没有耦合性,所以非常容易水平扩展。
    5.持久存储:Nosql不使用于持久存储,海量数据的持久存储,还是需要关系型数据库
    6.数据一致性:非关系型数据库一般强调的是数据最终一致性,不像关系型数据库一样强调数据的强一致性,从非关系型数据库中读到的有可能还是处于一个中间态的数据,
    Nosql不提供对事务的处理。

    最近的数据库排名
    网站地址:https://db-engines.com/en/ranking
    在这里插入图片描述
    可以发现现在主流的还是关系型数据库,非关系型数据库中Redis和MongoDB最受欢迎

    展开全文
  • 数据库通常分为层次式数据库、网络式数据库关系数据库三种。而不同的数据库是按不同的数据结构来联系和组织的。  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

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

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







    展开全文
  • Oracle 关系数据库

    2016-06-05 22:38:45
    一、 Oracle 关系数据库关系模型是关系数据库的基础,它利用关系来描述显示世界。以用户的观点来看,一个关系就是一张二维表。 关系数据模型是由关系数据结构、关系操作和关系的完整性...表列称为属性,列名即属
  • 数据库原理与应用(5)——关系、关系模式、关系数据库关系数据库模式 一、关系的形式化定义和概念 1、关系上域的定义 域(Domain):一组具有相同数据类型的值的集合,又称为值域(用D表示) 整数、实数、和字符...
  • 关系数据库

    千次阅读 2013-06-19 17:40:10
    关系数据库 科技名词定义 中文名称:关系数据库英文名称:relational database 定义:按照关系模型建立的数据库。 应用学科:通信科技(一级学科);服务与应用(二级学科) 以上内容由全国科学技术名词...
  • 当前数据库分为关系数据库和非关系数据库 关系数据库 关系数据库:指采用了关系模型来组织数据的数据库关系模型指的就是二维表格...属性:二维表的一,在数据库中称为字段 域:属性的取值范围...
  • 关系数据库系统

    2018-11-17 16:30:30
    关系数据库系统概述 关系数据库系统的发展历史 关系数据模型 数据模型 = 数据结构 + 数据操作 + 完整性约束 数据结构(层次,网状,关系,对象) 数据操作(DDL,DML) 完整性约束(实体完整性/主键存在,参照...
  • 数据库应用程序开发入门篇—— 关系数据库中的基本概念 写在前面:关系数据库是目前应用最广泛的的数据库,了解关系型数据库的基本概念,有助于应用开发。 1.关系数据库中基本概念 关系数据库,是建立在关系模型...
  • 关系数据库与NoSQL数据库简述

    千次阅读 2017-09-21 16:10:44
    关系:可以理解为一张二维表,每个关系都具有一个关系名,就是通常说的表名元组:可以理解为二维表的一行,在数据库中经常被称为记录属性:可以理解为二维表的一,在数据库中经常被称为字段域:属性的取值范围...
  • 1.什么是数据库: 存储电子文件的处所,用户可以对文件的数据增删改查等操作。 2.数据库的种类: 数据库根据其数据的存储方式可以分为关系型...这一系列的行和称为表,一组表组成了数据库。 2)关系:可以理
  • 数据库原理—关系数据库

    千次阅读 2020-09-05 19:58:37
    1、关系数据库结构 (1)域:一组具有相同数据类型的值的集合(如整数、实数、指定长度的字符串集合) (2)笛卡尔积运算:假设两个集合D1和D2,其中D1={2,4},D2={1,3,5},这两个集合的笛卡尔积D1×D2={(2,1)...
  • 在 SQL 数据库中,生成(Generated Column)是指由表其他字段计算得到的,因此也称为计算(Computed Column)。 本文介绍各种主流数据库对于生成/计算的实现,包括 Oracle、MySQL、SQL Server、...
  • 关系数据库 一、关系操作 1.基本关系操作: 关系模型常用的关系操作包括查询(query) 操作和插入(insert)、 删除(delete)、修改(update) 操作两大部分。 关系的查询表达能力很强,是关系操作最主要的部分。...
  • 关系数据库关系数据模型关系是一个数学概念。 当把关系的概念引入到数据库系统作为数据模型的数据结构时,既有所限定和也有所扩充。 关系的数学定义例: 课程={离散,C语言…..},学生={张三,李四…..} 笛卡儿积...
  • 数据库(DataBase:DB):数据库是按照数据结构来组织、存储和管理数据的仓库。---->存储和管理数据的仓库. 为什么要使用数据库不用XML或者文件呢? 数据库管理系统(Database Management System:DBMS):是专门用于...
  • 关系数据库设计核心

    千次阅读 2020-04-10 16:32:32
    1、设计一个合适的关系数据库系统的关键是关系数据库模式的设计,即应构造几个关系模式, 每个模式有哪些属性,怎样将这些相互关联的关系模式组建成一个适合的关系模型,关系数据库 的设计必须在关系数据库设计理论...
  • 关系数据库

    千次阅读 2013-07-24 21:10:58
    关系数据库中数据以行和的形式存储,以便于用户理解,这一系列的行和称为表,一组表便组成了数据库。在关系数据库中,各数据项之间用关系来组织,关系是表之间的一种连接,通过关系可以更灵活地表示和操纵...
  • 关系数据库模型设计

    千次阅读 2020-05-19 17:13:17
    本文从现实世界-概念世界(信息世界)-机器世界(数据世界)逐级抽象,旨在以浅显易懂的语言描述关系数据库应该如何建模,最后用简单名了的描述给出关系模型的设计范式的含义。
  • 关系模型的常用概念 优点 不足 非关系数据库关系数据库: 非关系数据库结构 优点 不足 分类 CAP 理论 关系型与非关系数据库的比较 最近的数据库排名 关系数据库 关系数据库: 指采用...
  • 关系数据库,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库的数据。 关系模型 现实世界的各种实体以及实体之间的各种联系均用关系模型来表示。关系模型由关系数据结构、关系操作...
  • 关系数据库,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库的数据。简单说,关系型数据库是由多张能互相联接的二维行列表格组成的数据库。 关系模型就是指二维表格模型,因而一个...
  • 在用户看来,关系模型数据的逻辑结构是一张扁平的二维表。 1.1域 域是一组具有相同数据类型值的集合。 1.2笛卡儿积 笛卡儿积是域上的一种集合运算。 定义:给定一组域D1,D2,...,Dn,允许其中某些域是...
  • 关系数据库如何工作

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

    千次阅读 2018-03-19 17:31:28
    定义 式存储(Column-based)是相对于传统关系数据库的行式存储(Row-based)来说的。简单来说两者的区别就是如何组织表。 将表放入存储系统有两种方法,而我们绝大部分是采用行存储的。行存储法是将各行放入...
  • 1. 关系数据库  关系型数据库模型是把复杂的数据结构归结为简单的二元关系(即二维表格形式)。 2. 非关系数据库  非关系型数据库也被称为NoSQL数据库,NOSQL的本意是”Not Olnly SQL”。指的是非关系型数据库...
  • Database:Database数据库的简介、类型及其区别(关系数据库VS非关系型数据库)、案例应用之详细攻略 目录 Database数据库的简介 1、数据库的发展历史:80年代以来的关系型数据库→基于分布式技术云计算和...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 132,864
精华内容 53,145
关键字:

关系数据库中的列称为