数据库原理

数据库

第一章

三种数据管理技术和优缺点

  • 人工管理

  • 文件系统

    共享性差,冗余度大

  • 数据库系统

    特点:

    • 数据整体结构化

      不是针对某一个应用,而是面向全组织;不仅数据内部结构化,数据整体也是结构化的,数据之间有联系;数据记录是变长的;数据最小存取单位是数据项。

    • 数据共享性高、冗余度低且易扩充

      可以被多个应用、用户共享使用;低冗余节省空间,使系统易于扩充。

    • 数据独立性高

      物理独立性:应用和数据的物理存储是独立的,物理存储改变,应用程序不变。

      逻辑独立性:应用和数据的逻辑结构是独立的,逻辑结构改变,应用程序不变。

      数据独立性由数据库管理系统的二级映像功能来保证。

    • 数据由数据库管理系统统一管理

      数据的安全性保护;数据的完整性检查;并发控制;数据库恢复。

数据模型

  • 概念模型(信息模型)

    从用户的角度对数据和信息进行建模

  • 逻辑模型和物理模型

    • 逻辑模型

      主要包括网状模型、层次模型、关系模型、面向对象数据模型、对象关系数据模型、半结构化数据模型等。从计算机系统的角度建模。用于DBMS实现。

    • 物理模型

      数据最底层的抽象,描述数据在系统内部的表示方式和存取方法,在磁盘或磁带上的存储方式和存取方法。

客观对象的抽象过程:

  • 将显示世界抽象为概念模型(信息模型)
  • 将概念模型抽象为DBMS支持的数据模型
  • 逻辑模型到物理模型(DBMS完成)

概念模型

实体-联系法

  • 实体:客观存在并可相互区别的事物称为实体
  • 属性:实体具有的某一特性,一个实体可以由若干个属性来刻画
  • 码:唯一标识实体的属性集称为码
  • 实体型(实体模型):用实体名及其属性名集合来抽象和刻画同类实体称为实体型
  • 实体集:同一类型实体的集合称为实体集
  • 联系: 现实世界中事物内部以及事物之间的联系在信息世界中反应为实体内部和实体之间的联系;实体內部的联系通常是指实体的属性之间的联系;实体之间的联系通常是指不同实体集之间的联系;实体之间的联系通常有一对一、一对多、多对多等。

实体-联系图/E-R图

实体矩形,属性椭圆、联系菱形,实体和属性之间用无向边连接,

1.png

数据模型组成(三要素记住)

数据结构

描述数据库的组成对象以及对象之间的联系,是对系统静态特性的描述

内容:与对象的类型内容性质有关,也与数据之间的联系有关

数据操作

对数据库中对象和实例的操作集合,增删查改,是对系统动态特性的描述

完整性约束条件

一组完整性规则的集合

完整性规则:给定数据模型中数据及其联系所具有的制约和依存规则,用于限制数据模型的状态及状态变化,以保证数据的正确、有效和相容。

常用的数据模型

层次模型和网状模型称为非关系模型,关系模型、面向对象关系模型、对象关系数据模型、半结构化数据模型

层次模型

是用树形结构来表示实体以及实体之间的联系,满足以下两个条件的基本层次结构的集合称为层次模型

  • 有且只有一个节点没有双亲结点,称为根节点
  • 根以外的节点有且只有一个双亲节点

层次模型的术语

  • 根节点
  • 双亲结点
  • 兄弟节点
  • 叶节点(子节点)

特点:双亲结点是唯一的;只能直接处理一对多的实体联系;每个记录类型可以定义一个排序字段(码字段);任何记录值只有按其路径查看才能显出它的全部意义;没有一个子女记录能脱离双亲记录值而独立存在。

完整性约束:

  • 不能插入无双亲的子节点
  • 如果删除双亲节点,则所有子节点也被删除
  • 更新操作数,应更新所有对应记录以保证数据的一致性

优点:

  • 数据结构简单清晰
  • 查询效率高于关系模型,不低于网状模型
  • 提供了良好的完整性支持

缺点:

  • 多对多表示不自然
  • 对插入和删除操作的限制多,程序编写复杂
  • 查询子节点必须经过双亲节点
  • 层次命令趋于程序化

网状模型

满足以下条件:

  • 允许一个以上的节点无双亲
  • 一个节点可以有一个以上的双亲

层次模型是网状模型的一个特例,网状模型中父子节点的联系可以不唯一,要为每个联系命名并指出与该联系有关的父子节点

优点:

  • 更直观的描述现实世界
  • 具有良好的性能,存取效率高

缺点:

  • 结构复杂,随着数据的增多,数据越来越复杂不利于维护
  • DDL、DML语言复杂
  • 记录之间的联系是通过存取路径实现的,用户必须了解系统结构的细节

关系模型

逻辑结构是一个二维表,由行和列组成

  • 关系:即一张表
  • 元组:一行
  • 属性:列
  • 主码
  • 域:一组具有相同数据类型的值的集合,属性的取值范围
  • 分量:元组中的一个属性值
  • 关系模式:对关系的描述,即实体型,下划线的属性是主码

关系模型的规范:

  • 每一个分量都是密不可分的数据项,数据项是关系模型中的最小操作单位,即不允许表中有表
2.png

优点:

  • 建立在严格的数学概念的基础上
  • 概念单一,实体和各类联系以及对数据的检索结果都用关系来表示
  • 关系模式的存取路径对用户透明,有更高的数据独立性和安全保密性,简化了程序员的工作和数据库开发的工作

缺点:

  • 查询效率低,需要另外增加对查询的优化

数据库系统的结构

模式:schema,是型的描述,反应的是数据的结构和联系,是静态的

实例:instance,模式的具体值,是某一时刻的状态,是动态的,一个模式可以有多个实例

三级模式

  • 模式:定义和值
  • 外模式:使用管理,通常是模式的子集,一个模式可能有多个外模式,一个外模式可以供多个应用使用
    • 保证数据安全性
    • 每个用户只能访问对应外模式中的数据
  • 内模式:存储管理:一个数据库只有一个内模式

二级=映像功能与数据独立性

  • 外模式到模式的映射
  • 模式到内模式的映射

数据的逻辑独立性

应用程序(外模式)与数据库的逻辑结构(模式)是相互独立的,即数据的逻辑结构发生改变,应用程序不用改变

外模式/模式映象定义了外模式与模式之间的对应关系,当模式改变时,只需修改外模式/模式映象,使外模式保持不变,而应用程序时是根据外模式编写的,因次不需要修改外部程序,保证了数据与程序的逻辑独立性

数据的物理独立性

应用程序(外模式)与存储在磁盘上的数据库(文件)中的存储结构(内模式)是相互独立的。数据文件的组织方式改变不需要修改应用程序

模式/内模式映象定义了数据全局逻辑结构与存储结构之间的对于关系,当存储结构改变,只需修改模式/内模式映象,使模式保持不变。同样不需要修改应用程序,保证了数据与程序的物理独立性

第二章

关系数据结构及形式化定义

  • 域:一类具有相同数据类型的值的集合
  • 笛卡尔积:给定一组域D1,...Dn,其笛卡尔积D1*...*Dn={(d1,...,dn)|di=1,...,n}。其中(d1,...dn)称为元组,di称为元组的第i个分量,D1*...*Dn的一个子集叫做该域上的关系,定义在n个域上的关系称为n元关系。有些笛卡尔积可能没有意义

关系的6个性质:

  • 列是同质的
  • 不同的列可以出自同一个域
  • 列序无关性
  • 任意两个元组不能完全相同
  • 行序无关行
  • 分量必须取原子值

几个概念:

  • 候选码:能够唯一标识元组的属性
  • 主码:候选码中选择一个作为主码
  • 主属性:出现在候选码中的属性
  • 非主属性:不出现在候选码中的属性
3.png

关系操作

4.png

关系的完整性

  • 实体完整性

    主属性不能取空值

  • 参照系统完整性

    外码只能取空值或者对于关系中包含的主码,不能取未出现的值

  • 用户定义完整性

    对某些属性进行约束

关系代数

以集合为基础,定义一组运算,由已知关系经过一系列运行,得到需要的查询结果,关系代数是过程化的查询语言

关系代数继承传统的集合运算:交、并、差、广义笛卡尔积。其中交并差要求参与运算的两个关系要由相同的结构。

专门的关系运算:

选择

\sigma_F(R)=\{t|t\in R\bigwedge F(t)=true\}

其中F是条件,一般为一个逻辑表达式

投影

从R中选择出若干属性组成新的关系
\pi_A(R)=\{t[A]|t\in R\}

其中A为要取出的R中的列的集合

注:投影之后不仅取消了原关系中的某些列,还可能取消某些行(避免重复行)

连接

5.png

同样需要取消重复列

两种常用的连接运算

  • 等值连接:A=B
  • 自然连接:特殊的等值连接,要求条件中的两个列必须是同名的,并在结果中合并

几种特殊的自然连接:

  • 左外连接:保留左侧不匹配的,NULL填充,下同
  • 右外连接:保留右侧不匹配的
  • 外连接:保留不匹配的
  • 内连接:丢弃不匹配的(一般的自然连接)

象集

6.png

除法

假设R=(X,Y),S=(Y,Z),X,Y,Z是属性组,求R\div S\\ 若T=\pi_Y(S)\in V=Z_{x_i}(R)\\ 注:这里的Z是象集,不是上面的属性组\\ 则在结果中加入x_i元组\\ 即,R\div S=\{x|\pi_Y(S)\in Z_{x_i}(R)\}

整除,类似取样性质,需要取样时会用到除法

7.png

对于共同属性的判断,是域相同而不是属性名相同,但通常是指公共属性

各类符号

8.png

关系演算

9.png

看PPT

SQL

在mysql中,create database和create schema是等价的

一些sql关键字:

  • authorization:指定所有者
  • primary key:指定主键,主键指定的属性不能用unique和not null修饰
  • unique:唯一性约束,但可以有多个空值
  • foreign key (<column.name>) references <table.name>(<column.name>)
  • distinct:消除重复组。select distinct * from table.name
  • between and/not between and
  • in/not in
  • like:%通配符,_单通配符/not like
  • desc降序/asc升序
  • group by:分组并使集函数分别作用于每个组
  • intesect:返回两个select查询中相同的部分
10.png

索引

  • 普通索引
  • 单一索引:对索引加上unique约束,create unique index table.name(column.name)
  • 聚簇索引:会改变内模式
11.png
12.png

自身连接

select a.con, b.conp from course a,course b;取别名

13.png

嵌套查询中子查询不能使用order by语句

14.png

子查询时,子查询语句要放在等号后面

相关子查询:子查询的条件与父查询当前值相关。相关子查询如果子查询和父查询是对同一个数据库操作,必须使用别名。如果是不相关子查询也可以不用别名。

集函数不能出现在where字句中,只能在select字句和having短句中。集函数不能嵌套。

15.png

from语句后的表也可以是子查询,但必须使用别名

数据更新时会检查完整性规则:

  • 实体完整性
  • 参照完整性
  • 用户定义完整性

视图view

和表操作基本一致,但是view不占用实际存储空间,而是在使用时从表中获取临时数据集,视图对应外模式。

视图的作用:
简化用户操作,使多用户从多个角度看待同一数据,保证数据的逻辑独立性,提供数据保密

数据完整性

三个要求:

  • 提供定义完整性约束条件(可定义)
  • 提供完整性检查的方法(可检查)
  • 违约处理(可处理)

实体完整性

定义

  • 列级约束定义

    在建表时的列声明后加上码约束,单属性码

  • 表级主码约束

    在建表时列声明完成侯最后进行码约束,单属性或多属性码

检查

DBMS检查:

  • 主码是否唯一

    • 全表扫描

      耗时

    • 索引

      DBMS在主码上自动建立索引

      • B+树索引
  • 检查主码是否为空

参照完整性

定义

  • foreign key创建2外码约束
  • references指明外码参照的表和其属性
  • 外码定义时需要定义外码是否允许为空

检查

  • 附表插入元组中的外码在主表中没有对应的主码
  • 附表修改元组中的外码在主表中没有对应的主码
  • 主表中删除一个元组导致附表中的元组外码对应缺失
  • 主表中修改一个元组导致附表中的元组外码对应缺失

处理:

附表操作:拒绝

主表操作:拒绝/级连删除/附表中对应外码设空

用户定义完整性

属性约束

定义

表声明列定义时添加的约束:

  • 列值非空:NOT NULL
  • 列值唯一:UNIQUE
  • 列值检查:CHECK

检查和处理

拒绝

元组约束

定义

表声明列定义时使用CHECK语句建立,可以设置同一组不同属性之间的约束

检查和处理

拒绝

完整性约束命名字句

定义

constraint <约束名> <约束条件>

约束条件包括:

  • not null
  • unique
  • primary key
  • foreign kry
  • check

修改

alter table <table.name> (drop/add) constraint <constraint.name>

断言

create assertion语句创建断言

create assertion <assertion.name> <条件>

对断言中涉及的关系进行操作都会触发断言,不能通过断言的操作都会被拒绝

触发器

定义

create trigger <触发器名>

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

referencing new/old row as <变量>

for each {row/statement}

[when <触发条件>]<触发动作体>

触发器又叫:事件-条件-动作;触发器只能定义在基本表上,不能定义在视图上;基本表数据发生变化时,将激活定义在该表上相应的触发器

before/after指定触发动作执行的时间;触发事件是insert\delete\update或者他们的组合,或update of <列名,...>指定触发列;row/statement指定触发器级别,语句级触发器每条语句最多触发一次,行级触发器每行最多触发一次

关系数据理论

数据依赖

一个关系内部属性与属性之间的一种约束关系,是现实世界属性间相互联系的抽象,是数据的内在性质,是语义的体现。

规范化

函数依赖

由一个属性可以唯一确定另一个属性,称为函数依赖(类似函数关系)。如学号可以唯一确定姓名。

通过依赖将模式分解。

16.png

平凡函数依赖与非平凡函数依赖

17.png

若X->Y,则称X为这个函数依赖的决定因素

  • 完全函数依赖

    X->Y,X的任何真子集,不能决定Y,称为完全函数依赖

18.png
  • 部分函数依赖

    X->Y,X的某个真子集也能决定Y,称为部分函数依赖

19.png
  • 传递函数依赖

    20.png

  • 全码

    关系中,所有属性共同决定组成候选码,任意部分都不能组成候选码,改码称为主码

  • 候选码

  • 主码

  • 外码

范式

  • 1NF
  • 2NF
  • 3NF
  • BCNF
  • 4NF
  • 5NF
21.png

第一范式

表项不可再分

第二范式

每个表都有主码

任何一个非主属性,都完全依赖于候选码

例如主码(学号,课程号),非主属性(成绩,姓名),其中非主属性姓名不是主码的完全依赖(只依赖于学号),那么该关系不属于第二范式

尽量让主码为单一字段

将不符合第二范式的模式分解,使其符合第二范式

22.png

第三范式

不存在非主属性之间的传递依赖

BCNF

只有候选码能决定属性组

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,847评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,208评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,587评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,942评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,332评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,587评论 1 218
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,853评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,568评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,273评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,542评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,033评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,373评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,031评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,073评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,830评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,628评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,537评论 2 269

推荐阅读更多精彩内容