数据库原理
2016-07-03 19:28:59 0 举报
AI智能生成
数据库原理是计算机科学的一个重要分支,主要研究如何有效地组织、存储和管理大量的数据。它包括数据的收集、存储、操作、检索和保护等方面。数据库系统由数据库、数据库管理系统(DBMS)和用户组成。数据库是长期存储在计算机内、有组织的、可共享的数据集合。DBMS是用于管理数据库的软件系统,它提供了数据定义语言(DDL)、数据操作语言(DML)、数据控制语言(DCL)等工具,使用户可以方便地创建、查询、更新和删除数据库中的数据。用户则是使用数据库的人,他们通过DBMS提供的接口与数据库进行交互。
作者其他创作
大纲/内容
分支主题 5
了解视图和索引
视图:通过计算来定义的关系,这种关系不在数据库中存储,只是在需要的时候被完整或者部分地构造,是一个虚表,数据库中只存放视图的结构定义而不放对应的数据
创建视图:
CREATE VIEW 视图名[列名,]
AS 子查询(可以为任意SELECT语句的结果)
[WITH CHECK OPTION]
删除 DROP 分RESTRICT和CASCADE
索引:在基本表上建立一个或多个索引,可以提供多种存取路径,加快查找速度 ,索引是通过二叉树的数据结构来描述的
建立:CREATE INDEX ON 表名 (列名1 [ASC 升序|DESC 降序],...)
删除:DROP INDEX ...
建立索引的原则
子主题
子主题
子主题
子主题
UNIQUE唯一索引,非聚簇索引的叶节点仍然是索引节点,只不过有一个指针指向对应的数据块 CLUSTER聚簇索引,索引的叶节点就是数据节点,所以一个表最多只能有一个聚簇索引
了解B树 服务器端
B树
B 树是为了磁盘或其它存储设备而设计的一种多叉平衡查找树
查找类似二叉排序树的查找,所不同的是B-树每个结点上是多关键码的有序表,在到达某个结点时,先在有序表中查找,若找到,则查找成功;否则,到按照对应的指针信息指向的子树中去查找,当到达叶子结点时,则说明树中没有对应的关键码
B+树
树的差异在于:
⑴有n 棵子树的结点中含有n 个关键码;
⑵所有的叶子结点中包含了全部关键码的信息,及指向含有这些关键码记录的指针,且
叶子结点本身依关键码的大小自小而大的顺序链接。
⑶所有的非终端结点可以看成是索引部分,结点中仅含有其子树根结点中最大(或最小)关键码。
存储过程和JDBC的基本概念
存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中,经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。
面向对象
授权
用GRANT语句向用户授权
GRANT 权限1,权限2... |ALL (权限 可以是:SELECT\INSERT\UPDATE\DELETE\ALTER\INDEX等)
ON 对象名1,对象名2,... (基本表、视图属性列)
TO 用户1,用户2,... |PUBLIC (同时可以授权多个用户 PUBLIC是公共用户)
[WITH GRANT OPTION] (使得被授权用户可以把他的特权继续授权给其他用户)
角色的授权:被命名的一组与数据库操作相关的权限 用GREATE ROLE xx创建角色,授权和回收时可以直接使用角色名
用REVOKE收回授权
REVOKE 权限1,权限2... |ALL
ON 对象名1,对象名2,...
FROM 用户1,用户2,... |PUBLIC
[CASCADE|RESTRICT] (级联的授权同时收回所有)
用户分类
系统用户DBA
拥有全部、最高的权限
数据对象的属主
对其创建的表有操作权限
一般用户
经过授权被允许对数据库进行某些特定的数据操作
公共用户
权限分类
访问权限:读、插入、修改、删除
模式修改权限:管理权限,可以给别人授权和撤销
怎么创建一个对象类型
对象关系模型
属性的结构类型:属性不在限制与原子类型
方法:可有方法
元组可有标识符:元组相当于面向对象系统中的对象
引用:指向元组,可共用,避免重复
UDT定义
重命名现有类型:CREATE TYPE T AS 基本类型(不好)
CREATE TYPE T AS (属性声明) 其中属性声明中的属性类型还可以进一步嵌套用户定义类型
UDT中方法的声明
CREATE METHOD XXX() RETURNS 类型 FOR UDT名 BEGIN ... END;
用UDT声明关系可以不用属性定义,只写一下PRIMARY KEY是哪个就可以
CREATE TABLE XX OF UDT名(元素列表)
REF、DEREF在UDT中的作用
UDT:用户定义类型
REF(引用)的使用
A REF(UDT) SCOPE R(R是UDT类型的表) 这样就可以把夜歌类型引用一个具体的表
声明为可引用的
DEREF(引用的跟随)
如果X是引用类型的,那么不能直接返回这个属性,要获得这个属性的具体元组需要使用DEREF(UDT)来返回
对象-关系中Order怎么操作
Udt上的排序需要定义CREATE ORDER FOR T EQUALS ONLY BY STATE或ORDERING FULL BY RELATIVE WITH F定义一个函数F用于判断比较
嵌入对象
分支主题 7
重点:Xpath
XPath 是一门在 XML 文档中查找信息的语言。XPath 用于在 XML 文档中通过元素和属性进行导航。
XPath 使用路径表达式来选取 XML 文档中的节点或者节点集。这些路径表达式和我们在常规的电脑文件系统中看到的表达式非常相似。
XPath 含有超过 100 个内建的函数。这些函数用于字符串值、数值、日期和时间比较、节点和 QName 处理、序列处理、逻辑值等等。
XPath 是 XSLT 标准中的主要元素。
XPath 使用路径表达式来选取 XML 文档中的节点或节点集。
nodename 选取此节点的所有子节点。
/ 从根节点选取。
// 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。
. 选取当前节点。
.. 选取当前节点的父节点。
@ 选取属性。
轴(axis)
定义所选节点与当前节点之间的树关系
DTD和XML schema的差异
XML模式比DTD更强大,它允许对元素的数量加以限制,允许声明简单元素的类型,还给与了声明键和外键的功能
key、forgin key
关系规范化
操作SQL
触发器
关系数据库
ACID是什么
Atomicity原子性
原子性任务是一个独立的操作单元,是一种要么全部是,要么全部不是的原子单位性的操作。
Consistency一致性
一个事务可以封装状态改变(除非它是一个只读的)。事务必须始终保持系统处于一致的状态,不管在任何给定的时间并发事务有多少。
如果一个操作触发辅助操作(级联,触发器),这些也必须成功,否则交易失败。
Isolation隔离性
事务是并发控制机制,他们交错使用时也能提供一致性。隔离让我们隐藏来自外部世界未提交的状态变化,一个失败的事务不应该破坏系统的状态。隔离是通过用悲观或乐观锁机制实现的。
Durability耐久性
一个成功的事务将永久性地改变系统的状态,所以在它结束之前,所有导致状态的变化都记录在一个持久的事务日志中。如果我们的系统突然受到系统崩溃或断电,那么所有未完成已提交的事务可能会重演。
关系代数,四类基本功能,除法不要求深究
关系代数以关系为运算对象,通过对关系进行组合或分割得到所需的新关系
集合运算
并
交
差
笛卡儿积
关系运算
投影
在列上进行选择
选择
在关系行上进行元组挑选
自然链接
连接结果要求满足同名属性值也对应相同,要消除重复
theta连接
从两个关系的笛卡儿积中选取属性间满足一定条件的元组
除运算
扩充的关系运算
广义投影
外连接
半连接
聚集
SQL在关系代数上所做的扩展(如Group By,子查询等新的操作,第六章。Group By、Having、子查询都要掌握,SQL要掌握)
SQL功能
数据查询
SELECT
数据定义
CREATE,DROP,ALTER
数据操纵
INSERT,UPDATE,DELETE
数据控制
GRANT,REVOKE
目录。模式schema。基本表(关系)
数据类型
预定义类型
构造数据类型
用户定义数据类型 CREATE DOMAIN item NUMERIC(4) DEFAULT 0 CHECK (VALUE IS NOT NULL)
表的建立与删改
建立表:CREATE TABLE xx(..)
删除:DROP TABLE xx (CASCADE|RESTICT)
级联表示删除时视图和索引也删除
扩充和修改
添加新列 ALTER TABLE xx ADD(列名 数据类型,... )
删除列 ALTER TABLE xx DROP 列名 【CASCADE|RESTRICT】
修改列类型 ALTER TABLE xx MODIFY 列名 数据类型
数据查询
SELECT [ALL不消除|DISTINCT消除重复] 列表达式(可用聚集函数)
FROM 表名或视图名,
WHERE 条件表达式
GROUNP BY 列名1 HAVING 条件表达式(常用聚集函数)
ORDER BY 列名2 [ASC|DESC]
GROUP子句:按列名1的值进行分组 列值相等为一组
如果GROUP子句带有HAVING短语,则只有满足指定条件的组才输出
ORDER子句:最终结果按列明2的值升序或降序排列
查询条件:
1.比较和逻辑运算:>、=、AND、OR等
2.谓词BETWEEN:指定区间 如 greade BETWEEN 95 AND 100
3.谓词IN:查找列值属于指定集合的元组,NOT IN 如 place IN(‘湖南’,‘湖北’)
4.LIKE字符匹配:[NOT] LIKE 匹配串 [ESCAPE 换码字符 ] 如: sname LIKE '刘%' or sname LIKE ‘_ _晓%’
函数与表达式:
1 聚集函数 SUM AVG MAX MIN
2 算数表达式 SIN COS + - *
3 分组与组筛选
嵌套查询:
括在圆括号中
常在WHERE HAVING后
ALL 、SOME:X>ALL(子查询)
EXISTS、NOT EXISTS:存在谓词 如 where exists (子查询)
相关子查询一般每次去取外层表的第一个元组 与内层条件一一判断 若where子句返回为真 则取此元组放入结果表
给表或列取别名:空格后写别名 如from student s1,student s2
集合运算:UNION INTERSECT EXCEPT 并交差
连接查询:
自然连接:NATURAL JOIN
外联接:LEFT|RIGHT|FULL [OUTER] JOIN
递归查询
查询空值:WHERE 列名 IS [NOT] NULL
数据更新
插入:
INSERT INTO 表名 (列名1,列名2,。。。)
【查询语句】
UPDATE 表名
SET 列名=表达式 ,。。
[WHERE 条件表达式]
DELETE
FROM 表名
WHERE 条件表达式
关系的约束:用关系代数的描述(如外关键字引用)
完整性约束
实体完整性
若属性(组)A是基本关系R主键上的属性,则属性A不能取空值
组成主键的各个属性都不能取空值,主键之外的候选键可以取空值
参照完整性
引用关系,关系中某属性的值需要参照另一关系的属性来取值
关系之间的引用(外键引用)
关系内部的引用
又称为引用完整性,定义:外键要么空缺,要么引用一个实际存在的主键值
用户定义的完整性
针对某一具体关系数据库的约束
定义属性是否允许为空值
定义属性值的唯一性
定义属性的取值范围
定义属性的默认值
定义属性间函数依赖关系
定义约束
主键与候选键定义
PRIMARY KEY(...)
UNIQUE(...)
检查约束定义
CHECK(条件表达式) 跟在某一列定义的后面
外键定义
FOREIGN KEY(列名表) REFERENCE 目标表【列名表】 [ON DELETE 动作][ON UPDATE 动作]
NO ACTION
CASCADE:修改目标元组时级联修改
RESTRICT
SET NULL
SET DEFAULT
被引用的另一个关系的属性必须被定义为PRIMARY KEY或者 UNIQUE
例:pressC# INT REFERENCES MovieStars(cert#)
或者:
presC# INT,
FOREIGN KEY (presC#) REFERENCES MovieExec(cert#)
分支主题 2
对于Key(键)的定义
候选键(候选码、键)-在一个关系中,若某一属性或属性集的值可以唯一地表示每一个元组,即其值对于不同的元组是不同的,这样的属性集合称为候选键。候选键可以完全函数决定全集,不包含多余属性
候选键中的属性焦作主属性,否则叫非主属性
唯一确定性:唯一决定表中一行
最小性:构成候选键属性要最少,不能多余
存在和不唯一
主键(主码、主关键字)-常选用一个候选键作为组织该关系及唯一性操作的对象,被选用的候选键称为主键
外键-若A是关系1的一个属性(组),但不是关系1的键,如果A与关系2的主键B相对应,则称A是关系1的外键
主键B和外键A必须定义在必须定义在相同的数据域上(类型、取值范围相同)
函数依赖及其传递、转换、分解
函数依赖:若两个元组在属性集A上一致,那么他们在属性集B上也一致,A函数决定B或B函数依赖A。函数依赖是从多到少的,反应的是属性之间的决定关系
函数依赖只能根据语意来确定,无法通过定义来证明
分类
完全函数依赖
X决定Y,且X的任何一个真子集都不能决定Y,没有多余
部分函数依赖
存在有多余属性
传递函数依赖
X决定Y,Y不能决定X,且Y决定Z,那么Z传递函数依赖于X。如果有Y也能决定X,那就是直接函数依赖了,X和Y一一对应了
函数依赖的分解、结合律
数据依赖公理
自反律:X->X'
增广律:X->Y, ZX->ZY
传递律:X->Y,Y->Z,X->Z
合并规则:X->Y,X->Z则X->YZ 反之即为分解规则
伪传递规则:X->Y,WY->Z则WX->Z
函数依赖、属性闭包的计算
函数依赖集的闭包:F由公理所能推出的所有函数依赖的集合
包括
F中的函数依赖
由F推出的平凡函数依赖
由F推出的非平凡函数依赖
计算相当麻烦,实际上不可行,判断X->Y一般转化为判断Y是否在X的属性闭包中
属性集X的闭包:X由F通过公理能推出的所有函数依赖右部的集合
计算方法:从给出的属性集开始,慢慢增加,每增加一次重新考虑一次,直到不能再推出
平凡函数依赖
若X函数决定Y,且Y属于X,则称X决定Y是平凡的函数依赖,否则是非平凡函数依赖 如AB决定B
最小基本集的计算(三个条件)
F右边都是单属性,不是则分开
一个函数依赖集的最小集不唯一
删除任何一个依赖后不再是基本集(无多余的函数依赖)
对于任何一个函数依赖,如果从其左边删除任何一个或多个属性,将不再是基本集(左边无多余属性)
3NF、BCNF的转换(特别是3NF,无损连接)4NF知道概念就可以
1NF
关系中每个属性不可再分,且不存在重复组
2NF
首先为1NF,每个非主属性都完全函数依赖于关系的任一候选码(防止冗余,但是还是有冗余)
规范化方法:对原关系进行投影,将其分解,依赖某部分的关系和这部分分到一个表
3NF
关系的任何一个非主属性都不传递函数依赖于它的任何一个键(间接被另一个东西决定 说明关系不一样 不应该)解决插入和删除问题 但也有例外
但是主属性之间仍可能存在函数依赖
判别方法:找候选键确定非主属性,考察是否存在部分函数依赖,考察非主属性之间是否存在函数依赖
2、3NF都是对非主属性的约束,如果没有非主属性也就都满足了+—+,主属性之间还可能存在部分和传递函数依赖
规范化方法:仍采用投影的方法
算法(保持无损连接和函数依赖保持)
求最小函数依赖集Fm和一个候选键(未在函数依赖右边出现的属性)
如果Fm中只有一个函数依赖,那么就输出
若关系中某些属性没有出现在Fm任何函数依赖的左边或者右边,则将他们单独分出去,构成一个关系子模式
对Fm中的每个X->A都构成一个关系模式XA,如果有X->A1,X->A2...可先把他们合并成一个X->A1A2...成为子模式XA1A2..
若结果中没有一个子模式含有候选键,则将候选键也单独放到一个子模式中,若存在一个关系的属性集属于另一个,则删去少的这个
BCNF
消除了主属性对码的部分和传递函数依赖
函数依赖集合中所有左部都必须为候选码,也就是可以决定全集,依赖必须为码,消除主属性之间的部分和传递依赖
BCNF完全消除了插入和删除异常,就函数依赖来说它是最高的形式,但仍可能存在冗余
算法(保持无损连接性)
找出候选码(不在所有函数依赖右边出现的)
判断是否为BCNF
如果不是,则取一个不满足条件的函数依赖(左边不包含候选键)X->A,单独划分出去为XA,然后继续考虑下一个,如此循环直到全部为BCNF
4NF
针对多值依赖(MVD)的约束
等价模式分解
等价是指不破坏原有的函数依赖信息
无损连接性
对关系的分解得到的各关系做自然连接可以得到原关系,说明分解不会丢失信息
算法
依赖保持性
原模式满足的函数依赖在分解后的模式中仍然保持不变,说明不会丢失语意信息
分支主题 3
E-R图的各种表示
实体和实体集的关系好比某部电影和所有电影的集合一样,实体集的每个实体对每个属性都有特定的值,相当于类的实例和类的关系
联系:也可以构造为关系,种类有多对一联系、一对一联系(双向多对一),多对多联系。可以用箭头来表示,如实体集E到F的多对一联系可以用一个指向F的箭头来表示“最多一个”(不是只有一个,可能没有),一对一的联系指向E和F都要有箭头
在一个联系中同一个实体集可能出现两次或多次,出现几次就连几条线,每条线表示一个角色,在线上标明角色
联系上也可以放置一个或多个属性,当这个属性放在单独的实体集上不合适或者没有意义时。这个属性是由多个实体集决定的
键的表示:用下划线。每个实体集必须有键,除了在isa和弱实体集中,键属于另一个实体集。只在主键下带下划线
引用完整性的表示:用圆箭头,表示不仅为多对一或者一对一联系,而且要求E->F中的F的实体必须存在,至少有一个
弱实体集:一个实体集的键是由另一个实体集的部分或全部属性构成。表示:双边矩形、双边菱形
E-R图中联系,哪些,什么情况下可以合并
多对一的联系可以合并
实体与联系可以合并
实体与实体也可以合并
多路联系的基本概念
联系的值可以被当作一个联系元组集,元组的成分分量是加入到联系中的实体
多路联系是多于两个实体集的联系
在多路联系中,指向实体集E的箭头表示其他的实体集组合至多与E中一个实体相联系,可以认为是其他所有属性函数决定E
Subclass建模的策略、利弊
子类:一个实体集中含有一些实体,这些实体拥有集合中其他实体成员没有的特殊性质。可以定义一些特例实体集作为子类(Subclass)。如“电影”和“卡通片”的关系,卡通片有电影的属性,此外还有自己的联系或者属性。
子类由一个指向父类的三角形加isa来表示(isa联系),父类叫做根实体集
SET、List的概念
谓词和元组的概念
分支主题 4
脏读如何避免、如何上锁
丢失修改:重复提交的结果覆盖
脏读:读脏数据
不可重复读
排它锁(X锁或写锁)
保证其他事务在T释放A上的锁之前,不能读取和修改A
共享锁(S锁或读锁)
保证其他事务可以读A,但在T释放A上的S锁之前,不能够对其做任何修改。
活锁:使某个事务永远处于等待状态,而得不到执行的现象
约束有哪些
属性上的约束
基于属性的CHECK约束:可跟在属性定义后面,用CHECK(条件)来定义属性上的约束
presC# INT REFERENCES MovieExec(cert#)
CHECK (presC# >= 100000) 元组在该属性上获得新值时被检查
元组上的约束
可在表定义的最后用CHECK(条件)来定义,条件可以是WHERE子句中出现的任何表达式
关系之间的约束(断言 外键约束)
见关系数据库部分
修改模式信息
ALTER TABLE xx DORP\ADD\见前面部分
写触发器(如外键不在时的情况)
当声明的事件发生时,触发器被激活,触发器测试触发的条件,如果条件满足,则与该触发器相连的动作由DBMS执行
补充
SQL中的三类关系
基本表:被存储的关系Creat table创建
视图:通过计算来定义的关系,这种关系不在数据库中存储,只是在需要的时候被完整或者部分地构造
临时表:在执行数据查询和更新时由SQL处理程序临时构造,这些临时表会在处理结束后背删除
0 条评论
下一页