一、数据模型
1、数据模型 三要素
数据模型 : 数据模型 是 抽象描述 数据、数据间关系、约束条件 及 操作规则 的框架 , 用于 定义数据库 如何组织、存储 和 管理数据 , 数据模型 核心三要素如下 :
- 数据结构 ( 静态组织形式 | 决定数据如何存储 ) : 用于描述 数据 的 组织形式、存储结构 及 数据间的逻辑关系 , 是 数据模型 的 骨架 , 是 数据操作 和 数据约束条件 的基础 ;
- 数据操作 ( 动态行为 | 提供数据处理能力 ) : 对数据进行的 增删改查 等操作 , 以及操作规则 ;
- 数据约束 ( 完整性规则 | 保障数据质量 ) : 限制 数据取值范围 及 关联关系 的规则 , 确保数据 有效性 和 一致性 ;
2、数据模型 种类
数据模型 有如下种类 :
- 层次模型 : 树状结构 , 父节点 有 多个子节点 , 子节点只有 唯一的父节点 ;
- 网状模型 : 图状结构 , 父节点 有 多个子节点 , 子节点可以有 多个父节点 ;
- 面向对象模型 : 以对象为单位 , 组织的数据模型 ;
- 关系模型 ( 软考重点 ) : 二维表结构 , 行表示记录 , 列表示属性 , 关系模型 的 基本结构 只记录 关系模式名称 和 相应的属性 ;
- 非关系模型 : NOSQL 模型 , 灵活的数据组织形式 , 适用于大数据、高并发场景 , 牺牲部分一致性 , 追求高扩展性 ;
二、关系模型
1、关系模型 的 表示形式
关系模型 的 表示形式 :
- 关系名称 + 属性集合形式 : 格式
关系名称 ( 属性 1 , 属性 2 , ... , 属性 n )
, 下面是一个关系模型 , 学生 是 关系名称 , 姓名和年龄 是 关系的属性 ;
学生 ( 学号 , 姓名 , 年龄 , 班级编号 )
- 1
- UF二元组形式 : 格式
关系名称 ( UF 二元组 )
, 下面的关系模型中 , U 集合是 属性集合 , F 集合是 依赖集合 , 箭头 −> 表示属性间的依赖关系 ;
学生 ( U , F )
U = {学号 , 姓名 , 年龄 , 班级编号}
F = {学号 -> 姓名 , 学号 -> 年龄 , 学号 -> 班级编号}
- 1
- 2
- 3
- 二维表 : 关系模型 是 典型的 二维表 结构 , 每个 关系模型 对应一张 二维表 , 如 : 学生 ( 学号 , 姓名 , 年龄 , 班级编号 ) 关系模型 对应的 二维表 如下图所示 , 表名 是 " 学生 " , 学生的 各个属性 对应的就是 " 列名 " , 每个学生实例 对应着 二维表 的一行数据记录 ;
- 属性 ( 列 ) : 描述数据的特征 , 如 : 学号 , 姓名 ;
- 元组 ( 行 ) : 表示具体数据记录 ;
- 主键 : 唯一标识 元组 的属性 ;
- 外键 : 建立 表间关联的约束 ;
UF 二元组 形式 是理论层面的抽象表示 , 属性集合 形式 是 UF 的简化表达 , 二维表 形式 是物理存储的直观呈现 ;
2、关系模型 的 相关概念
关系模型 的 相关概念 :
- 目 : 又称为 " 度 " , 关系模型 中 的 属性个数 ;
- 学生表 关系模型
学生 ( 学号 , 姓名 , 年龄 , 班级编号 )
的 目或度 为 4 ;
- 学生表 关系模型
- 候选键 : 又称为 " 候选码 " , 能 唯一标识元组 且 无冗余 的 最小属性集合 , 唯一标识元组 具有唯一性 , 没有冗余 说明 属性集合要极尽可能精简 , 属性集合 中 可以包含一个属性 也可以包含多个属性 ;
- 唯一性 : 确保每个元组唯一 ;
- 在 国家管理 中 , 使用 身份证号 可以唯一标识一个人 ;
- 在 班级管理 中 , 使用 学号 可以唯一标识一个人 , 在
学生 ( 学号 , 姓名 , 年龄 , 班级编号 )
关系中 , 学号 可以唯一标识一个学生 , 学号 就是 候选键 ;
- 最小性 ( 避免候选键冗余 ) : 删除 候选键 属性集合 中 的 任意属性后无法保持唯一性 , 本来 学号 已经可以唯一标识一个学生 , 但是候选键集合设置为
{学号 , 姓名}
, 显然 姓名 属性 就是冗余的 ; - 多个候选键 : 如果关系是
学生 ( 学号 , 身份证号 , 姓名 , 年龄 , 班级编号 )
, 学号 和 身份证号 都可以唯一标识一个学生 , 那么该关系有两个候选键 , 分别是{学号}
和{身份证号}
, 可以选择其中一个作为 主键 ( 主码 ) ; - 候选键有多个属性 : 选课 的关系模型中 , 一个 选课 模型 需要由 学号、课程号 两个属性确定 , 候选键为
{学号 , 课程号}
, 这两个属性种单个无法唯一确定一条选课数据 , 一个学号可能选择了多个课程 , 一个课程号可能有多个学生选择 ;
- 唯一性 : 确保每个元组唯一 ;
- 主键 : 又称为 " 主码 " , 从 多个 候选键 中 , 任选一个 候选键 作为 主键 ;
- 主属性 : 出现在 候选键 中的属性 是 主属性 ; 在
学生 ( 学号 , 姓名 , 年龄 , 班级编号 )
关系中 学号 是 主属性 ; - 非主属性 : 候选键 之外的属性 是 非主属性 ; 在
学生 ( 学号 , 姓名 , 年龄 , 班级编号 )
关系中 " 姓名、年龄、班级编号 " 是 非主属性 ; - 外键 : 又称为 " 外码 " , 引用 其他关系 主键 的属性 , 用于 维护 表间关联 ; 如 : 选课 关系中 , 候选键为
{学号 , 课程号}
, 学号 是 学生关系 的 主键 , 课程号 是 课程表 的主键 , 学号 来自其它表 是外键 ; - 全码 : 关系模型 中 所有属性组 所有属性 共同组成 候选键 , 即 无冗余属性 , 所有属性 都是该关系的 候选码 ;
3、关系模型 的 完整性约束
完整性约束 : 完整性约束 是为了 确保 数据库 修改、插入 数据时 , 不会破坏数据的一致性 , 防止数据被意外破坏 ; 完整性约束可以分为以下三类 :
- 实体完整性约束 : 主键 不重复 , 且 不为空 , 目的是 保证每个 实体 ( 表中的一行 ) 能被唯一标识 ;
- 规则案例 : 学号 唯一且非空 ; 不能插入 重复学号 的 学生实体 ;
- 参照完整性约束 : 关系 与 关系之间的引用 ; 外键 只有两种情况 : 要么是 其它关系的 主键 , 要么 是 空值 ; 作用是 维护表与表之间的引用关系 ;
- 规则案例 : 选课表的 学号 必须存在于学生表 ; 选课 实例 引用的 学生的学号 必须存在 , 引用的 课程的课程号 必须存在 ;
- 自定义完整性约束 : 用户 根据 业务需求 制定的规则 , 通常通过 检查约束 实现 , 确保数据符合实际业务逻辑 ;
- 规则案例 : 自定义规则
年龄 > 0,成绩 BETWEEN 0 AND 100
, 如果 输入 年龄=-5 或 成绩=120 则不符合自定义规则要求 ;
- 规则案例 : 自定义规则
4、关系模型 触发器
触发器 : 是数据库中的一种 特殊存储过程 , 它 在 特定 数据库事件 ( 增、删、改 ) 发生时自动触发执行 , 用于实现复杂的业务逻辑或数据约束 ;
- 触发事件 : INSERT、UPDATE、DELETE。
- 触发时机 :
- BEFORE : 事件执行前触发 , 如 : 数据合法性检查 ;
- AFTER : 事件执行后触发 , 如 : 记录操作日志 ;
- 触发条件 ( 可选 ) : 通过WHEN子句限定执行逻辑 ;
- 操作逻辑 : 触发器具体执行的 SQL 语句或业务逻辑 ;
触发器 示例 : 在插入订单前检查库存是否充足 ;
CREATE TRIGGER check_stock BEFORE INSERT ON orders
FOR EACH ROW
WHEN (NEW.quantity > (SELECT stock FROM products WHERE id = NEW.product_id))
BEGIN
RAISE_ERROR '库存不足';
END;
- 1
- 2
- 3
- 4
- 5
- 6
评论记录:
回复评论: