数据库内核:数据库前置知识点

数据模型

网络数据模型

Schema

网络数据模型schema

Instance

网络数据模型instance

满足以下两个条件的模型称为网络数据模型:

  • 允许一个以上的节点无双亲,例如 SUPPLIER 和 PART 节点。
  • 一个节点可以有多余一个的双亲,例如 SUPPLY 节点有 SUPPLES 和 SUPPLED_BY 两个双亲节点。

层次数据模型

Schema 和 Instance

层次数据模型

层次数据模型采用树形结构来表示实体与实体之间的关系。需要满足以下两个条件:

  • 有且只有一个节点没有双亲,这个节点称为根节点例如 SUPPLIER 节点。
  • 根节点以外的其他节点有且只有一个双亲,例如 PART 节点。

关系数据模型

Schema

关系数据模型schema

Instance

关系数据模型instance

关系数据模型中的数据逻辑结构是一张二维表,它由行和列组成。关系的每一个分量必须是一个不可分割的数据项,不允许表中还有表。

  • 关系(Relation):一张表就是一个关系。
  • 元组(Tuple):表中的一行数据就是一个元组。
  • 属性(Attribute):表中的一列表示同一属性。
  • 码(Key):也称为键,用于表示元组的唯一性。
  • 分量:元组中的一个属性值。

优缺点对比

优点 缺点
网络数据模型 关系表示直接,存取效率高 结构复杂,引用程序访问时,必须选择适当的路径
层次数据模型 结构简单,查询效率高 多对多关系表示不方便,对插入和删除操作的限制条件多
关系数据模型 表示方便,表中行和列没有顺序 存取路径对用户透明,查询效率不高,关系必须规范化

面向对象数据模型

Instance

面向对象数据模型1

面向对象数据模型2

通过紧密耦合对象和数据库,避免“关系对象阻抗不匹配”。这类数据模型在现在的主流数据库中几乎没有使用,但是其思想在 XML、JSON 等技术中有所体现。

DBMS

数据库管理系统(DBMS)是对数据进行管理的大型系统软件。

功能

  • 数据定义:存储、修改数据和元数据
  • 约束定义、存储、维护和检查
  • SQL:对数据的声明性操作
  • 通过视图、触发器和过程的可扩展性
  • 查询重写(规则)、优化(索引)
  • 事务处理、并发和恢复

数据定义(DDL,Data Define Language)

数据定义:定义数据的三级模式结构(模式、内模式、外模式),定义二级映射(模式-内模式、外模式-模式),定义相关的约束条件。

关系数据:关系(表)、元组、值、类型、约束。

DBMS 通常将元数据存储为特殊表(Catelog)。

指定约束是数据定义的一个重要方面:

  • 属性(列)约束
  • 元组约束
  • 关系(表)约束
  • 引用完整性约束

数据修改(DML,Data Manipulation Language)

数据修改:实现对数据库的基本操作,包括检索、更新(增删改)。SQL 就是 DML 的一种。

大多数 DBMS 还提供批量下载和上传机 制:

  • 转储数据和模式的文本副本
  • 将数据和模式信息加载到数据库中

在 PostgreSQL 中:

  • pg_dump 应用程序转储数据库
  • 复制 SQL 命令加载整个表

架构

DBMS 体系结构的基本原则:

  • 数据永久存储在大型慢速设备上(有可能已经被打破)
  • 数据在小型快速存储器中处理(内存)

数据库系统实现的复杂性在于:

  • 可能对数据结构进行多次并发访问,不仅仅是数据表,还有索引、缓冲区、目录等
  • 事务性需求(原子性、回滚等)
  • 原始数据的高可靠性要求(恢复)
  • 锁定有助于并发,但可能会降低性能
  • 可能需要新的“并发容忍”数据结构
  • 事务和可靠性需要某种形式的日志记录

Silberschatz/Korth/Sudarshan (SKS) 架构:

SKS

Elmasri/Navathe (EN) 架构:

EN

Ramakrishnan/Gerhke (RG) 架构:

RG

PostgreSQL 的实用性

PostgreSQL 的 SQL 大多数是标准的(但有扩展)。

用户层面可见的差异:

  • 属性包含原子值的数组
  • 表类型继承,表值函数

实现层面的差异:

  • 引用完整性检查是通过触发器完成的
  • 视图是通过查询重写规则实现

PostgreSQL 存储过程与 SQL 标准不同

  • 只提供函数,不提供过程(但函数可以返回 void)
  • 允许函数重载(相同的函数名称,不同的参数类型)
  • 为函数提供自己的类似 PL/SQL 的语言

并发是通过多版本并发控制(MVCC,Multi-Version Concurrency Control)来处理的

  • 数据库存在多个“版本”
  • 事务可以看到在开始时有效的版本
  • 读与写操作不会相互阻塞
  • 旧版本元组的需要额外的存储

允许事务对并发指定一致性级别

  • 读取-提交级别(允许有一些不一致),可序列化级别(不允许有不一致)
  • 默认隔离级别是读取-提交级别

显式的锁定也是可以使用的

  • 不同的类型:共享锁/独占锁,行锁/表锁
  • 通过超时的方式来检测死锁的存在

PostgreSQL 有一个定义明确且开放的可扩展性模型

  • 存储过程作为字符串保存在数据库中,允许使用各种语言,语言解释器可以集成到 PostgreSQL 引擎中。
  • 可以添加新的数据类型、运算符、聚合、索引,通常需要用 C 语言编写代码,遵循相应的 API。对于新的数据类型,需要编写输入/输出函数。对于新的索引,需要实现文件结构。
  • 有额外的数据类型:嵌入式的(几何、点、线等等)、分布式的(复数、ISBN/ISSN、加密密码)。
  • 更广泛的访问方法:B 树、线性散列、R 树、GiST/GIN 索引、全文索引。
posted @ 2023-06-15 16:10  FireOnFire  阅读(83)  评论(0)    收藏  举报