精华内容
下载资源
问答
  • 关系数据库中常用的数据结构

    万次阅读 2017-06-26 14:38:39
    数据结构是元素之间的一种关系。...1.数组:array,关系数据库中数组的应用非常广泛,一个table就可以看作是一个二维数组。但是数组的访问效率较低,需要遍历所有数据才能找到满足条件的数据。 2.

    数据结构是元素之间的一种关系。有四种基本的数据结构。线性数据结构,树形数据结构,集合数据结构,图形数据结构



    其中线性数据(元素之间一对一的关系)结构又细分为,数组,链表,队列,堆栈。先详细讨论下线性数据结构的特点

    1.数组:array,关系数据库中数组的应用非常广泛,一个table就可以看作是一个二维数组。但是数组的访问效率较低,需要遍历所有数据才能找到满足条件的数据。

    2.链表:数据元素的增加,删除可以在链表的任意位置完成(插队)

    3.队列:只能在队尾插入,队首删除(

    4.栈:只能在队首进行插入和删除的动作(子弹夹)


    树形结构:树形结构有利于数据的存储和查找。数据元素之间一对多的关系,常见类型又树,比如二叉树,平衡二叉树,B+树


    二叉树,最多有2个分支,而平衡二叉树,保证每个节点都有2个分枝,

    B+树 常用于文件系统中:

    (1)有n棵子树的节点含有n个关键字;
    (2)所有的叶子节点包含了全部关键字的信息,及指向这些关键字记录的指针,且叶子节点本身按关键字大小自小到大顺序链接;
    (3)所有非终端节点可以看成是索引部分,节点中仅含有其子树(根节点)中最大(或最小)关键字,所有B+树更像一个索引顺序表;
    (4)对B+树进行查找运算,一是从最小关键字起进行顺序查找,二是从根节点开始,进行随机查


    字典树是一种以树形结构保存大量字符串。以便于字符串的统计和查找,经常被搜索引擎系统用于文本词频统计。它的优点是:利用字符串的公共前缀来节约存储空间,最大限度地减少无谓的字符串比较,查询效率比哈希表高。具有以下特点:
    (1)根节点为空;
    (2)除根节点外,每个节点包含一个字符;
    (3)从根节点到某一节点,路径上经过的字符连接起来,为该节点对应的字符串。
    (4)每个字符串在建立字典树的过程中都要加上一个区分的结束符,避免某个短字符串正好是某个长字符串的前缀而淹没。

    散列表(hash table):

    若结构中存在关键字和键值相等的记录,则该记录必定在hash 函数的存储位置上。由此不需要比较便可以直接取得所查记录。这个对应关系为hash function,按这个思想建立的表示hash表


    引用:http://blog.csdn.net/wypblog/article/details/8076324

    最大(最小)堆是一棵每一个节点的键值都不小于(大于)其孩子(如果存在)的键值的树。大顶堆是一棵完全二叉树,同时也是一棵最大树。小顶堆是一棵完全完全二叉树,同时也是一棵最小树。

    注意:

    • 堆中任一子树亦是堆。
    • 以上讨论的堆实际上是二叉堆(Binary Heap),类似地可定义k叉堆。

    下图分别给出几个最大堆和最小堆的例子:


    展开全文
  • 文章目录关系数据库关系数据库简介关系数据结构及形式化定义关系操作关系模型的完整性关系代数 关系数据库 关系数据库简介 美国????IBM公司的E.F.Codd 1970年提出关系数据模型E.F.Codd, “A Relational Model of ...

    本人就职于国际知名终端厂商,负责modem芯片研发。
    在5G早期负责终端数据业务层、核心网相关的开发工作,目前牵头6G算力网络技术标准研究。

    关系数据库

    关系数据库简介

    • 美国🗽IBM公司的E.F.Codd
      1970年提出关系数据模型E.F.Codd, “A Relational Model of Data for Large Shared Data Banks”《Communication of the ACM》
      1970之后,提出了关系代数和关系演算的概念
      1972年提出了关系的第一、第二、第三范式的规范化理论
      1974年提出了关系的BC范式
      奠定了关系数据库的理论基础
    • 关系数据库系统是支持关系模型的数据库系统
    • 关系模型由数据结构、关系操作集合和完整性约束三部分组成
    • 单一的数据结构------关系🔗
      但关系模型的这种简单的数据结构能够表达丰富的语义,描述出现实世界的实体以及实体间的各种联系
    • 关系操作
      • 关系模型中常用的关系操作包括两类:
        ⭐查询操作:选择、投影、连接、除、并、交、差
        ⭐增加、删除、修改操作
      • 特点:操作的对象和结果均是集合;一次一集合
      • 关系数据语言:
        🔸三类:关系代数语言、关系演算语言和具有关系代数和关系演算双重特点的语言

    关系数据结构及形式化定义

    关系

    • 在关系模式中,数据是以二维表的形式存在的,这个二维表就叫做关系

    • 关系理论是以集合代数理论为基础的,因此我们可以用集合代数给出二维表的“关系”定义

    • 为了从集合论的角度给出关系的定义,我们先引入域和笛卡尔积的概念 :
      ⭐域(Domain)

      • 域是一组具有相同数据类型的值的集合,又称为值域(用D表示)
        例如,整数、实数、字符串的集合
      • 域中所包含的值的个数称为域的基数(用m表示)
      • 关系中用域表示属性的取值范围
        例如:
        D1={李力,王平,刘伟} m1=3
        D2={男,女} m2=2
      • 域中的值无排列次序,如D2={男,女}={女,男}

      ⭐笛卡尔积(Cartesian Product)

      • 给定一组域D1,D2,…,Dn(它们可以包含相同的元素,即可以完全不同,也可以部分或全部相同)。D1,D2,…,Dn的笛卡尔积为D1×D2×…×Dn={(d1,d2,…,dn)| di∈Di,i=1,2,…,n}
      • 有定义可以看出,笛卡尔积也是一个集合
        其中:
        元素中的每一个di叫做一个分量(Component),来自相应的域(di∈Di);
        每一个元素(d1,d2,…,dn)叫做一个n元组(n-tuple),简称元组(Tuple)。但元组不是di的集合,元组的每个分量(di)是按序排列的,如:(1,2,3)≠(2,3,1)≠(1,3,2);而集合中的元素是没有排序次序的,如:1,2,3)=(2,3,1)=(1,3,2)
        若Di(i=1,2,…,n)为有限集,Di中的集合元素个数称为Di的基数,用mi(i=1,2,…,n)表示,则笛卡尔积D1×D2×…×Dn的基数M(即元素(d1,d2,…,dn)的个数)为所有域的基数的累乘之积,即M= ∏ i = 1 n m i \prod_{i=1}^nm_i i=1nmi 例如:
        上述表示教师关系中姓名、性别两个域的笛卡尔积为
        D1×D2={李力,男),(李力,女),(王平,男),(王平,女),(刘伟,男),(刘伟,女)}
        其中:
        🔹 李力、王平、刘伟、男、女都是分量
        🔹(李力,男),(李力,女)等是元组
        🔹其基数M=m1×m2=3*2=6
        🔹元组的个数为6
        笛卡尔积可用二维表的形式表示
        例如,上述的6个元组可表示成下表👇
        姓名性别
        李力
        李力
        王平
        王平
        刘伟
        刘伟
        由上例可以看出,笛卡尔积实际是一个二维表,表的框架由域构成,表的任意一行就是一个元组,表中的每一列来自同一域,如第一个分量来自D1,第二个分量来自D2。

      ⭐关系(Relation)

      • 笛卡尔积D1×D2×…×Dn的任一子集称为定义在域D1,D2,…,Dn上的n员关系,可用R(D1×D2×…×Dn)表示。
        如上例D1×D2笛卡尔积的子集可以构成教师关系T1,如下表:
        在这里插入图片描述
      • 几点说明
        • R为关系名,n称为关系的目或度(Degree)
          当n=1时,称为单元关系
          当n=2时,称为二元关系
          … …
          当n=n时,称为n元关系
        • 关系是笛卡尔积的有限子集,即是一个二维表,行对应一个元组、列对应一个域、每列的名称称为属性
        • n目关系必有n个属性

      ⭐属性、码的概念

      • 候选键与关键字
        • 能唯一标识关系中元组的属性或属性集,则称该属性或属性集为候选键(Candidate Key),也称候选关键字或候选码。如:
          ■ “学生关系”中的学号能唯一的标识每一个学生,则属性学号是学生关系的候选键
          ■ 在“选课关系”中,只有属性的组合“学号+课程号”才能唯一地区分每一条选课记录,则属性集“学号+课程号”是选课关系的候选键
        • 如果一个关系中有多个候选键,可以从中选择一个作为查询、插入和删除元组的操作变量,被选用的候选键称为主关系键(Primary Key),或简称为主键、主码、关系键、关系字。
          例如:在学生关系中假设存在身份证号属性,则“学号”和“身份证号”都可以作为学生关系的候选键,如果选定“学号”作为数据操作的依据,则“学号”为主关系键
        • 主关系键是关系模型中的一个重要概念。每一个关系必须选择一个主关系键,选定以后,不能随意改变。每个关系必定有且仅有一个主关系键,因为关系的元组无重复,至少关系的所有属性的组合可作为主关系键,通常用较小的属性组合作为主关系键
      • 主属性与非码属性
        • 主属性(Prime Attribute):包含在任何一个候选码中的各属性称为主属性
        • 非码属性(Non-Prime Attribute):不包含在任何候选码中的属性称为非码属性,或非主属性(Non-key Attribute)
        • 在最简单的情况下,一个候选码只包含一个属性,如学生关系中的“学号”,教师关系中的“教师号”
        • 在最极端的情况下,所有属性的组合是关系的候选码,这时称为全码(All-Key)
          例如:假设有教师课程参考书关系TCB,分别有三个属性 教师号(T)、课程号(C)和参考书(B)。一个教师可以讲授多门课程;一门课程可以为多个教师讲授,它们使用相同的一套参考书;同样每种参考书可以供多门课程使用。在这种情况下,T、C、B三者之间是多对多关系,(T,C,B)三个属性的组合是关系TCB的候选码,称为全码,T,C,B都是主属性
        • 关系的类型
          • 基本关系(通常又称为基本表或基表):实际存在的表,实际存储数据的逻辑表示
          • 查询表:查询结果对应的表
          • 视图表:由基本表或其它视图表导出的表,是虚表,不对应实际存储的数据

      ⭐关系的基本性质

      • 尽管关系与二维表格、传统的数据文件是非常类似的,但它们之间又有重要的区别
      • 严格地说,关系是种规范化了的二维表中行的集合,为了使相应的数据操作简化,在关系模型中,对关系做了种种限制,关系具有如下特性:
        • 关系中不允许出现相同的元组。因为数据上集合中没有相同的元素,而关系是元组的集合,所以作为集合元素的元组应该是唯一的
        • 关系中元组的顺序(即行序)是无关紧要的,在一个关系中可以任意交换两行的次序。因为集合中的元素是无序的,所以作为集合元素的元组也是无序的。根据关系的这个性质,可以改变元组的顺序使其具有某种排序,然后按照顺序查询数据,可以提高查询速度。
        • 关系中属性的顺序是无关紧要的,即列的顺序可以任意交换。交换时,应连同属性名一起交换,否者将得到不同的关系
        • 同一属性名下的各个属性值必须来自同一个域,是同一类型的数据。即列是同质的
        • 关系中各个属性必须有不同的名字,不同的属性可来自同一个域,即它们的分量可以取自同一个域
          例如:有下表中的关系,职业与兼职是两个不同的属性,但它们取自同一个域,职业={教师,公务员,企业主}👇
          在这里插入图片描述
        • 关系中的每一个分量必须是不可分的数据项,或者说所有属性值都是原子的,即是一个确定的值,而不是值的集合。属性值可以是空值,表示“未知”或“不可使用”,即不可“表中有表”。满足此条件的关系称为“规范化关系”,否则称为“非规范化关系”。
          例如:下表中,籍贯含有省、市/县两项,出现了“表中有表”的现象,则为非规范化关系,而把籍贯分成省、市/县两列,将其规范化👇
          在这里插入图片描述

    关系模式

    • 关系数据库中,关系模式是型,关系是值
    • 关系模式是对关系结构的描述,是关系的框架,或称为表框架。它应该:
      • 指出关系由哪些属性构成,这些属性来自哪些域,以及属性与域之间的映像关系
      • 刻画关系必须满足的完整性约束条件
    • 定义:关系的描述称为关系模式(Relation Schema)。一个关系模式应当是一个五元组。它可以形式化地表示为:R(U,D,DOM,F)
      其中R为关系名,U为组成该关系的属性名集合,D为属性组U中属性所来自的域,DOM为属性向域的映像集合,F为属性间数据的依赖关系集合
    • 关系模式通常可以简记为:R(A1,A2,…,An)
      其中R为关系名,A1,A2,…,An为属性名。而域名及属性向域的映像常常直接说明为属性的类型和长度
    • 关系模式是静态的、稳定的;关系是关系模式在某一时刻的状态或内容,动态的、随时间不断变化的

    关系数据库模式

    • 一组关系模式的集合叫做关系数据库模式
    • 关系数据库模式是对关系数据库结构的描述,或者说是对关系数据库框架的描述,与关系数据库模式对应的数据库中的当前值就是关系数据库的内容,称为关系数据库的实例,可以看作是关系的值。
      例如,在教学数据库中,共有五个大系,其关系模式分别为:
      🔹学生(学号,姓名,性别,年龄,系号)
      🔹教师(教师号,姓名,性别,年龄,系号)
      🔹课程(课程号,课程名,课时)
      🔹选课(学号,课程号,成绩)
      🔹授课(教师号,课程号)
      🔹系(系号,系名,地址)
      在每个关系中,又有其相应的数据库的实例,如下图是学生关系模式对应的数据库实例👇
      在这里插入图片描述

    关系数据库

    • 关系数据库是“一组随时间变化,具有各种度的规范化关系的集合”
    • 在关系模型中,实体以及实体间的联系都是用关系来表示。在一个给定的现实世界领域中,相应于所有实体及实体之间的联系的关系的集合构成一个关系数据库
    • 由此可见,关系数据库也有的概念,其型就是关系数据库模式,相对固定;其值就是关系数据库内容,代表现实世界中的实体,而实体是随着时间不断变化的,所以其值在不同的时刻会有所变化

    关系数据库——关系操作&&关系模型的完整性
    关系数据库——关系代数


    在这里插入图片描述

    展开全文
  • 文章目录0.思维导图1. 关系(1)域(Domain)(2)笛卡尔积(Cartesian Product)(3)关系...单一的数据结构----关系 现实世界的实体以及实体间的各种联系均用关系来表示 逻辑结构----二维表 从用户角度,...


    0.思维导图

    在这里插入图片描述

    1. 关系

    什么是关系?

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

    (1)域(Domain)

    • 是一组具有相同数据类型的值的集合。例:
      整数
      实数
      介于某个取值范围的整数
      长度指定长度的字符串集合
      {‘男’,‘女’}
      ………………

    (2)笛卡尔积(Cartesian Product)

    • 笛卡尔积
      给定一组域D1,D2,…,Dn,这些域中可以有相同的。
      D1,D2,…,Dn的笛卡尔积为:
      在这里插入图片描述
      所有域的所有取值的一个组合
      不能重复;

    • 元组(Tuple)
      笛卡尔积中每一个元素(d1,d2,…,dn)叫作一个n元组(n-tuple)或简称元组(Tuple);
      (张清玫,计算机专业,李勇)、(张清玫,计算机专业,刘晨)等都是元组 ;

    • 分量(Component)
      笛卡尔积元素(d1,d2,…,dn)中的每一个值di叫作一个分量;
      张清玫、计算机专业、李勇、刘晨等都是分量 ;

    • 基数(Cardinal number)
      可以把基数看做笛卡尔积元素的个数,及元组的个数;
      若Di(i=1,2,…,n)为有限集,其基数为mi(i=1,2,…,n),则D1×D2×…×Dn的基数M为:
      在这里插入图片描述

    • 笛卡尔积的表示方法:
      笛卡尔积可表示为一个二维表;
      表中的每行对应一个元组,表中的每列对应一个;
      在这里插入图片描述

    (3)关系(Relation)

    • 关系
      ·笛卡尔积·D1×D2×…×Dn的子集叫作在D1,D2,…,Dn上的关系,表示为:
      在这里插入图片描述
      R:关系名
      n:关系的(Degree)

    • 元组
      ·关系·中的每个元素是关系中的元组,通常用t表示。

    • 单元关系与二元关系
      当n=1时,称该关系为单元关系(Unary relation)或一元关系 ;
      当n=2时,称该关系为二元关系(Binary relation);

    • ·关系的表示·
      关系也是一个二维表,表的每行对应一个元组,表的每对应一个
      在这里插入图片描述

    • 属性
      关系中不同列可以对应相同的域;
      为了加以区分,必须对每起一个名字,称为属性(Attribute);
      n目关系必有n个属性;

      • 候选码(Candidate key)
        若关系中的某一属性组的值能唯一地标识一个元组,则称该属性组为候选码;
        简单的情况:候选码只包含一个属性;
      • 全码(All-key)
        最极端的情况:关系模式的所有属性组是这个关系模式的候选码,称为全码(All-key);
      • 主码
        若一个关系有多个候选码,则选定其中一个为主码(Primary key);
      • 主属性
        候选码的诸属性称为主属性(Prime attribute);
        不包含在任何侯选码中的属性称为非主属性( Non-Prime attribute)或非码属性(Non-key attribute) ;
        在这里插入图片描述
    • D1,D2,…,Dn的笛卡尔积的某个子集才有实际含义
      ·例:·表2.1 的笛卡尔积没有实际意义
      取出有实际意义的元组来构造关系
      关系:SAP(SUPERVISOR,SPECIALITY,POSTGRADUATE)
      假设:导师与专业:1:1, 导师与研究生:1:n
      主码:POSTGRADUATE(假设研究生不会重名)
      SAP关系可以包含三个元组:{ (张清玫,计算机专业,李勇), (张清玫,计算机专业,刘晨),(刘逸,信息专业,王敏) }

    (4)三类关系

    • 基本关系(基本表或基表)
      实际存在的表,是实际存储数据的逻辑表示
    • 查询表
      查询结果对应的表
    • 视图表
      由基本表或其他视图表导出的表,是虚表,不对应实际存储的数据
    • 在 SQL 中,视图是基于 SQL 语句的结果集的可视化的表
    • 视图包含行和列,就像一个真实的表。视图中的字段就是来自一个或多个数据库中的真实的表中的字段。
    • 我们可以向视图添加 SQL 函数、WHERE 以及 JOIN 语句,我们也可以提交数据,就像这些来自于某个单一的表。
    • 注释:数据库的设计和结构不会受到视图中的函数、where 或 join 语句的影响。
    • 基本关系(二维表)的性质
      ① 列是同质的(Homogeneous);
      ② 不同的列可出自同一个域,其中的每一列称为一个属性,不同的属性要给予不同的属性名;
      ③ 列的顺序无所谓,列的次序可以任意交换;
      ④ 任意两个元组的候选码不能相同;
      ⑤ 行的顺序无所谓,行的次序可以任意交换;
      ⑥ 分量必须取原子值,这是规范条件中最基本的一条; 表2.3  非规范化关系

    2.关系模式

    (1)什么是关系模式

    关系模式(Relation Schema)是
    关系是
    关系模式是对关系描述:

    • 元组集合的结构
      • 属性构成
      • 属性来自的域
      • 属性与域之间的映象关系
    • 元组语义以及完整性约束条件
    • 属性间的数据依赖关系集合

    (2)定义关系模式

    关系模式可以形式化地表示为:

    • 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 : 属性名
    注:域名及属性向域的映象常常直接说明为属性的类型、长度

    3.关系模式和关系的对比

    • 关系模式
      对关系的描述
      静态的、稳定的
    • 关系
      关系模式在某一时刻的状态或内容
      动态的、随时间不断变化的
      关系模式和关系往往统称为关系

    在数据库学科中可以把关系模式理解为表的结构、属性之间的关系、约束条件,把关系理解为二维表

    4.关系数据库

    • 关系数据库·
      在一个给定的应用领域中,所有·关系的集合·构成一个关系数据库
    • ·关系数据库模式包括
      若干域的定义;
      在这些域上定义的若干关系模式;
    • 关系数据库的··与
      关系数据库的: 关系数据库模式, 对关系数据库的描述。
      关系数据库的: 关系模式在某一时刻对应的关系的集合,简称为关系数据库
    展开全文
  • 关系数据库工作原理-数据结构(3)

    万次阅读 2016-04-29 07:07:15
    二位数组是一种最简单的数据结构,一张数据库表就可以看成是一个二维数组。例如: 这个二维数组就代表一张有行和列的表结构: 每一行代表一个对象。 每一行所有列代表一个对象的所有属性。 每一列...

    本文翻译自Coding-Geek文章:《 How does a relational database work》。
    原文链接:http://coding-geek.com/how-databases-work/#Buffer-Replacement_strategies
    本文翻译了如下章节:

    这里写图片描述

    一、Array、Tree and Hash table

    通过前面的章节, 我们已经理解了时间复杂和归并排序的概念,接下来我要介绍三种数据结构。这三种数据结构非常重要,它们是现代数据库系统的基石。我也会讲一讲数据库索引。

    二、Array-数组

    二位数组是一种最简单的数据结构,一张数据库表就可以看成是一个二维数组。例如:

    这里写图片描述

    这个二维数组就代表一张有行和列的表结构:

    1. 每一行代表一个对象。
    2. 每一行所有列代表一个对象的所有属性。
    3. 每一列固定存储某一种类型的数据(如:integer、string、date…)。

    尽管,二维数组用于存储表数据非常好,但是当你需要从数组中根据某个条件查询数据时性能无法接受。

    例如:你想找出在英国工作的所有人,你需要遍历每一行数据,判断他是否属于英国。这个过程需要执行N步操作(N取决于表的行数)。听起来,性能也不算太差,但有更快的方法吗?

    肯定有,接下来就应该树结构登场了。

    备注:现代数据库使用更高级的数组结构来存储表数据,如heap-organized tables或者index-organized tables。但是都没有解决如何在数组中根据一些列的过滤条件快速筛选数据的问题。

    三、Tree and database index – 树和数据库索引

    这里写图片描述

    这棵树有15个节点。我们看一下如何从中找到208这个元素:

    1. 从根节点开始查找,根节点是136。因为 136<208,所以在136的右子树中查找。
    2. 398>208,在398的左子树中继续查找。
    3. 250>208,在250的左子树种继续查找。
    4. 200<208,在200的右子树中查找。但是200没有右子树。没有找到208(因为如果能找到的话,它应该在200的右子树上)。

    接着看一下如何查找40这个元素:

    1. 也是从根节点136开始查询。因为136>40,所以在136的左子树中查询。
    2. 80>40,在80的左子树中查找
    3. 40=40, 元素找到了!提取40这个节点中存储对象的对应数组行号索引。
    4. 有了这个行号索引,想拿这行的数据就能立即获取到(数组的下标访问)。

    最终,两次查询的操作步骤数都是树的高度。如果,你仔细阅读过merge sort章节,应该知道树的高度是log(N),所以该查找算法的时间复杂度是O(log(N))。还不错。

    (一)Back to our problem – 回到问题上来

    文章内容非常抽象,让我们回到问题上来。除了简单的整数型数据,考虑一下字符串,它是用于在前面的表中表示某个人的所属国家信息的。假设,你已经构建了一个树,包含前面表中的“country”字段数据。

    1. 你想知道哪些人在UK工作
    2. 你需要查找树,找到UK的节点。
    3. 在UK节点内,你能找到所有在UK工作人数据的对应数组行号索引信息。

    这个查询操作仅耗费了Log(N)步操作,而不是直接在数组中查询所需要的N步。现在你也能猜到数据库索引是什么东西了吧?

    你能为任意多列数据建立索引(一列字符串,一列整型数,2列字符串,一列整型 + 一列字符串,一列日期类型等等)。只要你对这些列实现了比较函数,你就能控制主键在树中的排列顺序(数据库已经为基本数据类型实现了比较函数)。

    (二)B+ tree index – B+树索引

    尽管上面的二叉树在查询某个固定值时工作得很好,但是如果要查询某个范围内的数据性能就非常低。它需要花费N步操作,因为需要比较树中的每一个节点以判断它是否在指定的范围内。此外,这种方式也很耗费I/O资源,因为要读取整个索引树。我们需要找到一种高效的范围查询方法(range query)。为了解决这个问题,现代数据库使用B+树,B+树是前面二叉查询树的优化。在B+树里面:

    1. 只有叶子节点存储关联表的每一行数据对象的指针(译者注:这里的指针是指能快速找到数据本身的数组行号,哈希表的key等索引,不是C 语言中的pointer, 下同)。
    2. 其它节点的用途只在查询的时候帮助路由到想找的叶子节点。

      这里写图片描述

      如上图所示,B+树存储了更多冗余的节点(2倍)。树内部多出了一些附属节点,这些(decision nodes)的作用是帮助你找到正确想要的叶子节点(存储了表数据指针的节点)。B+树的查询时间复杂度仍然是Log(N), 树仅仅只是多出了一层。最大的差异是,叶子节点中存储了指向下一个节点的指针。

    在这个B+树里面,如果你查找40到100之前的数据:

    1. 你只需要查询值为40的节点(或者比40稍大的节点,如果40的节点不存在的话)。查询方式跟之前的二叉树一样。
    2. 收集40后继的节点,通过它存储的指向后继结点的指针,直到遇到100(或者比100稍小的数).

    假如,你需要查询M个节点,树有N个节点。查询指定的值(40)的时间复杂度是Log(N), 跟之前的二叉树查询一样。但是,一但你找到了节点(40),你还需要通过M步操作,遍历收集M个后继结点。B+的range query的时间复杂度是O(M+Log(N)), 相比之前二叉树O(N)复杂度,性能提升很多。数据量越大,性能提升越明显。你不需要读取整颗树,这也意味着更小的磁盘I/O。

    但是,这也带来了新的问题(再一次遇到问题)。如果你往数据库添加或者删除一行记录,同时也需要在B+树中更新数据:

    1. 你需要保证B+树中的节点顺序,否则你无法在一个混乱的树中查找节点。
    2. 你必须要保证叶子节点的从小到大的顺序排列,否则range query的时间复杂度将由O(Log(N))退化为O(N)。

    换句话说,B+树必须要有自我调整树平衡性和节点顺序的能力。谢天谢地,智能化的数据删除和数据插入操作使得B+树的能保持以上特征。这也带来了成本:插入和删除数据的时间复杂度是O(Log(N)), 这也是为什么你经常会听到这样一种观点:索引太多不是什么好事。实际上,这会降低插入/更新/删除操作的效率,因为数据库需要同时更新表的索引,每个索引花费O(Log(N))的时间。

    译者注:凡事都有两面,有利必有裨;选择什么样的数据结构,是根据你的应用场景来的。

    另外,索引也会增加tansaction manager的复杂度(最后一张将讲到tansaction manager)。

    更多的细节,你可以在维基百科上搜索B+ Tree。如果你想要一个B+树实现的样例,你可以读一下这篇文章(https://blog.jcole.us/2013/01/07/the-physical-structure-of-innodb-index-pages/), 这篇文章的作者是MySQL的核心开发人员。他详细讲述了innoDB(MySQL数据库引擎)是如何实现索引的。

    四、Hash Table – 哈希表

    最后一种重要的数据结构是hash table。当你需要快速查找一个数据时,hash table非常有用。另外,理解了hash table将帮助我们理解后面将提到的一种常用数据库连接技术:hash join。Hash table也经常用于存储一些数据库的内部管理数据,如lock table,buff pool等。这些概念在后面都会讲到。

    Hash table是一种能根据关键字快速查找数据的数据结构类型。构建hash table需要定义如下一些内容:

    1. 对象关键字
    2. 为关键字定义的哈希函数(hash function)。对象的关键字用哈希函数计算的结果表示了对象存储的位置(称为buckets)。
    3. 对象比较函数。一旦找到了对象所在的bucket,接下来需要在bucket内部,通过比较函数找到对应的对象。

    (一) A simple example - 一个hash table的样例

    这里写图片描述

    这个hash table有10组bucket。我只在图中画了5组bucket,另外5组 请自行脑补。Hash function我定义为除10求模(除以10求余数),换句话讲,我可以通过数值的最后一位数字确定bucket。

    1. 如果数字的最后一位是0,将数值存储到bucket 0中
    2. 如果数字最后一位是1,将数值存储到bucket 1中
    3. 如果数字最后一位是2,将数值存储到bucket 2中
    4. …..

    比较函数我采用判断两个整型数值是否相等的方法比较。

    我们看一下如何找到hash table中找到元素78:

    1. 通过哈希函数计算得到哈希值8
    2. 在bucket 8中查找元素,第一个元素就是78
    3. 返回元素78
    4. 查询只需要执行两个步骤:第一步是计算哈希值,确定bucket位置;第二步在bucket中查看元素。

    我们再看一下如何查找元素59:

    1. 计算哈希值,得到9
    2. 在bucket中查找元素59。第一个元素是99,99!=59,99不是要查找的元素。
    3. 采用同样的方式,查找第二个元素(9),第三个元素(79),… 最后一个元素(29)。
    4. 不存在59这个元素
    5. 本次查询执行了7步操作

    (二)A good hash function – 一个好的哈希函数

    如你所见,查询不同的值,时间复杂度是不同的。

    如果你将哈希函数改为除以1000000取模(取数字的最后6位数,作为bucket标识)。上面的第二次查询只需要一步(在bucket 59中没有任何数据)。找一个好的哈希函数,保证每个bucket中存储尽可能少的数据,是非常困难的。

    在上面的例子中找一个好的hash function非常容易。但这仅仅是一个简单的样例,如果关键字是如下数据类型,将非常困难:
    1. 一个字符串(例如表示人的名)
    2. 两个字符串(例如同时表示人的姓和名)
    3. 两个字符串 + 一个日期(例如表示人的姓、名及生日)

    设计一个好的hash function,哈希表的查询时间可以为O(1)。

    五、Array VS Hash table

    为什么不使用数组? 问得好。

    1. Hash table支持将部分内容加载到内存,另一部分保存在磁盘上。不必把整颗树加载到内存,节省内存空间。
    2. 数组必须使用连续的内存空间。如果要加载一张大表数据到内存,很难找到一大片连续的内存空间。内存分配失败的风险很大。
    3. Hash table支持选择你想要的任意字段作为关键字(例如:人的所属国家,加上人的姓名。任意组合)。

    想了解更多的信息,你可以读一下介绍Java如何实现hash map的文章,它是hash map高效实现的一个样例。当然理解本文中概念,你不需要懂JAVA。

    展开全文
  • 本文成文于2014年2月,背景是TiEAF(基础业务平台)设计之初“模型树”的存储方式选型。笔者在文中对关系数据库中常用的树型结构的存储方式进行了描述和辨析。现将其整理发表以供读者参考。
  • 而不同的数据库是按不同的数据结构来联系和组织的。  1.数据结构模型  (1)数据结构  所谓数据结构是指数据的组织形式或数据之间的联系。如果用D表示数据,用R表示数据对象之间存在的关系集合,则将DS=(D...
  • 关系数据模型和关系数据库系统

    万次阅读 2017-02-12 13:10:58
    关系数据模型和关系数据库系统
  • 数据库关系型和结构

    千次阅读 2015-03-26 13:38:50
    这个模型包括关系数据结构、关系操作集合、关系完整性约束三部分。关系数据结构我理解就是实体关系模型,ER Model是1976年提出,就是二维表格模型。一般建模用ER图。关系型数据库就是由二维表及其之间的联系组成的一...
  • 关系型数据库与非关系数据库区别

    千次阅读 2019-02-22 10:57:57
    关系数据库最典型的数据结构是表,由二维表及其之间的联系所组成的一个数据组织 优点: 1、易于维护:都是使用表结构,格式一致; 2、使用方便:SQL语言通用,可用于复杂查询; 3、复杂操作:支持SQL,可用于一个...
  • 关系数据库与非关系数据库的区别

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

    千次阅读 2015-05-05 09:57:12
    SQL(Structured Query Language)结构化查询语言,是关系数据库的标准语言 SQL是一个通用的、功能极强的关系数据库语言SQL特点1.综合统一 集数据定义语言(DDL),数据操纵语言(DML),数据控制语言(DCL)功能于...
  • 关系数据库与非关系型数据库简介

    千次阅读 2021-02-23 14:17:27
    关系数据库与非关系型数据库一、相关概念 一、相关概念 ●关系型数据库: 关系型数据库是一个结构化的数据库,创建在关系模型(二维表格模型)基础上,一般面向于记录。 SQL语句(标准数据查询语言)就是一种基于关系型...
  • 关系数据库与对象数据库

    千次阅读 2019-08-12 16:01:38
    关系数据库(英语:Relational database),是创建在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库数据。现实世界的各种实体以及实体之间的各种联系均用关系模型来表示。关系模型是由...
  • poi从excel读取父子关系型(树形)数据结构数据库
  • 一、关系数据结构及形式化定义 1、关系 关系模型的数据结构非常简单,只包含单一的数据结构——关系。在用户看来,关系模型数据的逻辑结构是一张扁平的二维表。 1.1域 域是一组具有相同数据类型值的集合。 ...
  • 关系数据库和非关系数据

    千次阅读 2019-06-10 15:01:48
    关系数据库最典型的数据结构是表,由二维表及其之间的联系所组成的一个数据组织 当今十大主流的关系数据库 Oracle,Microsoft SQL Server,MySQL,PostgreSQL,DB2, Microsoft Access, SQLite,Teradata,...
  • 层次数据模型     定义:层次数据模型是用树状<...其实层次数据模型就是的图形表示就是一个倒立生长的树,由基本数据结构中的树(或者二叉树)的定义可知,每棵树都有且仅有一个根节点,其余的...
  • 数据库中的Schema是什么?

    万次阅读 多人点赞 2018-01-10 13:14:35
    数据库中,schema(发音 “skee-muh” 或者“skee-mah”,中文叫模式)是数据库的组织和结构,schemas andschemata都可以作为复数形式。模式包含了schema对象,可以是表(table)、列(column)、数据类型(data type...
  • 关系数据库原理、数据模型

    千次阅读 2008-12-06 13:55:00
    数据库是以某种数据模型所确定的数据结构方式来组织和存储某个组织(或部门)相互关联的数据集。数据库管理系统是一种帮助用户建立、使用、管理和维护数据库的计算机系统软件。或者说,数据库管理系统是开发一个实际...
  • 常见的关系数据库和非关系数据及其区别

    万次阅读 多人点赞 2018-08-11 12:18:00
    关系数据库最典型的数据结构是表,由二维表及其之间的联系所组成的一个数据组织优点:1、易于维护:都是使用表结构,格式一致;2、使用方便:SQL语言通用,可用于复杂查询;3、复杂操作:支持SQL,可用于一个表...
  • 目录: 1.什么是数据库 2.数据库的种类 3.数据库的存储方式 4.关系数据库的优缺点及使用场景 ...数据库根据其数据的存储方式可以分为关系数据库和非关系数据库。常见的关系数据库有Oracle、D...
  • 关系数据库与非关系数据库详细比较

    千次阅读 多人点赞 2018-11-12 11:06:02
    关系数据库与非关系数据库详细比较 ...3.非关系数据库中,我们查询一条数据,结果出来一个数组,关系数据库中,查询一条数据结果是一个对象。 区别 关系数据库 ...
  • 浅析关系数据库和NoSql非关系数据库

    千次阅读 2015-08-19 18:54:00
     支持关系模型的数据库系成之为关系数据库,是目前各类数据库使用最为广泛的数据库系统。关系数据库在经过二十几年的发展,已经变的功能强大,使用广泛,产品成熟的数据库系统,现在使用主流的数据库都为关系型...
  • 数据库是指按照一定数据结构和模型来组织、 存储和管理数据的仓库。 采用 关系模型建立起来的数据库叫做关系数据库关系数据库是建立在集合代数基础 上, 应用数学方法来处理数据库的数据。 现实世界的各种...
  • 关系数据库,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库数据。简单说,关系型数据库是由多张能互相联接的二维行列表格组成的数据库。 关系模型就是指二维表格模型,因而一个...
  • 一类信息能够用数据或统一的结构加以表示,我们称之为结构数据,如数字、符号;而另一类信息无法用数字或统一的结构表示,如文本、图像、声音、网页等,我们称之为非结构数据结构数据属于非结构数据,是非...
  • 关系数据库关系数据模型关系是一个数学概念。 当把关系的概念引入到数据库系统作为数据模型的数据结构时,既有所限定和也有所扩充。 关系的数学定义例: 课程={离散,C语言…..},学生={张三,李四…..} 笛卡儿积...
  • 关系数据库设计理论

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

    千次阅读 2016-05-20 14:52:29
    最近经常听到NoSql,不知道什么意思,百度之,发现NoSql就是泛指的非关系数据库。...2.非关系数据库对事务没有需求,不需要严格的保证数据的一致性。 3.非关系数据库追求的是高并发,高扩展性

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 623,240
精华内容 249,296
关键字:

关系数据库中关系数据结构是

数据结构 订阅