日期:2014-05-16  浏览次数:20542 次

数据库概论的笔记

前言

1.关系模型要求关系必须是规范化的,这些规范条件中最基本的一条就是,关系的每一分量(元组)必须是一个不可分得数据项中的一个属性。

2.模式反应的是数据的结构及其联系,而实例反应的是数据库某一时刻的状态。

3.数据库的三级模式是指数据库系统由外模式、模式和内模式构成。数据库管理系统在这三级模式之间提供了两层映像:外模式/模式映像和模式/内模式映像。正是这两层映像保证了数据库系统中的数据能够具有较高的逻辑独立性和物理独立性。

4.模式实际上是数据库数据在逻辑上的视图,一个数据库只有一个模式。dbms提供模式描述语言(模式ddl)来严格地定义模式。

正文

数据库的三级模式结构

一个数据库可以有多个外模式,同一个模式可被某一用户的多个应用系统使用,但一个应用程序只能使用一个外模式。

 

1.一个模式可以有任意外模式,对于每一个外模式,数据库系统都有一个外模式/模式映像。

2.当模式改变时,有数据库管理员对外模式/模式映像做相应的改变,达到外模式不用改变的目的。

.应用程序是依据数据的外模式编写的,从而应用程序不必修改,这样保证了数据与程序的逻辑独立性。除非应用需求本身发生变化,否则应用程序一般不需要修改。

 

关系数据库

关系是笛卡尔积的有限子集

1.关系可以有三种类型:

基本表:实际存在的表,它是实际存储数据的逻辑表示。

查询表:查询结果对应的白哦

视图表:由基本表或其他的视图表导出的表,是虚表,它不对应实际存储的数据

2.关系模式是型,关系是值

关系的描述称为关系模式,他可以形式化的表示为R(U,D,DOM,F).

其中R为关系名,U为组成该关系的属性集合;D为属性组U中的属性所来自得域;DOM为属性向域的映像集合;F为属性间数据的依赖关系集合。

3.关系操作

4.关系的完整性 

1.实体完整性和关系完整性是关系模型必须满足的完整性约束条件。

实体完整性规则:如果属性A是基本关系R的主属性(候选码),则A不能取空值。

参照完整性规则:如果属性F是关系基本关系R的外码,它与基本关系s的主码K相对应,则对于R中的每一个元组在F上的值必须为:

或者取值为空,或者等于s中某个元组的主码值

其中的R和S可以是同一个关系,比如班长是外码。

5.关系代数

传统的集合运算时二目运算,即并、差、交和笛卡尔积四种,将关系看成元组的集合,其运算是从关系的水平方向即行的角度来进行,而专门的关系运算包括选择、投影、连接和除运算,不仅涉及行而且涉及列。比较运算符>,<,=,<>和逻辑运算符是用来辅助专门的关系运算的。

1.等值连接:它是从关系RYuS的广义笛卡尔积中选取A和B属性值相等的那些元组。

2.自然连接是一种特殊的等值连接,他要求两个关系中进行比较的分量必须是相同的属性组,并且在结果中把重复的属性列去掉。一般的连接操作是从行的角度进行运算,但自然连接还需要取消重复列,所以自然连接是从行和列的角度进行的运算。

3.外连接:把舍弃的元组页保存在结果关系中,而在其他属性上填空值。如果把左边关系R中要舍弃的元组保留就叫左连接;如果把右边关系的元组保留就叫右外连接。

4.除运算

给定关系R(x,y)和s(y,z),其中x,y,z为属性组,R中的Y与S中的Y可以有不同的属性名,但必须出自相同的域集。R与S的除运算得到一个新的关系p(x),P是R中满足一下关系的元组在x属性列上的投影:元组在X上分量值x的象集Yx包含S在Y上投影的集合。

例子“

1.查询选修了全部课程的学生姓名。

select sname from student where not exists (select * from course where no exists(select * from sc where sno=student.sno and cno=course.cno));--sql中没有全称量词,但是,我们总可以把带有全称量词的谓词转换为等价的带有存在量词的谓词。

2.查询至少选修了学生10094030011选修的全部课程的学号。可以使用蕴含逻辑运算。

select distinct sno from sc scx where not exists(select * from sc scy where scy.sno='100940311' and not exists(select * from sc scz where scz.sno=scx.sno and scz.cno=scy.cno));

删除模式

drop schema  <模式名> <cascade|restrict>  --cascade级联和restrict两者必选其一。

定义视图

rdbms执行 create view 语句只是把视图的定义存入数据字典,并不执行其中的select语句。只是在对视图查询时,才按视图的定义从基本表中将数据查出。对于非行列子集视图的查询,就不一定能转换。因为where子句中是不能用聚集函数作为条件表达式。

grant和revoke

grate和revoke语句向用户授予或回收对数据的操作权限。对数据库模式的授权则由dba在创建用户时实现。

数据库角色

数据库角色是被命名的一组与数据库操作相关的权限,角色是权限的集合,使用角色来管理数据库权限可以简化授权的过程。

mac 强制存取控制

仅当主体的许可证级别大于或等于客体的密级时,该主体才能读取相应的客体;仅当主体的许可证级别等于客体的密级时,该主体才能写相应的客体。

注:

1.主体是系统中的活动实体,即包括都不陌生所管理的实际用户,页包括代表用户的各进程;客体是系统中的被动实体,是受主体操作的,包括文件、基本表、索引和视图。

2.mac是对数据库本身进行密级标志,无论数据如何复制,标记与数据是一个不可分的整体,只有符合密级标记要求的用户才可以操作数据。

3.较高安全性级别提供的安全保护要包含较低级别的所有保护,因此在实现mac时要首先实现dac,系统首先进行dac检查,对通过dac检查的允许存取的数据库对象再由系统自动进行mac检查,只有通过mac检查的数据库对象方可存取。

 

audit 审计

audit语句用来设置审计功能,noaudit语句取消审计功能。

audit alter,update on 表名;

审计设置以及审计内容一般都存放在数据字典中,必须把审计开关打开。即把系统参数audit_rail设置为true,才可以在系统表sys_audittrail中查看审计信息。

注:

号的安全性措施应该使得那些试图破坏安全的人所花费的代价远远超过他们所获得的利益

触发器 trigger

trigger是用户定义在关系表上的一类由事件驱动的特殊过程

1.创建触发器

create trigger  <触发器名>

{before|after}<触发事件>on <表名>

foreach{row|statement}

[when <触发事件>]

<触发动作体>

2.删除触发器

drop trigger <触发器名> on <表名&