分类: 数据库

  • 数据库系统概论

    第一章: 绪论

    数据库数据三个基本特性:

    • 永久存储
    • 有组织
    • 可共享

    数据库管理系统(DataBase Management System, DBMS)主要功能:

    • 数据定义功能 – DBMS提供数据定义语言(Data Definition Language, DDL)
    • 数据组织, 存储和管理
    • 数据操纵功能:
    • 数据库的事务管理和运行管理 – 保证数据安全性, 完整性, 多用户对数据的并发使用, 发生故障后的系统恢复
    • 数据库的建立和维护功能 – 初始数据的输入, 转换功能

    数据库系统(DataBase System, DBS)

    • 数据库
    • 数据库管理系统(及其开发工具)
    • 应用系统
    • 数据库管理员

    数据库系统的特点

    • 数据结构化
    • 数据共享性高, 冗余度低, 容易扩充
    • 数据独立性高: 物理独立性, 逻辑独立性
    • 由DBMS统一管理和控制

    数据模型(Data Model)

    按模型应用的不同目的分为两类

    • 概念模型: 按照用户观点进行建模, 描述数据库的语义
    • 逻辑模型: 层次模型, 网状模型, 关系模型, 面向对象模型, 对象关系模型 – 按计算机系统的观点进行数据建模, 主要进行DBMS的实现1
    • 物理模型: 对数据最底层的抽象, 描述数据在系统内部的表示方式和存取方法, 面向计算机系统.

    数据模型的组成要素

    • 数据结构
    • 数据操作: 查询和更新(插入, 删除, 修改)
    • 数据的完整性约束条件: 关系模型中, 任何关系必须满足实体完整性(关键字唯一确定一条记录)和参照完整性(数据一致性)

    基本概念

    • 实体(Entity): 客观存在并可相互区别的事物
    • 属性(Attribute): 实体所具有的某一特性
    • 码/关键字(Key): 唯一标识实体的属性集
    • 域(Domain): 一组具有相同数据类型的值的集合, 属性的取值范围来自某个域
    • 实体型(Entity Type): 抽象一类具有相同特征的实体, 即实体类型
    • 实体集(Entity Set): 统一类型实体的集合
    • 联系(Relationship): 实体内部的联系: 组成实体的各属性之间的联系; 实体之间的联系: 不同实体集之间的类型
      • 一对一联系:(1 : 1) 两实体集之间一对一的关系
      • 一对多联系(1 : n): 对实体集A中的每一个实体, 实体集中有n个实体与之可联系.
      • 多对多联系(m : n)

    概念模型表示方法: 实体-联系图(E-R图)

    实体型: 用矩形表示;

    属性: 用椭圆型表示, 并用无向边与其相应实体型联系起来;

    联系: 用菱形表示, 并用无向边分别与有关实体型连接起来, 在边旁标上联系的类型;

    数据库系统的三级模式结构

    • 外模式(子模式/用户模式): DB用户能看见和使用的局部数据的逻辑结构和特征的描述
    • 模式(逻辑模式): DB中全体数据的逻辑结构和特征的描述, 是所有用户的公共数据视图
    • 内模式(存储模式): 数据物理结构和存储方法的描述, 是数据在数据库内部的组织方式 -> 保证物理独立性

    三大完整性

    • 实体完整性: 主码唯一且非空: 不唯一则拒绝插入/修改
    • 参照完整性: 外码的约束
    • 用户定义完整性: 属性上约束条件的定义

    第二章: 关系型数据库

    1. 域(Domain): 一组具有相同数据类型的值的集合
    2. 笛卡尔积(Cartesian Product): 给定一组域, 这些域可以相同, 其笛卡尔积为所有域的所有取值的集合.
    3. 元组(Tuple): 笛卡尔积中每一个元素称作一个n元组.
    4. 分量(Component): 笛卡尔积元素中的每一个值都是一个分量
    5. 基数(Cardinal number): 域空间的状态数, 或者取值范围的大小.
    6. 关系(Relation): D1*D2…*Dn的子集称做在域上的关系, 表示: R(D1, D2, …, Dn)
      • 关系即二维表, 每行对应一个元组, 每列对应一个域, 一个属性.
    7. 码:
      • 候选码(Candidate key): 关系中的某一属性组的值能唯一标识一个元组, 称为候选码
      • 全码(All-Key): 关系模式中的所有属性组是这个关系模式的候选码
      • 主码(Primary key): 若一个关系有多个候选码: 则选定其中一个为主码:
      • 超码: 能推出所有属性的属性组的集合, 候选码是极小的超码集, 是超码的子集
    8. 属性
      • 主属性: 包含在任何一个候选码中的属性
      • 非主属性: 不包含在任何一个候选码中的属性

    三类关系

    1. 基本关系(基本表/基表): 实际存在的表, 是实际存储数据的逻辑表示
    2. 查询表查询结果对应的表
    3. 视图表由基本表或其他视图表导出的表, 是虚表, 不是实际存储的数据, 而是基表的部分引用

    基本关系的性质:

    1. 列是同质的(Homogeneous)
    2. 不同列可出自同一域, 每列称为一个属性
    3. 列的顺序无关紧要

    关系模式

    关系模式(Relation Schema) 是对关系的描述, 关系模式是型, 关系是值

    关系模式 – structure type; 关系: object of structure

    定义: R(U, D, DOM, F)

    R: 关系名

    U: 组成该关系的属性名集合

    D: 属性组U中属性所来自的域

    DOM: 属性向域的映像(映射)集合

    F: 属性间的数据依赖关系集合, 或者说该关系模式的约束

    关系数据库

    在一个给定的应用领域中, 所有关系的集合构成一个关系型数据库

    1. 关系型数据库的型: 关系型数据库的模式, 或者说对关系数据库的模式
    2. 关系型数据库模式: 若干域的定义
    3. 关系数据库的值: 关系模式在模式可对应的关系的集合, 简称为关系数据库

    关系模型的存储结构

    1. 一个表对应一个操作系统文件, 将物理数据组织交给操作系统完成
    2. 从操作系统申请若干大文件, 自己划分文件空间, 表等结构

    基本关系操作

    1. 常用关系操作:
      • 查询: 选择, 投影, 连接, 除, , 交, , 笛卡尔积等, 加粗为五种基本操作
      • 数据更新: 插入, 删除, 修改
    2. 关系操作的特点:
      • 集合操作方式: 操作对象和结果都是集合

    关系数据库语言的分类

    1. 关系代数语言: 用对关系的运算表达查询要求: e.g: ISBL
    2. 关系演算语言: 用谓词表达查询要求
      • 元组关系演算语言: 谓词变元的基本对象是元组变量e.g: ALPHA, QUEL
      • 域关系演算语言: 谓词变元的基本对象是域变量e.g: QBE
    3. 具有关系代数和关系演算双重特点的语言: SQL

    关系的完整性

    • 实体完整性(Entity Integrity)
      • 若属性A是基本关系R的主属性, 则A不能取空值, 所有基本关系的主属性都不能取空值, 或称主码不能为空
    • 参照完整性
      • 若属性(组)F是基本关系R的外码, 其与基本关系S的主码KS相对应, 则对于R在每个元组在F上的值必须为: 空值(F的每个属性值均为空值), 或等于S中某个元组的主码值(引用要么为空, 要么必须有效)
      • 关系模型中实体及实体间的联系都是用关系来描述的, 存在关系与关系间的引用
    • 用户定义的完整性
      • 针对某一具体关系数据库的约束条件, 反映某一具体应用所涉及的数据必须满足的语义要求

    实体完整性和参照完整性在关系模型必须满足, 称为关系的两个不变性

    外码(Foreign Key)

    设F为基本关系R的一个或一组属性, 但不是关系R的码. 若F与基本关系S的主码Ks相对应, 称F为基本关系R的外码.

    外码用来建立表之间的关联关系

    R: 称为参照关系(Referencing Relation), 一般在从表中

    S: 称为被参照关系(Referenced Relation), 一般在主表中

    外码不一定要与相应的主码同名, 但当外码与相应的主码从属于不同关系时, 往往取相同名字, 以便于识别.

    关系理论

    函数依赖

    1. 非平凡的函数依赖: X -> Y, Y !≤ X: X可以推出Y, 但Y不是X的子集
    2. 平凡的函数依赖: X -> Y, Y ≤ X 一般情况下, 某个集合总能推出其子集, 也就是平凡的函数依赖
    3. 完全函数依赖: X -> Y, 且对于X的任意真子集X’, 都有X’ -/-> Y, 称Y完全函数依赖于X, 记作 X -F-> Y
    4. 部分函数依赖: Y不完全函数依赖于X, 记作X -P-> Y, 例如A -> C, 又 AB -> C, 那么C部分函数依赖于AB, 此时造成数据冗余.

    求候选码的方法:

    集合 U = {A, B, C, D, E, F, G}, 函数依赖集F = {AB -> C, CD -> E, E -> A, A -> g}

    • 找出一定属于候选码的属性: 只出现在左边, 或左右都没出现,
    • 可能属于候选码的属性: 左右都出现
    • 不属于候选码的属性: 只出现在右边

    进行闭包运算: 设有集合X := {该属性组}

    X(0) = 自身

    X(1) = X(0) 中的属性所能推出的

    以此类推, 直到X(k) = U或者X(k) = X(k – 1), 就求得了属性组的闭包(X)+F

    对其他属性组也进行闭包操作, 比较哪些更少的属性能推出所有属性, 从而得到其候选码.

    闭包运算还可用于判断X -> Y是否成立: 当Y 是X的闭包的子集时, 有 X -> Y

    关系代数

    关系代数: 一种抽象的查询语言, 是对关系的运算来表达查询

    运算对象是关系, 运算结果也是关系

    按运算符不同可分为传统集合运算专门的关系运算两类

    • 集合运算: 从关系的水平方向(行的角度考虑)
      • 交, 并, 差 -> n目关系, 由运算数的若干元组组成
      • (广义)笛卡尔积 -> 将两关系的所有元组进行组合, 生成新关系
    • 专门的关系运算: 行列都有
      • 选择(σ), 选择一个关系R的某个属性, 设r∈R, r为R的一个元组, r[Ai]标识元组r中属性Ai的值
      • 投影(π),
      • 连接(θ), 从两关系的笛卡尔积中选取属性间满足一定条件的元组
        • 等值连接
        • 自然连接(特殊的等值连接)

    范式

    1. 1NF: 第一范式, 所有属性都是不可分割的数据项(所有数据项都是原子项), 1NF是关系数据库需要满足的最低要求
    2. 2NF: 在满足1NF的前提下, 不包含非主属性对码的部分函数依赖(即每一个非主属性都完全依赖于码)
    3. 3NF: 在满足2NF的前提下, 不包含非主属性对码的传递函数依赖(即码应该直接决定非主属性, 不能间接决定)
    4. BCNF: 消除任何属性对候选码的传递依赖, 即每一个决定因素(推导公式的左部)都包含码, 表现在函数依赖集中, 左边的都包含候选码(整个属性组)
    5. 4NF: 不允许有非平凡函数的多值依赖