数据模型

#

好系统的标准

  • 功能通用、完善
    • 满足尽量多应用的需求
  • 实现细节对应用透明
    • 应用开发独立于系统实现

数据模型定义

  • 数据的逻辑组织方式(数据的基本结构和结构的语义)

    • 文档模型(Mongodb 2000s)
    • 层次模型(IBM IMS 1960s)
    • 网状模型(GE IDS 1960s)
    • 关系模型(SQL DB 1970s~80s)
  • 注:数据模型—决定—> 数据的访问方式 / DBMS的访问接口——> 系统的功能性、性能、易用性

数据库模式(Schema)

  • 对数据库中数据的结构性描述

    • 参照schema才能正确书写查询
  • 一种数据库元数据(Metadata),描述数据长什么样子(相当于一个模板)

    1
    2
    3
    4
    5
    6
    Schema
    {
    Name:string,
    Manufacturer:string
    Catalog_numver:num
    }
  • Data Model相当于Schema的Metadata,即Meta Metadata
    注:Mongodb没有一个特定的schema的过程,只是程序猿在存数据的时候脑子里有这个schema

数据模型:JSON/BSON

如何衡量数据模型的能力?

表达能力:

  • 数据本身能够表达什么信息?
    • 计算机能够理解的信息
  • 查询能够满足哪些信息需求?
    注: 表达能力越强,查询时返回的值越快越准确
    

表达能力的两个维度

  • 范围:能够满足哪些信息需求
    • 上限为Turing Completeness(程序设计语言能做到的范围)(数据库的查询做不到Turing Completeness)
  • 精简程度:用户描述需求是是否方便
    • Prolog比Java表达更强更精炼,因为Prolog逻辑性强
      注:数据库系统将查询的语言转换成数据库查找的语言

数据模型的论战:

  • Charles Bachman 网状模型 Navigational Database Network Model
    Edgar F.Codd       关系模型    Relational Database Relation Model
    
  • 70年代末更倾向于关系数据库
  • 网状数据库(Navigational DB)
    a. 查询通过指针访问

  • Codd坚持的看法

    • DBMS应该和应用程序尽可能保持相互独立(模块化)
      • 数据的存放顺序与程序无关
      • 数据的使用与程序无关
      • 数据的访问方式与程序无关(网状和层次模型违背了这点)

如何避免依赖性

  • 提升数据模型的表达能力
  • 声明是程序设计语言(而不是过程式语言)
    • Prolog 、 SQL 、 First Order Logic(一阶逻辑语言)
    • 只把需求说出来,不说具体怎么做。
    • 注:关系型数据库就着重声明式语言,Mongodb是声明式语言,但是拿到数据之后,还是得通过java等过程式语言进行处理

问答:

  • 声明式程序一定比过程式的更好吗?
    • 并不是
  • 表达能力越高越好吗?
    • 不是,度的把握,如单反照相机和傻瓜相机


0%