What is a good data model?

数据模型

  • 数据的逻辑组织方式(数据的基本结构和结构的语义)
    • 文档模型(MongoDB 2000s)
    • 关系模型(SQL DB 1970s~80s)
    • 层次模型(IBM IMS 1960s)
    • 网状模型(GE IDS 1960s)
  • 数据模型决定了数据的访问形式(接口),因此决定了系统的功能性和易用性。

Schema

  • 对数据库中数据的结构性描述
    • 参照schema才能正确书写查询
  • 一种数据库的元数据(Metadata)
    • 描述数据库中有什么样的数据
    • Metadata:Data about data
  • DataModel相当于Schema的Metadata,即MetaMetadata!
  • schema.png

表达能力

  • 如何衡量数据模型的表达能力?
    • 数据本身能够表达什么信息?
      • 计算机能够理解的信息
    • 查询能够满足哪些信息需求?
  • 表达能力的两个维度
    • 表达能力的范围:能够满足哪些信息需求
      • 上限为Turing Completeness
      • 计算机的表达能力上界,数据库无法达到
    • 表达的精简程度:用户描述需求是否方便
      • Prolog比Java更精简更强
  • DeclarativeLanguage(声明式程序设计语言)
    • 相对于ProceduralLanguage(过程式语言)
      • 表达更精简,只需要告诉程序要什么,而不是怎么要
    • 例子
      • FirstOrder Logic
      • Prolog
      • SQL/CRUD
    • 对DBMS的智能提出了更高要求!

关系模型

关系

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

结构

  1. 关系

    • D1×D2××DnD_1×D_2×…×D_n的子集叫作在域D1,D2,,DnD_1, D_2,…,D_n上的关系,表示为R(D1,D2,,Dn)R(D_1,D_2,…,D_n)

    • R:关系名

    • n:关系的目或度(Degree)

  2. 元组

    • 关系中的每个元素是关系中的元组,通常用t表示。
  3. 单元关系与二元关系(n-ary)

    • 当n=1时,称该关系为单元关系(Unaryrelation)或一元关系

    • 当n=2时,称该关系为二元关系(Binaryrelation)

  4. 关系的表示

    • 关系也是一个二维表,表的每行对应一个元组,表的每列对应一个域
  5. 属性

    • 关系中不同列可以对应相同的域
    • 为了加以区分,必须对每列起一个名字,称为属性(Attribute)
    • n目关系必有n个属性
    • 候选码(Candidatekey)
      • 若关系中的某一属性组的值能唯一地标识一个元组,则称该属性组为候选码
      • 简单的情况:候选码只包含一个属性
    • 全码(All-key)
      • 最极端的情况:关系模式的所有属性组是这个关系模式的候选码,称为全码(All-key)
    • 主码
      • 若一个关系有多个候选码,则选定其中一个为主码(Primarykey)
      • 主码也可以由多个属性组成
    • 主属性
      • 候选码的诸属性称为主属性(Primeattribute)
      • 不包含在任何侯选码中的属性称为非主属性(Non-Primeattribute)或非码属性(Non-keyattribute)
  6. 基本的关系性质

    • 列是同质的(Homogeneous)
    • 不同的列可出自同一个域
      • 其中的每一列称为一个属性
      • 不同的属性要给予不同的属性名
    • 列的顺序无所谓,,列的次序可以任意交换
    • 任意两个元组的候选码不能相同
    • 行的顺序无所谓,行的次序可以任意交换

关系代数

  • 关系代数是一种抽象的查询语言,它用对关系的运算来表达查询
  • 关系代数
    • 运算对象是关系
    • 运算结果亦为关系
    • 关系代数的运算符有两类:集合运算符和专门的关系运算符
    • 传统的集合运算是从关系的“水平”方向即行的角度进行
    • 专门的关系运算不仅涉及行而且涉及列

选择

  • 选择运算是从关系R中选取使逻辑表达式F为真的元组,是从行的角度进行的运算
  • selection.png

投影

  • 投影操作主要是从列的角度进行运算
  • 投影之后不仅取消了原关系中的某些列,而且还可能取消某些元组(避免重复行)
  • project.png

连接

  • 等值连接
  • 自然连接
    • 去除冗余行
  • 悬浮元祖(Dangling tuple)
    • –两个关系R和S在做自然连接时,关系R中某些元组有可能在S中不存在公共属性上值相等的元组,从而造成R中这些元组在操作时被舍弃了,这些被舍弃的元组称为悬浮元组。
  • 外连接(OuterJoin)
    • 如果把悬浮元组也保存在结果关系中,而在其他属性上填空值(Null),就叫做外连接
    • 左外连接(LEFTOUTER JOIN或LEFTJOIN)
      • 只保留左边关系R中的悬浮元组
    • 右外连接(RIGHTOUTER JOIN或RIGHTJOIN)
      • 只保留右边关系S中的悬浮元组
  • 一般的连接操作是从行的角度进行运算
  • row.png

表达能力范围比较

compare.png

results matching ""

    No results matching ""