精华内容
下载资源
问答
  • 数据库通常分为层次式数据库、网络式数据库关系数据库三种。而不同的数据库是按不同的数据结构来联系和组织的。  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

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

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







    展开全文
  • 关系数据库系统

    2018-11-17 16:30:30
    关系数据库系统概述 关系数据库系统的发展历史 关系数据模型 数据模型 = 数据结构 + 数据操作 + 完整性约束 数据结构(层次,网状,关系,对象) 数据操作(DDL,DML) 完整性约束(实体完整性/主键存在,参照...

    关系数据库系统概述

    关系数据库系统的发展历史

    关系数据模型

    数据模型 = 数据结构 + 数据操作 + 完整性约束

    1. 数据结构(层次,网状,关系,对象)
    2. 数据操作(DDL,DML)
    3. 完整性约束(实体完整性/主键存在,参照完整性/外键引用存在,用户定义完整性)

    关系数据模型 = 关系数据结构 + 数据操作 + 完整性约束

    关系模型的数据结构

    关系模型的数据结构和基本术语

    关系模型的数据结构用单一的二维表结构来表示实体以及实体间的联系。

    关系:一个关系对应一个二维表,二维表名就是关系名。

    属性:在二维表中的列(字段),称为属性。属性的个数称为关系的元数。列的值称为属性值。属性值的取值范围称为值域

    关系模式:在二维表中的行定义(记录的型),即对关系的描述称为关系模式。

    元组:在二维表中的一行(记录的值),称为一个元组。关系模式和元组的集合统称关系

    候选码(候选键):如果在一个关系中,存在多个属性(或属性组合)都能用来唯一标识该关系的元组,这些属性(或属性组合)都称为该关系的候选码或候选键。

    主码(主键):在一个关系的若干个候选码中指定一个用来唯一标识该关系的元组,这个被指定的候选码称为该关系的主码或者主键。

    主属性和非主属性:关系中博阿寒在任何一个候选码中的属性称为主属性或者码属性,不包含在任何一个候选码中的属性称之为非主属性或者非码属性。

    外码(外键):当关系中的某个属性(或属性组)虽然不是该关系的主码或者只是主码的一部分,但却是另一个关系的主码时,称该属性(或属性组)为这个关系的外码。

    参照关系和被参照关系:参照关系也称为从关系,被参照关系也称主关系,它们是指以外码相关联的两个关系。以外码为主码的关系称为参照关系,外码所在的关系称为被参照关系或目标关系。

    关系形式定义和关系数据库对关系的限定

    关系数据库对关系的限定:

    1. 每个属性是不可分解的
    2. 每个关系模式当中,属性的数据类型以及属性的个数是固定的,并且每个属性必须命名在同一个关系模式中,属性名必须是不同的。
    3. 每个关系仅仅有一种记录类型,即一种关系模式
    4. 在关系中,元组的顺序(即行序)是无关紧要的。
    5. 在关系中,属性的顺序可任意交换,交换时连同属性名也一起交换才行,否则顺序是紧要的。
    6. 同一个关系中不允许出现完全相同的元组。
    7. 综上可知,外键是指关系中的某个属性(或属性组)虽然不是关系的主码或只是主码的一部分,但却是另一个关系的主码。

     

    关系模型的完整性约束

    数据库数据完整性的分类

    1. 实体完整性:主键存在
    2. 参照完整性:外键引用存在
    3. 用户定义完整性

    实体完整性规则

    参照完整性规则

    用户定义的完整性

    关系代数

    关系的数据操纵语言按照表达式查询方式可以分为两大类:关系代数和关系演算。

    关系演算是以数理逻辑中的谓词演算为基础的。

    关系代数是关系操纵语言的一种传统表示方式,它是以集合代数发展起来的,但它 的运算对象和结果均为关系。关系代数也是一种抽象的查询语言,它通过对关系的运算来表达查询。

    关系代数的运算分为两类:传统的集合运算和专门的关系运算。

    传统的集合运算

    传统的集合运算时二目运算,包括并、交、差、广义笛卡尔积4种运算。

    R\cup S = \{ t | t\in R\vee t\in S\}

    R - S = \{ t | t\in R\wedge t\notin S\}

    R\cap S = \{ t | t\in R\wedge t\in S\}

    广义笛卡尔积R\times S = \{t|t=<t_r,t_s> \wedge t_r\in R \wedge t_s \in S\}

    专门的关系运算

    专门的关系运算主要包括:对单个关系进行垂直分解(投影操作)或水平分解(选择操作)和对多个关系的联合(连接操作)等。

    选择:又称为限制,它是在关系R种选择满足给定条件的诸元组,记作\sigma_F(R)=\{t|t\in R \wedge F(t)=true)\}。选择运算的结果是从行的角度进行的运算,投影结果元数不变,元组数可能有变化。

    投影:对关系R的投影操作,实际上是从R种选择出若干属性列组成新的关系,记作\pi_A(R) = \{t[A]|t \in R\}。投影运算的结果是从列的角度进行的运算,投影结果元数可能变化,元组数不变。

    连接:也称为\theta连接,它是从连个关系的笛卡尔积种选取它们的属性间满足一定条件的元组。\theta连接中最常用的连接有两种:等值连接和自然连接。

    展开全文
  • 关系数据库设计理论

    千次阅读 2018-07-11 18:32:27
    关系数据库设计理论 设计一个好的关系数据库系统,关键是要设计一个好的数据库模式(数据库逻辑设计问题) 数据库逻辑设计主要解决的问题 关系数据库应该组织成几个关系模式 关系模式中包括哪些属性 ...

    关系数据库设计理论

    设计一个好的关系数据库系统,关键是要设计一个好的数据库模式(数据库逻辑设计问题)

    数据库逻辑设计主要解决的问题

    关系数据库应该组织成几个关系模式

    关系模式中包括哪些属性

    “不好”的数据库设计

    举例:为学校设计一个关系数据库

    关系模式: UN(Sno,Cno,G,Sdept,MN)

    • Sno:描述学生
    • Sdept:描述系名
    • MN:描述系主任
    • Cno:描述课程
    • G:描述学习成绩
    • 根据对现实世界的分析,可得出:Sno,Cno是码
    • 按照关系模式UN装入部分数据

    对数据库操作时,会出现以下问题

      1. 数据冗余(系主任名的存储次数)
        • 数据重复存储:浪费存储空间,数据库维护困难(更新异常)
      1. 插入异常(一个系刚成立)
        • 主码为空的记录不能存在与数据库,导致不能进行插入操作
      1. 删除异常(一个系的学生全部毕业)
        • 删除操作后,一些相关信息无法保存在数据库中

    要消除以上的“弊病”,把上面的关系数据库模式分解为三个关系模式

    • S(Sno,Sdept)
    • SG(Sno,Cno,G)
    • Dept(Sdept,MN)

    函数依赖

    类似于变量之间的单值函数关系

    Y=F(X),其中自变量X的值,决定一个唯一的函数值Y

    在一个关系模式里的属性,由于它在不同元组里属性值可能不同,由此可以把关系中的属性看作变量

    一个属性与另一个属性在取值上可能存在制约关系

    函数依赖就是属性间的逻辑依赖关系

    定义1 设R(U)是一个关系模式,U是R的属性集合,X和Y是U的子集.对于R(U)的任何一个可能的关系r,如果r中不存在两个元组,它们在X上的属性值相同,而在Y上的属性值不同,则称X函数决定Y,或Y函数依赖于X,记作:X Y.

    X通常称为“决定因素”

    几点说明

      1. 函数依赖是语义范畴的概念.它反映了一种语义完整性约束,只能根据语义来确定一个函数依赖.
      1. 函数依赖是指关系R模式的所有关系元组均应满足的约束条件,而不是关系模式中的某个或某些元组满足的约束条件
      1. 函数依赖与属性间的联系类型有关
        • (1)若属性X和Y之间有“一对一”的联系,
        • (2)若属性X和Y之间有“多对一”的联系,
        • (3)若属性X和Y之间有“多对多”的联系,
      1. 如果X Y,并且Y不是X的子集,则称X Y是非平凡的函数依赖;如果Y是X的子集,则称X Y是平凡的函数依赖;

    完全函数依赖与部分函数依赖

    完全函数依赖

    部分函数依赖

    码的形式定义

    候选码的两个性质

      1. 标识的唯一性: 对于R(U)中的每一元组,K的值确定后,该元组就相应确定了.
      1. 无冗余性: K是属性组的情况下,K的任何一部分都不能唯一标识该元组(定义中的完全函数依赖的意义)

    规范化

    简介

    • 用几个简单的关系去取代原来结构复杂的关系的过程叫做关系规范化.
    • 规范化理论是研究如何把一个不好的关系模式转化为好的关系模式的理论
    • 规范化理论是E.E.Codd在1971年首先提出的
    • 规范化理论是数据库设计过程中的一个非常有用的辅助工具

    范式

    • 简介
      • 规范化理论是围绕着范式建立的.
      • 满足不同程度要求的约束集则称为不同的范式.
      • 如果一个关系满足某个指定的约束集,则称它属于某个特定的范式.
      • 较高层次的范式比较低层次的范式具有“更合乎要求的性质”
      • 一个低一级范式的关系模式,通过投影运算可以转化为若干个高一级范式的关系模式的集合,这个过程叫做规范化.
      • 如果一个关系满足某个范式要求,则它也会满足较其级别低的所有范式的要求
    • 范式层次
    • 第一范式(1NF)
      • 定义5: 在关系模式R中的每一个具体关系r中,如果每个属性值都是不可再分的最小数据单位,则称R是第一范式的关系,记作R∈1NF.
      • 数据库理论研究的是规范化关系.
      • 1NF规范化: 把非规范化关系规范提高到1NF关系模式的集合.
    • 第二范式(2NF)
      • 定义6: 若关系模式R∈1NF,且每个非主属性都完全依赖于R的任意候选码,则关系模式R属于第二范式,记作R ∈2NF.
      • 2NF规范化是把1NF关系模式规范提高到变成2NF关系模式的集合.
      • 从1NF中消除非主属性对候选码的部分函数依赖,则获得2NF关系.
      • 举例:UN(Sno,Cno,G,SDN,MN)
    • 第三范式(3NF)
      • 定义7: 若关系模式R∈2NF,且每个非主属性都不传递依赖于R的任意候选码,则R∈3NF.
      • 从2NF关系中,消除非主属性对码的传递依赖函数而获得3NF关系
      • R∈3NF,则每个非主属性既不部分依赖,也不传递依赖于R的任何候选码.
      • 3NF的规范化
    • BCNF范式
      • 3NF的不完善性
        • 定义8: 若R∈1NF,且R中每个决定因素都是候选码,则R ∈BCNF.
        • 满足BCNF的关系将消除任何属性对候选码的部分依赖与传递依赖
        • 应用BCNF定义时,可直接判断1NF是否属于BCNF
        • BCNF规范化
          这里写图片描述
    展开全文
  • 关系数据库设计核心

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

    一、关系数据库设计理论

    1、设计一个合适的关系数据库系统的关键是关系数据库模式的设计,即应构造几个关系模式, 每个模式有哪些属性,怎样将这些相互关联的关系模式组建成一个适合的关系模型,关系数据库 的设计必须在关系数据库设计理论的指导下进行。
    2、关系数据库设计理论有三个方面的内容:函数依赖、范式和模式设计。函数依赖起核心作用, 它是模式分解和模式设计的基础,范式是模式分解的标准。

    【例1】设计一个学生课程数据库,其关系模式SDSC(Sno, Sname, Age, Dept,DeptHead, Cno,Grade),各属性含义为学号、姓名、年龄、系、系主任姓名;课程号、成绩。根据实际情况, 这些属性语义规定为:
    (1)一个系有若干学生,一个学生只属于一个系。
    (2)一个系只有一个系主任。
    (3)一个学生可以选修多门课程,一门课程可被多个学生选修。 (4)每个学生学习每门课程有一个成绩
    在这里插入图片描述
    从上述语义规定和分析表中数据可以看出,(Sno, Cno)能唯一标识一个元组,所以,(Sno, Cno)为该关系模式的主码,但在进行数据库操作时,会出现以下问题。
    (1)数据冗余(2)插入异常(3)删除异常(4)修改异常

    由于存在上述问题,SDSC不是一个好的关系模式。为了克服这些异常,将S关系分解为学生关系S (Sno, Sname, Age, Dept),系关系D(Dept,DeptHead),选课关系SC(Sno, Cno,Grade),这三个关系模式的实例如表2、表3、表4所示。
    在这里插入图片描述
    在这里插入图片描述

    二、规范化

    规范化的基本思想是尽量减小数据冗余,消除数据依赖中不合适的部分,解决插入异常、删除异常和更新异常等问题,这就要求设计出的关系模式要满足一定条件。在关系数据库的规范化过程中,为不同程度的规范化要求设立的不同标准或准则称为范式。满足最低要求的称为第一范式,简称1NF,在第一范式基础上满足进一步要求的成为第二范式2NF,以此类推。
    1971年至1972年,E.F.Codd系统地提出了1NF、2NF、3NF的概念,讨论了关系模式的规
    范化问题。 1974年,Codd。和Boyce又共同提出了一个新范式,即BCNF。1976年有人提出了4NF,后又有人提出了5NF
    各个范式之间的集合关系可以表示为:
    5NF4NFBCNF3NF2NF1NF
    如下图所示:
    在这里插入图片描述
    在这里插入图片描述

    1、第一范式(1NF)

    所谓第一范式(1NF)是指在关系模型中,对于添加的一个规范要求,所有的域都应该是原子性的,即数据库表的每一列都是不可分割的原子数据项,而不能是集合,数组,记录等非原子数据项。即实体中的某个属性有多个值时,必须拆分为不同的属性。在符合第一范式(1NF)表中的每个域值只能是实体的一个属性或一个属性的一部分。简而言之,第一范式就是无重复的域

    说明:在任何一个关系数据库中,第一范式(1NF)是对关系模式的设计基本要求,一般设计中都必须满足第一范式(1NF)。不过有些关系模型中突破了1NF的限制,这种称为非1NF的关系模型。换句话说,是否必须满足1NF的最低要求,主要依赖于所使用的关系模型。

    在这里插入图片描述

    2、第二范式(2NF)

    在1NF的基础上,非码属性必须完全依赖于候选码(在1NF基础上消除非主属性对主码的部分函数依赖)

    第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF)。第二范式(2NF)要求数据库表中的每个实例或记录必须可以被唯一地区分。选取一个能区分每个实体的属性或属性组,作为实体的唯一标识。

    例如在员工表中的身份证号码即可实现每个一员工的区分,该身份证号码即为候选键,任何一个候选键都可以被选作主键。在找不到候选键时,可额外增加属性以实现区分,如果在员工关系中,没有对其身份证号进行存储,而姓名可能会在数据库运行的某个时间重复,无法区分出实体时,设计辟如ID等不重复的编号以实现区分,被添加的编号或ID选作主键。(该主键的添加是在ER设计时添加,不是建库时随意添加)

    第二范式(2NF)要求实体的属性完全依赖于主关键字。所谓完全依赖是指不能存在仅依赖主关键字一部分的属性,如果存在,那么这个属性和主关键字的这一部分应该分离出来形成一个新的实体,新实体与原实体之间是一对多的关系。为实现区分通常需要为表加上一个列,以存储各个实例的唯一标识。简而言之,第二范式就是在第一范式的基础上属性完全依赖于主键。
    在这里插入图片描述

    3、第三范式(3NF)

    在2NF基础上,任何非主属性不依赖于其它非主属性(在2NF基础上消除传递依赖)
    第三范式(3NF)是第二范式(2NF)的一个子集,即满足第三范式(3NF)必须满足第二范式
    (2NF)。
    数据库范式而言之,第三范式(3NF)要求一个关系中不包含已在其它关系已包含的非主关键字信息。

    例如,存在一个部门信息表,其中每个部门有部门编号(dept_id)、部门名称、部门简介等信息。那么在员工信息表中列出部门编号后就不能再将部门名称、部门简介等与部门有关的信息再加入员工信息表中。如果不存在部门信息表,则根据第三范式(3NF)也应该构建它,否则就会有大量的数据冗余。简而言之,第三范式就是属性不依赖于其它非主属性,也就是在满足2NF的基础上,任何非主属性不得传递依赖于主属性。

    在这里插入图片描述

    4、巴斯-科德范式(BCNF)

    Boyce-Codd Normal Form(巴斯-科德范式),在3NF基础上,任何非主属性不能对主键子集依赖(在3NF基础上消除对主码子集的依赖)
    巴斯-科德范式(BCNF)是第三范式(3NF)的一个子集,即满足巴斯-科德范式(BCNF) 必须满足第三范式(3NF)。通常情况下,巴斯-科德范式被认为没有新的设计规范加入,只是 对第二范式与第三范式中设计规范要求更强,因而被认为是修正第三范式,也就是说,它事实上是对第三范式的修正,使数据库冗余度更小。这也是BCNF不被称为第四范式的原因。某些书上, 根据范式要求的递增性将其称之为第四范式是不规范,也是更让人不容易理解的地方。而真正的第四范式,则是在设计规范中添加了对多值及依赖的要求。

    【目的原则】

    规范化目的是使结构更合理,消除存储异常,使数据冗余尽量小。便于插入、删除和更新。遵从概念单一化“一事一地”原则,即一个关系模式描述一个实体或实体间的一种联系。规范的实质就是概念的单一化。
    一个关系模式接着分解可以得到不同关系模式集合,也就是说分解方法不是惟一的。最小冗余的要求必须以分解后的数据库能够表达原来数据库所有信息为前提来实现。其根本目标是节省存储空问,避免数据不一致性,提高对关系的操作效率,同时满足应用需求。实际上,并不一定要求全部模式都达到BCNF不可。有时故意保留部分冗余可能更方便数据查询。尤其对于那些更新频度不高,查询频度极高的数据库系统更是如此。

    【反范式(了解)】

    规范化的优点是明显的,它避免了大量的数据冗余,节省了存储空间,保持了数据的一致性。当一个库里的数据经常发生变化时,达到3NF的库可以使用户不必在超过两个以上的地方更改同 一个值。那么是不是只要把所有的表都规范为3NF后,数据库的设计就是最优的呢?这可不一定。范式越高意味着表的划分更细,一个数据库中需要的表也就越多,用户不得不将原本相关联的数据分摊到多个表中。当用户同时需要这些数据时只能采用连接表的形式将数据重新合并在一起。同时把多个表联接在一起的花费是巨大的,尤其是当需要连接的两张或者多张表数据非常庞大的时候,表连接操作几乎是一个噩梦,这严重地降低了系统运行性能。

    展开全文
  • 文章目录关系数据库关系操作基本关系操作关系数据库语言的分类关系模型的完整性实体完整性(Entity Integrity)参照完整性(Referential Integrity)用户定义完整性(User-defined Integrity)E-R图向关系模型的转换...
  • 关系中的某一属性或属性组的值能唯一的标识一个元组,而其任何、子集都不能再标识,则称该属性组为(超级)候选。 例如:在学生实体中,“学号”是能唯一的区分学生实体的,同时又假设“姓名”、“班级”的...
  • 数据库系统原理 - - (2)关系数据库

    千次阅读 多人点赞 2020-09-27 09:19:45
    文章目录二:关系数据库1.关系数据库概述a.关系数据库的产生历史b.关系数据模型的组成要素2.关系数据模型a.表(Table)b.关系(Relation)c.列(Column)d.行(Row)e.或键(Key)f.超码或超键(Super Key)g.候选...
  • 一、关系数据结构及形式化定义 1、关系 关系模型的数据结构非常简单,只包含单一的数据结构——关系。在用户看来,关系模型中数据的逻辑结构是一张扁平的二维表。 1.1域 域是一组具有相同数据类型值的集合。 ...
  • 关系数据库

    2010-02-03 16:55:00
    1.数据库的出现的必要性和对数据库的要求尽管文件系统可以解决不少问题,但是下面的问题是文件系统所无法解决的,如果给文件系统加上这些特性,那么文件系统也就成为了一个数据库(有点裸设备的味道)。数据的冗余和...
  • 关系数据库及关系代数的基本概念

    千次阅读 2020-03-08 20:00:06
    关系数据库概念&关系代数应用
  • 关系数据模型和关系数据库系统

    万次阅读 2017-02-12 13:10:58
    关系数据模型和关系数据库系统
  • 数据库原理概论Ⅰ-关系数据库

    多人点赞 2019-02-17 15:52:38
    数据库原理概论Ⅰ-关系数据库 数据库原理是一门不难,但是各种形式化的语言比较难以理解的课,大三的时候数据库是全英文授课,鄙人不才,仿佛身处巫山之中。重新学习数据库,我这次以《数据库系统概论》 王珊著 这...
  • 关系数据库——关系数据语言

    千次阅读 多人点赞 2019-10-22 19:52:51
    关系 域:一组具有相同数据类型的值的集合(即取值范围) 笛卡尔积:域上的一种集合运算。结果为一个集合,集合的每一个元素是一个元组,元组的每一个分量来自不同的域。 基数:一个域允许的不同取值个...
  • 关系数据库基础

    千次阅读 2016-11-26 15:38:58
    数据库是按照数据结构来组织、存储和管理数据的仓库(图书馆),数据库技术产生于20世纪60年代末70年代初,其发展阶段为:人工管理阶段,文件系统阶段,数据库系统阶段。 人工管理阶段 20世纪50年代中期之前,计算机...
  • 关系数据库系列文章之到底什么是关系(一)

    千次阅读 多人点赞 2018-08-05 02:28:45
    在语言X中如何实现Y,像这种具体的只是(know-how)可快速提高你的工作效率。但是一旦语言发生变化,这种知识就无法再使用。... 作为程序员,在日常的开发中,我们避免不了的就要接触数据库这个概念,而关系...
  • 关系数据库2.1关系数据结构及形式化定义2.1.1关系2.1.2关系模式2.1.3关系数据库2.1.4关系模型的存储结构2.2关系操作2.2.1 基本的关系操作2.2.2 关系数据语言的分类2.3关系的完整性2.3.1 实体完整性2.3.2参照完整性...
  • 关系数据库——关系的完整性约束

    千次阅读 2019-04-09 08:38:38
    介绍关系数据库完整性约束——实体完整性,参照完整性、用户自定义完整性
  • 关系数据库基础理论

    千次阅读 2018-08-06 11:02:06
    mysql系列之一关系数据库基础理论 正是数据库管理的需要催生了数据库管理系统DBMS,而关系型数据库管理系统为RDBMS 常见的数据模型有三种: - 层次模型 - 网状模型 - 关系模型 一、关系数据库的产生 在...
  • 当时SQL server数据库准备考试了,我花了两个星期把整本书看了,这些是当时做的笔记(针对老师划得重点),现在学习Java做了几个项目后,发现有很多东西不是特别理解,特地再次复习一下,并且自己再思考思考,有兴趣...
  • 关系系统本章目的: RDBMS的查询处理步骤 查询优化的概念 基本方法和技术 查询优化分类 : 代数优化 物理优化RDBMS查询处理阶段 : 1. 查询分析 2. 查询检查 3. 查询优化 4. 查询执行 对查询语句进行扫描、...
  • 【数据库系统】数据库系统概论====第二章 关系数据库 关系数据库简介 1970年IBM公司的E.F.Codd提出关系数据模型 1972年提出了关系的第一、第二、第三范式 1974年提出了关系的BC范式 80年代后,关系数据库系统成为最...
  • 到底什么是关系数据库

    万次阅读 2009-08-05 10:07:00
    学了一段时间的数据库了,回过头来看看,竟然还清楚关系数据库的原理是什么,惭愧。先学习一下“牛人”的见解,以后慢慢的消化理解。 数据库是以某种数据模型所确定的数据结构方式来组织和存储某个组织(或部门)...
  • 关系数据库——sql基础1定义

    千次阅读 多人点赞 2019-10-21 17:07:09
    关系数据库标准语言SQL 基本概念 SQL语言是一个功能极强的关系数据库语言。同时也是一种介于关系代数与关系演算之间的结构化查询语言(Structured Query Language),其功能包括数据定义、数据查询、数据操纵和...
  • 数据库基础<二>关系数据库

    千次阅读 2013-12-22 15:20:44
    一、关系数据结构及形式化定义
  • 关系数据库理论

    千次阅读 2020-08-19 10:15:06
    关系数据库,是采用了关系模型来组织数据的数据库,借助集合代数等数学概念和方法来处理数据库中的数据。其中,关系模型,即:实体(Entity)之间的关系(Relationship),所以也称为 E-R 模型(Entity-...
  • 关系数据库设计:谈谈规范化技术

    千次阅读 多人点赞 2020-08-19 21:42:31
    通过实际案例介绍关系数据库设计中的规范化技术(Normalization),为什么需要规范化,常见的第一范式、第二范式和第三范式,反规范化应用的场景以及外键的取舍问题。
  • 文章目录一、关系数据库与非关系型数据库概述1、关系型数据库2、非关系型数据库二、关系数据库与非关系型数据库区别1、数据存储方式不同2、扩展方式不同3、对事务性的支持不同三、非关系型数据库产生背景四、Redis...
  • 关系数据库

    千次阅读 2012-06-10 18:50:00
    关系型数据库 关系数据库,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。...标准数据查询语言SQL就是一种基于关系数据库的语言,这种语言执行对关系数据库中数据的检索和操
  • 关系数据库与分布式数据库

    万次阅读 2018-01-28 10:27:48
    关系数据库,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。 关系模型由关系数据结构、关系操作集合、关系完整性约束三部分组成。 关系型数据库将数据存储在硬盘中 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 139,138
精华内容 55,655
关键字:

关系数据库的码是指