数据库概论的笔记

版权声明:本文为[博主](https://zhangkn.github.io)原创文章,未经博主同意不得转载。https://creativecommons.org/licenses/by-nc-sa/2.5/cn/ https://blog.csdn.net/u011018979/article/details/25341215

前言

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 <表名>

注:

1.foreach statement是语句级,触发动作仅仅发生一次,假设表的触发器是行级的话,触发动作将作用于全部的行。

假设是行级触发器。用户可再过程中使用new和old引用update、insert事件之后的新值和update、delete事件之前的旧值。

假设为语句级触发器。则不可使用new和old进行引用。

2.触发动作体能够是一个匿名PL/SQL块,也能够是对已创建的存储过程的调用。

3.同一个表的多个触发器激活时遵循例如以下的运行顺序。

1)运行该表上的before触发器

2)激活触发器上的sql语句

3)运行该表上的after触发器。

 

规范化

设R(U)是属性集U上的关系模式。X,Y是U的子集。假设对于R(U)的随意一个可能的关系R,R中不可能存在两个元组在X上的属性值,而在Y上的属性值不等。则称x函数圈定y,或者是y函数依赖于x。

1.全然函数依赖

在R(U)中,假设y函数依赖于y,并且对于x的不论什么一个真子集x',都有y函数不依赖于x'.则称y对x全然函数依赖。

2.范式

1)。

一个低一级范式的关系模式,通过模式分解能够转换为若干个高一级范式的关系模式的激活。

这样的过程叫做规范化。

2)。关系,作为一张二维表,对他有一个最起码的要求:每个分量必须是不可分的数据项。满足这一条件的关系模式就属于第一范式。

3.假设关系R属于第一范式,且每个非主属性全然函数依赖于吗,即消除部分函数依赖,来达到第二范式。

4)。

关系模式R<U,F>中假设不存在这样的吗Y,属性组Y及非数主属性Z(Z不属于Y),使得y函数依赖于X,且Z函数依赖于Y成立,X不依赖于Y.。则称关系模式属于第三范式。假设是第三范式,它的不论什么非键属性都并不传递依赖于不论什么候选键。

进程

进程的概念一分为二,task是申请资源的最小单位。而thread是调度和运行的最小单位。一个task能够有多个thread。这些thread共享task的全部资源,共同完毕一个任务。

1.线索机制与进程机制的比較

1)线索比进程占用更少的资源。

2线索调度比較灵活。.

3)线索切换开销较小:线索共享同一地址空间。而进程的地址空间是私有的。

4)线索通信简便

游标

系统为用户开设的一个数据缓冲池,存放sql语句的运行结果,每个游标区都有一个名字。

1.游标是对查询出来的结果集作为一个单元来有效的处理。

游标能够定在该单元中的特定行。从结果集的当前行检索一行或多行。

2.游标能够对结果集的当前行做改动。

3.一般不适用游标。可是当须要逐条处理数据的时候。游标显得十分重要。

PL/SQL ( procedural language/sql)

pl/sql是编写数据库存储过程的一种过程语言。是对sql的扩展,使其添加了过程化语句功能。

1.pl/sql概述

pl/sql程序的基本结构是块,每个快完毕一个逻辑操作

 

注:

1.pl/sql块主要有两种类型,即命名块和匿名块。匿名块每次运行时都要进行编译,它不能存储到数据库中,也不能在其它的pl/sql块中引用。

2.存储过程和函数是命名快,他们被编译后保存在数据库中,能够被反复的调用。运行速度较快。

pl/sql的创建

1.creste procedure 过程名(【參数1,參数2,...】)

as

<pl/sql块>

2.alter procedure 过程名1 rename to 过程名2。

运行pl/sql

call /perform procedure 过程名(【參数列表】);

删除pl/sql 

drop procedure 关系名();

注:

 

1.l优化时,在既有选择操作和链接操作时。应当先做选择操作。这样參加连接的元组就能够大大降低。者是代数优化

2.选择操作算法有全表扫描和索引扫描。应当选用索引扫描。

3.表的连接採用index join代价页较小。这是物理优化。

 

小结

1.村粗过程的特点

1.村粗过程由于sql语句已经预编译过了。因此运行的速度比較快

2.可保证数据的安全性和完整性。

3.能够降低网络的通信量。

存储过程主要是在server上运行。这样能够降低客户机的压力。

4.村粗过程能够接受和输出參数,并返回单个或多个结果集以及返回值,能够向程序返回错误原因。

5.存储过程能够包含程序流、逻辑以及对数据库的查询,同一时候能够对实体封装和隐藏数据逻辑。

 

总结

1.关系的完整性约束条件包含三大类:实体完整性、參照完整性和用户自己定义完整性。

2.存储过程与函数的差别

存储过程是用户定义的一系列sql语句的集合,设计特定的表或其它对象的任务。用户能够调用存储过程;

而函数一般是数据库已定义的方法,它接受參数并返回某种类型的值并且不涉及特定的用户表。

3.通俗地理解三个范式

第一范式,是对属性的原子性约束,要求属性具有原子性。不可再分解(数据项不可分);

第二范式。是对记录的唯一性约束,要求记录有唯一标识,即实体的唯一性(每个属性全然依赖于码,码可确定全部非主属性即消除部分函数依赖)。

第三范式。是对字段冗余性的约束。即不论什么字段不能有其它字段派生出来。

(消除传递依赖,即它的不论什么非键属性都不传递依赖于不论什么候选键)

4.基本表的性质

1)原子性:基本表中的字段是不可再分解的

2)原始性,基本表中的记录是原始数据的记录

3)演绎性,由基本表与代码表中的数据能够派生出全部的输出数据。

4)稳定性,基本表的结构是相对稳定的,表中的记录是长期保存的。

5.主键与外键

一般而言,一个实体不能既无主键又无外键。

在E-R图中处于叶子部位的实体,能够定义主键也可不定义主键(由于它无子孙),但必须要有外键(由于他有父亲)。主键是实体的高度抽象,主键与外键的配对表示实体之间的连接。

7.正确处理多对多的关系

假设两个实体之间存在多对多的关系,则应该消除这样的关系;消除的办法是在两者之阿添加第三实体。这样原来一个多对多的关系,如今变成两个一对多的关系。要将原来两个实体的属性合理地分配到三个实体中。

8.主键的取值方法

主键是供程序猿使用的表间连接工具。能够是一个由程序实现的自己主动递增的序列(无物理意义的数字串),也能够有物理意义的字段名或字段组合。建议组合字段的个数不要太多。多了不但索引占用空间大。并且速度也慢。

9.数据冗余

提倡高级冗余(派生性冗余),反对低级冗余(反复性冗余)。

高级冗余举例:

消费流水表的字段有原剩余金额、现剩余金额和消费金额。

当中原剩余金额是冗余的。可是也要保留。

 

 10.好的E-R图标准

结构清晰,关联简洁、实体个数适中、属性分配合理和没有低级冗余。

11.视图技术在数据库设计中的作用

1)视图是供程序猿使用数据库的袷窗体。是一种虚表。视图依赖基本表而存在。

它是基本表的数据综合的一种体现。是数据处理的一种方法。

更是一种数据保密的手段。

2)为了进行复杂处理、提高运算熟读和节省村粗空间,视图的定义深度一般不得超过三层。假设超过三层视图还是不够用。则应该在视图上定义暂时表。在暂时表上再定义视图。

12.中间表和暂时表

中间表,是存放统计数据的表。它是为数据仓库、输出报表或查询结果而设计的。

 

暂时表是程序猿个人设计的,存放暂时记录,为个人所用。

基本表和中间表由dba维护。暂时表由程序猿自己採用程序来自己主动维护。

13.完整性约束的三方面表现

域的完整性使用check来实现约束,通过它定义字段的值域。

參照完整性使用主键约束、外键约束和表级别触发器来实现

用户定义完整性,它是一些业务队则,用存储过程和触发器来实现。

14.提高数据库运行效率的方法

1.)在数据库物理审计时,降低范式、添加高级冗余、少用触发器和多用存储过程。

2.)当计算很复杂。并且记录条数很巨大时。复杂的计算要先在数据库外以文件系统方式採用编程语言处理完毕之后,最后才入库追加到表中。

3)假设白哦的记录太多,能够以主键的某个值为界限,将该表的记录切割为两个表;

假设表的字段太多。则垂直切割表。

总之从数据库系统级优化、数据库设计级优化和程序实现级优化。

15.字段的设计

1)数据类型尽量用数字类型

2)数据类型尽量的小

3)尽量不同意null。能够使用not null 和default 来取代null

4)少用text和image类型的字段

5)自增字段要慎用。不利于数据迁移。

17.系统设计

归纳一些业务逻辑放在数据库编程(存储过程、触发器和函数)实现。

数据库编程能够降低网络流量并可更充分地利用数据库的预编译功能和缓冲功能。

 

posted @ 2019-03-25 19:29  ldxsuanfa  阅读(461)  评论(0编辑  收藏  举报