Dbms1
1
- 为什么要学习数据库系统?
- 数据库占有很重要的地位。数据库=技术+思维。实现信息的积累,需要管理/控制数据库。大数据是基于数据库的(farecast预测机票例子)。
- 什么是数据库?
- 数据库是电子化信息的集合。相互之间有关联关系的table的集合。
- 什么是数据库系统?
- DB,DBMS,DBAP,DBA,计算机基本系统,这5个组成的系统。
- 什么是数据库管理系统?
- 典型的DBMS有Oracle、DB2、MySQL等。
- 学什么以及学到什么程度?
- 基本概念
- 关系模型与关系运算
- 数据库语言。交互式SQL语言。语法及其交互式应用
- 数据库应用程序开发。嵌入式的语法与训练。
- 数据建模与数据库设计
- 数据库设计理论
- 数据库存储与索引技术
- 数据库基本操作的实现方法
- 数据库查询优化与查询实现
- 数据库的事务管理
- 区分: 数据库、数据库系统、数据库清理系统
- 数据库系统是包括上述几个东西的概念。
- “表”相关要素
- 按行案列形式组织的信息即是table。要知道表里有什么,首先抽象。
- 抽象:理解-区分-命名-表达
- 表名、表标题、表内容、行、列、列名、列值、模式(=表名+表标题)、表(=模式+表内容)
- 数据库系统的构成
- DB、DBMS、DBAP(数据库应用)、DBA(管理员),计算机基本系统
- 数据库管理系统的功能:用户角度、系统角度
- 用户角度
- 数据库定义:dbms提供一套DDL(数据定义语言)给用户。
- 数据库操纵:表的格式是数据库定义来做。而表的增删改查是数据库操纵来完成。DBMS提供DML(数据操纵语言)给用户。
- 数据库控制:DCL(数据控制语言)。哪些用户可使用,哪些不可以。
- 数据库维护
- 数据库语言:DDL, DML, DCL。3个总称为SQL语言
- 系统角度
- 语言编译器
- 查询优化与查询实现
- 数据存取与索引
- 通信控制
- 事务管理
- 故障恢复
- 完全性/完整性控制
- 。。。
- 用户角度
2
- 数据库系统的标准结构
- DBMS管理数据的3个层次:
- external level=user level = 局部模式,
- conceptual level = logical = 全局模式,
- internal level = physical = 存储模式
- 模式schema:数据的结构性的描述
- 数据data/视图view:表现形式下表现出来的数据
- DBMS管理数据的3个层次:
- 数据模型
- 规定模式统一描述方式的模型,包括:数据结构、操作和约束
- 关系模型:表
- 层次模型:树
- 网状模型:图
- 数据库系统的演变与发展
- 由文件系统到数据库。数据存取以记录为单位。
- 三级模式两层映像,物理独立性和逻辑独立性
- 三级模式:模式是指概念模式
- 外模式:用户能看到的局部的描述。局部模式
- 概念模式:内在本质联系,全局性的。全局模式
- 内模式:存储在介质上的数据的结构描述。物理模式,存储模式。
- 两层映像
- E-C Mapping:外模式映射为概念模式
- C-I Mapping:概念模式映射为内模式
- 数据独立:不会因为系统数据存储结构与数据逻辑结构的变化而影响应用程序
- 逻辑数据独立性:外模式->概念模式
- 物理数据独立性:概念模式->内模式
- 三级模式:模式是指概念模式
- 数据 -> 模式 -> 数据模型
- 模式是对数据本身结构形式的抽象
- 数据模型是对模式本身结构的抽象
- 关系模型的例子
- 一个数据库是由一系列模式及其数据构成的
- 网状/层次模型 -> 关系模型 -> OO数据模型
- 第一代数据库系统:基于网状模型或层次模型的数据库系统
- 第二代:基于关系模型的数据库系统
- 数据库系统与文件系统差别:数据组织依赖于具体应用程序、数据存取记录为单位进行操作、不同文件/记录之间由联系、。。。
- 关系数据库:消除指针,逐一记录操作改为记录集合,检索不依赖于路径信息,即非过程化操作
3 关系模型之基本概念
- 关系模型概述
- 关系模型是处理table的
- 3个组成部分:table/relation,关系运算(5+3),完整性约束
- 关系
- 一个关系就是一个table。笛卡尔积中具有某一方面意义的那些元组叫关系
- 属性不可再分
- 关系是以内容(名字或值)来区分的
- 关系的任意两行不能可完全相同,但关系的任意两列的值是可以完全相同的
- 候选码/候选键:可由其值能惟一标识该关系中任何元组的一个或多个属性组成
- 关系模型中的完整性约束
- 实体完整性:关系的主码中的属性值 不能为空值
- 参照完整性:如果R1的外码Fk与R2的主码Pk相对应,则R1中的每一个元组的Fk值或者等于R2中某个元组的Pk值,或者为空值 -意义:若R1的某个元组t1参照R2的某个元组t2,则t2必须存在
- 用户自定义完整性:用户针对具体的应用环境定义的完整性约束条件
- 关系相关概念:域,笛卡尔积,关系,关系模式,关键字/键/码,外码/外键,主码/主键,主属性/非主属性
- 域:domain,列的取值范围。域的元素为基数cardinality
- 笛卡尔积:cartesian product,元组及所有可能组合成的元组,笛卡尔积的每个元素称作一个n元组
- 关系:一组域的笛卡尔积的子集
- R是关系的名字,$A_i$是属性,$D_i$是属性所对应的域,$n$是关系的度
- 主码:当有多个候选码时,可选一个作为主码. 主键不允许空值
- 主属性:包含在任何一个候选码中的属性被称作主属性
- 非主属性
- 外码/外键:其它关系的候选键,可以是R中的主属性或非主属性
- 3个完整性:实体完整性,参照完整性,用户自定义完整性
4 关系模型之关系代数
关系代数运算是一种抽象的语言,是学习SQL等数据库语言的基础。集合操作与纯关系操作
- 基本操作
- 需满足并相容性
- 并:或者元组t属于R或者元组t属于S
- 差:由出现在关系R中但不出现在关系S中的元组构成
- 积:广义笛卡尔积
- 选择:关系R同时给定选择的条件con,选择运算结果也是一个关系。
- 投影:$\Pi$,从关系R中选出属性包含在A中的列构成
- 投影 从列组成新的关系,而选择从行组成
- 扩展操作
- 交:R和S并相容,则R与S的叫运算结果,
- $\theta$-链接
- 等值连接
- 自然连接:R与S的笛卡尔积中选取相同属性组B上值相等的元组所构成。是一种特殊的等值连接。R和S必须有相同的属性组B。R和S含有一个或多个共有的属性
- $\theta$-链接的属性个数>自然连接
- 组合与应用训练
- 复杂扩展操作
- 除:R$\div$S,R中除掉S中的属性
- 外连接:左/右/全外连接
- 基本操作:并、差、积、选择、投影
- 扩展操作:交、$\theta$-链接、自然连接
- 复杂扩展操作:除、外连接
5 关系演算
以数理逻辑中的谓词演算为基础。按照谓词变量不同,分为 元组/域演算。
- 关系元组演算
-
{t P(t)}。公式P(t),3种形式的公式 - $t\in R$
- $s[A]\theta c$
- $s[A]\theta u[B]$
- 全都学过:已知,Student(S#, Sname, Sage, Ssex, Sclass) Course(C#, Cname, Chours, Credit, Tnamee) SC(S#, C#, Score) \(\Pi_{Sname}(\Pi_{Sname, C\#}(Student\Join SC\Join Course)\div \Pi_C\#(\sigma_{Tname='李明'}(Course)))\)
- 至少有一没学过:
-
$R U S = {t t\in R V t\in S}$ -
差:${t t\in R\wedge \neg t\in S}$ -
积:${xy x\in R \wedge y\in S}$ - 优先级:$\wedge$ , $\vee$
-
-
关系域演算
- 安全性
1. 三种关系运算
-
递归定义
-
与、或、非、存在量词、全称量词
-
QBE语言表达查询
6 概览SQL语言
Sequel->SQL, X/Open,标准主要用于衡量产品是否符合共同的约定。SQL语言是集DDL, DML, DCL与一体的数据库语言。
- DDL:引导词为create,alter,drop
- DML:引导词insert,delete,update,select
- DDL:CREATE DATABASE, CREATE TABLE
- DML: INSERT, DELETE, UPDATE, SELECT
- SELECT语句训练:正确表达查询要求
7 SQL语言之复杂查询与视图
- 子查询
- 结果计算与聚集函数
- 分组查询与分组过滤
- 利用SQL关系代数操作
- 视图与应用
- SQL-SELECT
-
IN NOT IN , $\theta$ some, $theta$ all, Exists NOT Exists - 聚集函数, GROUP BY, HAVING
-
8 数据库完整性与安全性
- 数据库完整性
- 列约束/表约束 - 静态约束
- 触发器 - 动态约束
- 数据库安全性
- 完整性规则,静态约束/动态约束
- 安全性访问规则,权利,授权
- 在数据库的安全性控制中,授权的数据对象的范围越小,授权子系统就越灵活
- 关系模型中有三类基本的完整性约束,定义外部关键字实现的是参照完整性
9 嵌入式SQL语言(基本技巧)
- 变量声明
- 事务:一/多条SQL语句的一次执行是一个事务。begin/end transaction两行语句不需要,因为开始时有exec sql select等,结束时通过commit或rollback
- 数据库连接
- 数据集与游标
- 可滚动游标
- 数据库的增删改
- 状态捕获
- Whenever的作用范围:其后的所有Exec SQL语句直到程序中出现另一条相同条件的Whenever语句为止
- DBMS记录状态信息有三种方法: (1)sqlcode;(2)sqlca.sqlcode;(3)sqlstate
- 错误处理机制
- 数据库语言->高级语言 过程/思维
- 高级语言中处理数据库
- 游标
- 错误捕获机制
- 错误陷阱
- SQLCA
- 事务
- 保证数据正确性
10 嵌入式SQL(动态SQL)
- 动态SQL
- 动态构造
- 动态SQL执行方式
- 数据字典
- SQLDA
- SQLCA是SQL通讯区,记录着SQL语句被DBMS执行后返回的状态信息;SQLDA是SQL描述区,记录着数据库/表等对象的定义信息。
- ODBC
- JDBC
- Java.sql 核心API –J2SE(Java2标准版)的一部分。使用java.sql.DriverManager类、java.sql.Driver和java.sql.Connection接口连接到数据库
- 建立数据库 - 创建语句对象 - 用对象执行SQL - 返回结果对象 - 获取记录 - 提取属性值给高级语言变量 - 释放语句对象 - 断开数据库
- 过程
- 概念性:打开链接 - 创建 statement(语句) 对象 - 设置查询语句 - 使用 statement(语句) 对象执行查询 - 查询给数据库服务器 - 返回结果给应用程序 - 处理错误的例外机制
- 具体过程
- 传递一个Driver给DriverManager,加载数据库驱动
- 通过URL得到一个Connection对象, 建立数据库连接
- 接着创建一个Statement对象,用来查询或者修改数据库
- 查询返回一个ResultSet
- API
- java.sql.Statement
- 对特定的数据库执行SQL语句
- java.sql.PreparedStatement
- 用于执行预编译的SQL语句
- java.sql.CallableStatement
- 用于执行对数据库内嵌过程的调用
- java.sql.ResultSet
- 从当前执行的SQL语句中返回结果数据
- java.sql.Statement
- 动态构造技巧
- 数据字典使用技巧
- ODBC/JDBC工作原理
11 数据建模:思想与方法(数据库设计之抽象/表达方法)
- 数据建模
- 数据库设计
- E-R模型
- chen方法
- crow’s foot 方法
- 数据库设计中的抽象
- crow’s foot 方法
12
13 数据库设计过程
- 设计过程
- 需求分析 (source) -> 概念设计 (ER图) -> 逻辑设计 (关系模式) -> 物理设计(具体的DBMS create table等)
- 设计方法
- ER图/IDEF1X->关系模式
14 函数依赖及其公理/定理
- 函数依赖
- 完全函数依赖
- 传递函数依赖
- 公理/定理
- 最小覆盖
15 关系模式设计之规范形式
- 第1NF
- 第2NF
- 第3NF
-
Boyce-Codd NF
- 多值依赖
-
公理/定理
- 第4NF