数据管理系统之数据模型

数据模型

好系统的标准

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

数据模型定义

  • 定义:数据的逻辑组织方式(数据的基本结构和结构的语义)
    a. 文档模型(Mongodb 2000s)
    b. 层次模型(IBM IMS 1960s)
    c. 网状模型(GE IDS 1960s)
    d. 关系模型(SQL DB 1970s~80s)

    注:数据模型—决定—> 数据的访问方式 / DBMS的访问接口——> 系统的功能性、性能、易用性

数据库模式(Schema)

  • 对数据库中数据的结构性描述
    • 参照schema才能正确书写查询
    • 一种数据库元数据(Metadata),描述数据长什么样子(相当于一个模板)
      e.g.
      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)
  • 查询通过指针访问
Codd坚持的看法
  • DBMS应该和应用程序尽可能保持相互独立(模块化)
    • 数据的存放顺序与程序无关
    • 数据的使用与程序无关
    • 数据的访问方式与程序无关(网状和层次模型违背了这点)

如何避免依赖性

  • 提升数据模型的表达能力

  • 声明是程序设计语言(而不是过程式语言)

    • Prolog 、 SQL 、 First Order Logic(一阶逻辑语言)
    • 只把需求说出来,不说具体怎么做。

    注:关系型数据库就着重声明式语言,Mongodb是声明式语言,但是拿到数据之后,还是得通过java等过程式语言进行处理

问答:

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

你可能感兴趣的:(数据管理系统)