数据库原理

似乎很久以来就没有做笔记的习惯,没想到数据库的东西这么零散,写下来好一些。

以前考试时习惯把所有不熟悉的公式抄下来,然后默写,再挑出不熟悉的默写,直到最后,那张公式纸上只剩下那么几个超级变态的公式了。这次做数据库笔记,还是拿了一张破纸,零散的写了一些不熟悉的东西——抄书而已,没什么意思。忽然想到曾经看过的blog,hanh的,用很简明的话概括了样本方差自由度的内在含义,很是佩服,效仿一下也不知道能不能达到同样的效果。

曾经认为教学的东西应该用通俗的语言来表达,而不是冰冷生硬的数学描述。LDD说得对,如果一门学问不用数学去描述,那么它就称不上是科学。

码:唯一标识实体的属性集,可以是一个或者多个属性,就是所谓的keyid。

域:属性的取值范围。算是完整性约束的一部分吧。

四种数据模型:层次,网状,关系,面向对象。

元组:记录。分量:属性值。

关系的完整性约束条件:实体完整性,参照完整性,用户定义的完整性。参照完整性就是引用的完整性,引用的未必是不同的关系。对多个关系而言,其中一个表的外码是另一个表的码,那么这个外码就只能取空值或者另一个表中对应的值。

物理独立性:改变内模式/模式映像,而不必改变模式。

逻辑独立性:改变外模式/模式映像,而不必改变模式。

关系三种类型:基本表、查询表、视图表。

内模式:物理描述。模式:全体逻辑结构。外模式:用户逻辑结构。

关系代数五种基本运算:广义笛卡尔积,结果的元组数是二者元组数的乘积。

选择:从单个关系中取符合条件的若干元组。

投影:从关系中选择若干列,并取消重复行。

连接:在两个表的广义笛卡尔积中选择满足某一条件的行。若条件为=,则为等值连接;若将等值连接的重复列取消,则为自然连接。

除:对于R(X,Y)和S(Y,Z),除的结果为P(X),P中的元组满足R.Y=S.Y。

查询优化:1,尽可能先作选择;2,连接前预处理;3,投影和选择同时进行;4,把投影与前后的双目运算结合;5,将选择与笛卡尔积结合成连接;6,找出公共子表达式。

完全函数依赖:X的任一真子集都不足以决定Y。

部分函数依赖:X的某一真子集可以决定Y。

1NF:每个分量是不可分的数据项。

2NF:1NF且每一非主属性完全依赖于码。

3NF:1NF且每一非主属性不传递依赖于码。

BCNF:1NF且每一决定因素中必含有码,BCNF消除了主属性对码的部分与传递依赖。

多值依赖:对于R(U),Z=U-X-Y,若给定(X,Z),Y的值仅与X有关而与Z无关,则X->->Y。若Z=空集,则为平凡的多值依赖。若X->Y,则必有X->->Y。

4NF:1NF且对于每个非平凡的多值依赖X->->Y,X都含有码。4NF允许的非平凡得多值依赖就是函数依赖。4NF不允许非平凡且非FD的MVD。

数据库设计:需求分析,概念设计,逻辑设计,物理设计,[实施,运行和维护]。

数据字典包括:数据项,数据结构,数据流,数据存储,处理过程。

E-R图合并的三类冲突:属性、命名、结构冲突。

事务的四个特性:原子性,一致性,隔离性,持续性(ACID)。

建立冗余的两种技术:数据转储,登录日志文件。

日志文件两种格式:以记录为单位,以数据块为单位。

数据不一致性:丢失修改,读“脏”数据,不可重复读。

两种封锁:排它锁X,共享锁S。

一级封锁协议:修改加X锁,事务结束后释放,避免丢失修改。

二级封锁协议:在一级基础上,读取加S锁,读取后释放,避免读脏数据。

三级封锁协议:在一级基础上,读取加S锁,事务结束释放,避免不可重复读。

活锁:多个事务请求锁,若先满足后来者,则先来者无法获得锁。先来先服务即可解决(这不是tmd废话么)。

死锁:多个事务都已封锁一些对象,又请求已被其它事务封锁的对象,无限的互相等待。

预防死锁两种方法:一次封锁法,顺序封锁法。

诊断并解除死锁:超时法,事务等待图法。

可串行化:并发执行的结果与按某一次序串行执行相同,则此并发事务可串行化,即“正确的”。

两段锁协议:读写前必须获得锁,释放一个封锁后,不再申请任何锁。保证可串行化,但不能避免死锁。一次封锁法符合两段锁协议。

在被参照关系中删除元组,为维护参照完整性,可用级联删除、受限删除、置空值删除(废话啊,废话啊,取这么多名字干啥啊)。

向参照关系中插入元组:受限插入,递归插入。

修改关系中主码:允许修改但必须保证not null unique,或者不允许修改。

以上。
看书暴走的老狼

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注