©️ OverlookArt

数据模型

基本概念

数据模型是对现实世界数据特征的抽象。最常用的数据模型分为概念数据模型和基本数据模型

  • 概念数据模型:也称信息模型,是按用户的观点对数据和信息建模,是用户和数据设计人员交流的语言,主要用于数据库设计。这类模型中最著名的是实体-联系模型,简称 E-R 模型。
  • 基本数据模型:它是按计算机系统的观点对数据建模,是现实世界数据特征的抽象,用于 DBMS 的实现。

数据模型三要素

  1. 数据结构
  2. 数据操作
  3. 数据的约束条件

E-R 模型

E-R 模型是实体-联系模型,用来描述现实世界的概念模型,其中有三个主要概念,实体、联系和属性。

  • 实体:用矩形表示,每个实体由一组属性表示,包括主键、候选键、外键。实体集是指具有相同属性的实体集合。
  • 联系:用棱形表示,实体集之间的对应关系成为联系,分为一对一,一对多,多对多
  • 属性:用椭圆表示,是实体某方面的特性,E-R 模型中的属性分为 简单和复合属性、单值和多值属性、NULL属性、派生属性

关系模型

在数据库领域中常见的数据模型有层次模型、网状模型、关系模型和面向对象模型。关系模型是目前最常用的数据模型之一,在关系模型中用表格结构表达实体集以及实体集之间的联系。

关系代数

  • 属性和域:一个现实中的实体(事物)常用若干特征来描述。这些特征称为属性。每个属性的取值范围对应的集合称为该属性的域
  • 候选码(Candidate Key): 若关系中的某一属性火属性组的值能唯一的标识一个元组,则称该属性或属性组为候选码
  • 住码(Primary Key): 若一个关系有多个候选码,则选定其中一个为主码
  • 主属性(Non-Key attribute): 包含在任何选码中的诸属性称为主属性,不包含任何候选码中的属性称为非码属性
  • 外码(Foreign Key):如果关系模式R中的属性或属性组不是该关系的主码,但它是其他关系的主码,那么该属性或属性组是关系模式R的外码

关系的三种类型

  • 基本关系:通常又称为基本表,它是实际存在的表,是实际存储数据逻辑表示
  • 查询表:查询表是查询结果对应的表
  • 视图表:由基本表或其他视图表导出的表。由于它本身不独立存储在数据库中,数据库中只存放它的定义,所以称为虚表

关系数据库模式

关系的描述称为关系模式(Relation Schema),可与形式化的表示为 R(U,D,dom,F), R表示关系名,U是组成该关系的属性名集合,D是属性的域,dom是属性向域的映像集合,F为属性间数据的依赖关系集合。

完整性约束

完整性规则提供了一种手段来保证当用户对数据库做修改时不会破坏数据的一致性,防止对数据的意外破坏。关系模型的完整性规则是对关系的某种约束条件,关系的完整性分为三类

  • 实体完整性:关系的主属性不能取空
  • 参照完整性:外键的值或者为空,或者必须等于对应关系中的逐渐值
  • 用户定义完整性:根据语义要求所自定义的约束条件

关系运算

关系操作的特点是操作对象和操作结果都是集合,关系代数运算符有 4 类,集合运算符、专门的关系运算符、算术比较符和逻辑运算符。

关系模式在代数运算时可以理解为数据库表的运算

基本的关系代数运算

  • 并(Union): 关系R与S的属性及属性的个数相同。并的结果为属性R或属性S的元组构成的集合。
  • 差(Difference):关系R与S的属性及属性的个数相同。R-S差的结果为属性R但不属于S的元组构成的集合。
  • 广义笛卡尔积(Extended Cartesian Product): 如果关系模式R中有n个属性,关系模式S中有m个属性,则广义笛卡尔积的结果中有(n+m)个属性,其中前n个属性来自R,后m个属性来自S。
  • 投影(Projection):从关系的垂直方向进行运算。在关系R中挑选若干属性列A组成新的关系。
  • 选择(Selection):从关系的水平方向进行运算,从关系R中选择满足条件的元组。

扩展的关系代数运算

  • 交(Intersection):关系R与S的属性及属性的个数相同。关系R与S的交是由属性R同时又属于S的元组构成的集合
  • 连接(Join):连接分为0连接、等值连接和自然连接3种,连接运算是从两个关系R和S的笛卡尔积中选取满足条件的元组。
  • 除(Division):除运算是同时从关系的水平方向和垂直分析进行运算。
  • 广义投影(Generalized Projection):允许在投影列表中使用算术运算,是对投影运算的补充。
  • 外连接(Outer Join):在自然连接中关系R与S的一些元组因为没有公共属性会被抛弃。使用外连接就可以避免这样的丢失。外连接运算就是将自然连接时舍弃的元组也放入新关系,并在新增加的属性上填空值。