目录
概述:
Table:以按行按列形式组织及展现的数据
Database:相互之间有关联关系的Table的集合
数据库系统:数据库+数据管理系统 +数据库应用+数据库管理员
数据库管理系统的功能:
1.完整性控制
2.并发控制
3. 通讯控制
4.故障恢复
5.数据字典管理
从用户角度看:数据库定义、操纵、控制、维护
数据库系统语言:
DDL(数据库定义、描述语言):定义数据库中Table的名称、标题(格式),创建表
DML(数据库操作语言):向数据库的Table中增加/删除/更新数 据及对数据进行查询、检索、统计等
DCL(数据库控制语言):控制权限、约束
DQL(数据查询语言)
数据库维护:转储/恢复/重组/性能监测/分析,运行日志维护、编辑、打印,一般由数据库管理员(DBA)使用
SQL语言:结构化的数据库语言
数据库语言可以嵌入到高级语言中使用
修改数据是在内存实现的,要点执行,才会保存到磁盘上
DBMS也可以直接修改磁盘数据(但最好别这样)
三大经典模型:关系模型(表)、层次模型(树形结构)、网状模型(有向图)
简要发展史:
第一阶段:摸索 研制成功格式文件系统 正式提出“Data Base”,开始研究
第二阶段:确立 提出三大数据库模型,形成理论基础:关系数据库理论
第三阶段:成熟 提出标准化数据库结构模型
第四阶段:深化 数据库方法逐步理论化
第一代数据库系统是指基于网状模型或层次模型的数据库系统
第二代数据库系统基于关系模型的数据库系统
三级模式、二层模式:
外模式(用户模式、子、局部模式)
概念模式(全局、逻辑模式)
内模式(存储模式、物理模式)
模式又称概念模式
外模式到概念模式:逻辑独立性 E-C
概念模式到内模式:物理独立性 C-I
模式是对数据本身结构的抽象,数据模式是对模式本身结构的抽象
关系模型:
“关系”-结构
列的取值范围“域”:一组相同数据类型的值得集合 个数称为基数
“元组”及所有可能组合成的元组:笛卡尔积
元组(d1,d2,…,dn)的每一个值di叫做一个分量
若di的基数为mi,则笛卡尔积的基数,即元组个数为m1×m2×…×mn
笛卡尔积 是由n个域形成的所有可能的n元组的集合
关系:笛卡尔积的子集
关系是以内容(名字或值)来区分的,而不是属性在关系的位置来区分
关系模式R(A1:D1,A2:D2 ,…,An:Dn)中属性向域的映象
例:Student(S# char(8),Sname char(10),Ssex char(2),Sage integer, D# char(2), Sclass char(6) )
关系模式是关系的结构
关系模式是稳定的;而关系是某一时刻的值,是随时间可能变化的
列位置互换性:区分哪一列是靠列名
行位置互换性:区分哪一行是靠某一或某几列的值(关键字/键字/码字)
任意两个元组不能完全相同
键,码概念
- 候选码(键):唯一标识一个元组的,可有1个或多个属性
若有多个候选码,则选择1个做主码 - 主属性:包含在任何1个候选码的属性,其他属性称为非主属性
最简单:候选码只有1个属性
全码:候选码包含所有属性 - 外码(键):一个属性组不是R的候选码,但是另一个关系的主码、可以是R的主属性或非主属性
关系的任何属性都是不可再分的
数据的基本操作
完整性:
完整性:数据的有效性。
实体完整性:表中的主键必须为有效值。
参照完整性:一个表中的外码必须与另一个表中的主键相对应,且为有效值,可为空值
用户自定义完整性: 用户针对具体的应用环境定义的完整性约束条件
关系运算之关系代数
五种基本运算:并、差、选择、投影、笛卡尔积
纯关系操作:选择(筛选条件)、投影(从关系R中选出属性包含在A中的列构成)、更名、连接、除
并相容性:R和S的属性数目
必须相同且对应域
相同
广义笛卡尔积 基数(元组个数):是积 度数(属性个数):是和
θ-连接,以一定条件组合两个集合;
等值连接:选择R中属性A与S中属性B上值相等的元组(相同值的属性名不同)
自然连接是一种特殊的等值连接,去掉共同属性那列
θ-连接和等值连接不需要去除
共同属性,自然连接需要去除
共同属性
书写关系代数表达式的基本思路:
除操作:查询。。。。全部的
例:
外连接:将找不到匹配的元组 看成空值放在结果关系中
关系演算之关系元组演算
以元组为变量,以元组为基本处理单位,先找到元组,然后再找到元组分量,进行谓词判断
关系演算之关系域演算
以域变量为基本处理单位,先有域变量,然后再判断由这些域变量组成的元组是否存在或是否满足谓词判断。
元组演算和域演算、关系代数可以等价互换
三种关系运算都可说是非过程性
的,但相比之下:域演算的非过程性最好
,元组演算次之,关系代数最差
SQL
是集DDL\DML\DCL与一体的数据库语言
create database 数据库名
create table (列名 数据类型 [Primary key |UNIQUE(候选键、可有多个)] [not null],列名 数据类型【非空】)
insert into 表名 [(列名[,列名]… ]values (值[, 值], …) ;
若表名后的所有列名省略,则values后的值的排列,须与该表存储中的列名排列一致
在检索结果中要求
无重复元组
, 是通过DISTINCT
保留字的使用来实现的
模糊搜索:
注意:一个汉字占两个字符,张某某,应该表示为:张_ _ _ _
若两个表的属性名相同,则采用 表名.属性名 来限定
- 子查询: in 、θ some / θ all谓词(没有any)
相关子查询:外层向内层传递参数
表达式 = some (子查询) 等价于 表达式 in (子查询)
表达式 not in (子查询) 等价于 表达式 not in (子查询)
[not] Exists谓词:相关子查询 子查询结果有无元组存在
取外层查询的第一个元组,根据它与内层查询相关的属性值处理内层查询,若where子句返回true,则将此元组
放入结果表,然后取下一个元组,重复这个过程直到全部检查完为止。
- 结果计算与聚集函数:
select-from-where语句中, select子句后面不仅可以是列名,而且可以是一些计算表达式或聚集函数,表明在选择和投影的同时直接进行一些运算:
内置聚集函数:
COUNT、SUM、AVG、MAX、MIN
分组:Group by S#
聚集函数不能用于where子句中,若要进行条件过滤,使用Having子句(需要Group by子句支持、检查每一分组内
的)
- 并、交、查的处理
- 空值处理
- 内连接、外连接
更新:Insert/Update/Delete
Insert into 表名(列) [values(值)]
注意:当新增元组时:如果不符合用户定义的完整性约束条件,将不会执行新增条件。
更新:Update
表名 Set
列名 = 表达式 |(子查询)【【,列名 = 表达式 |(子查询)】。。。】【Where
条件表达式】
删除: Delete From 表名 【where 条件表达式】 删除表中元组
- 视图
视图也可像表一样进行查询
有些类型的视图不可更新
如果视图的select目标列包含聚集函数
,则不能更新
如果视图的select子句使用了unique或distinct
,则不能更新
如果视图中包括了group by
子句,则不能更新
如果视图中包括经算术表达式计算出来的列
,则不能更新
如果视图是由单个表的列构成,但并没有包括主键
,则不能更新nT
➢对于由单一Table子集构成的视图 ,即如果视图是从单个
基本表使用选择、投影操作导出的,并且包含了基本表的主键
,则可以更新
撤销视图 Drop View view_name
撤销基本表: drop table 表名(不只删除元组,撤销格式、结构等)
Drop database 数据库名
修正基本表结构:alter table 表名
【add {colname datatype,…}】增加新列
[drop {完整性约束名}] 删除完整型约束
【modify {colname datatype,。。。}】 修改列定义
指定当前数据库: Use 数据库名
关闭当前数据库:close 数据库名;
嵌入式语言
将SQL语言嵌入到某一种高级语言中使用,这种高级语言,如C/C++, Java等,又称宿主语言
-
变量的声明与使用
宿主程序的字符串长度要比字符类型的字段+1,有“\0” -
程序与数据库的连接与断开
-
SQL结果的提交与撤消
-
游标(Cursor)的基本使用方法(单行检索结果与多行检索结果的处理差异)
-
错误捕获与处理
域演算语言QBE
高度非过程化查询语言 适合终端用户使用
P.:显示输出
D.:删除
I.:插入 P.X P.Y示例元一般是或 用相同示例元素表示与操作
U.:更新操作
当涉及多个表时,可利用同一连接条件使用相同的示例元素来实现多个表的连接。
关系运算的安全性:不产生无限关系和无穷验证的运算
关系代数(集合本身有限)是安全的,关系演算不一定(非运算可能产生无限关系)
DOM(安全约束有限集合)
数据库设计
通过对现实世界的分析,设计出数据库的模式
-
信息:抽象,反映现实世界中事物
-
数据库设计中的抽象:现实世界==>信息世界==>计算机世界
E-R模型
- 实体:客观存在并可相互区分的事物
一类实体:具有相同或相似的特性 (型)
一个个个体称为实例 (值)
找出有哪些类/实体能够用一个个、一件件、一串串等重叠量词形容的
- 属性:实体所具有的某一方面特性 分类有单一、复合、单值、多值、可空值、非空值、导出(由其它属性计算而得)属性
- 关键字/码,实体中能够用其值唯一区分开每一实例的属性或属性组合
- 联系,是指一个实体中的实例和其他实体中实例之间所可能发生的联系
联系的度或元:参与发生联系的实体的个数
角色:实体在联系中的作用
完全参与联系(至少有1个实例)、部分参与实例(可以不参与)
表示方法
Chen方法
Crow’s Foot方法
IDEF1X方法
函数依赖
定义:
x相同,y相同
部分或完全函数依赖
注:部分依赖存在非受控冗余
传递函数依赖
逻辑蕴涵
闭包
超码
是一个或多个属性的集合,超码中的这些属性可以让我们在一个实体集中唯一地标识一个实体
函数依赖公理
属性闭包
计算属性闭包方法:
最小覆盖
x->A不可少, x没有多余属性
注:右部单属性,没有冗余FD,左部没有冗余属性
数据范式
R的规范化程度与F是否最小函数依赖集无关。
不能有复合属性、多值属性、组合
不存在非主属性对候选键的部分依赖
eg:R(S#,SN,SD) S#:学号,SN:姓名,SD:班级
没有传递函数依赖
eg:邮编(城市, 街道, 邮政编码)
函数依赖都包含候选键
第4范式消除了非主属性对候选键以外属性的多值依赖,一定复合BCNF
模式分解
在模式不符合关系范式时,进行模式分解
无损连接分解
保持依赖分解
解释:Πr1-n:先求出投影
A->C关于G的+:首先判断A是不是属于模式Πr1-n中,是的话就落下去,在判断C是不是被包含在R1-n中,是的话也落下去
无损分解和保持依赖无关