数据库系统概论

数据库系统概论

Purpose of Database Systems
1.User-dbms-os-db
2.数据库的好处:
(1)减少信息冗余和不一致
(2)减少接入数据的难度,对于每一个新的任务都需要写一个新的程序
(3)数据孤立
(4)具有完整性约束
(5)更新的原子性(如果更新就全部更新,失败全部返回原样)
(6)并发性的控制
(7)安全性
View of Data
分为三层:
物理层:数据是怎样存储的,数据底层的数据结构
逻辑层:数据之间的关系,以及数据库中的那些数据被存储了
视图层:描述数据库中的一部分数据

实例:特定时刻存储在数据库中的信息集合
模式:数据库中的总体设计

物理数据的独立性

数据模型:
关系数据模型
实体-联系模型
面向对象的模型
网状数据模型和层次数据模型

Database Languages
ddl:数据定义语言

data dictionary:存储了数据库的模式,完整性约束和授权管理。

dml:数据操作语言(query language)
数据的增删改查
过程性语言(procedural):定义需要的数据和怎样获取数据。
声明语言(declarative nonproducedural):指明需要的数据但是不用指明如何获取他

Relational Databases
居于关系数据模式建立的
通过一些表格实现
包括数据定义语言和数据操作语言

Database Design
逻辑设计:决定数据库的模式:应该记录什么属性以及关系模式以及不同关系模式之间属性的分布
物理设计:决定物理层面

Data Storage and Querying

Transaction Management

Database Architecture
dml由两部分组成:
(1)存储管理:数据存储在二级存储设备上,磁盘
storage manager是一个与文件系统交互的程序,更新数据十分的高效
功能:
1授权和完整性约束
2事务管理
3文件管理
4缓存管理

disk management的三种数据格式(storage manager的存储数据结构):
1 数据文件(data file):存储数据库本身
2数据字典(data dictionary):数据库的关系模式
3索引(indices):对于存储有特殊值的数据项提供快速的接入。
(2)查询管理
Database Users and Administrators

数据库的用户:
(1)无经验用户(naive user)
(2)应用程序员(application user)
(3)老练的用户(sophisticated user)
(4)专门的用户

Database Administrator  DBA

Overall Structure
数据库的功能是简化和便利对数据的接入。
实现措施:
1数据的抽象
2非过程性语言

query process

Query processor components include:
DDL Interpreter:
编译ddl语句并且将信息记录在数据字典当中
DML Compiler
将dml语句转化为低层次指令的执行计划
Query Evaluation Engine
执行低层次的语句通过dml编译器

transaction management:
1数据的原子性
2多并发性

Structure of Relational Databases
relations:代表着一个实体集合或者是一个关系集合。(d1,d2,d3是domain,关系是d1d2d3进行笛卡尔积的子集)
tuple:每一行
attribute:每一列
domain:列中元素的取值

a1a2a3是属性
R = (a1a2a3)是关系模式(relation schema)
r(R)是关系

relation instance 是在一个特定时间点下的关系。

surperkey
candidate key
primary key
foreign key
一个关系中的其中一个属性和另一个关系的主码相对应。这个 关系叫做referencing relation,参照的关系叫做referenced relation

Fundamental Relational-Algebra-Operations
1选择
2投影
3并集
4差集
5笛卡尔积
6重新命名

找最大值:
1找到不是最大的值
2用所有的值减去不是最大的值

Additional Relational-Algebra-Operations
1并集
2自然连接
3除
4赋值
Extended Relational-Algebra-Operations
1广义投影
2聚集函数(avg,min,max,sum,count)
在聚集函数可以用as,例如sum(balance)as sum_balance
3外连接
1非全连接
2左外连接
3右外连接
4全连接
Null Values
null表示一个值不存在或者是一个不确定的值
聚集函数忽视空值(null)
Modification of the Database
1插入
2删除
3修改

Data Definition
可以规定:
(1)完整性约束
(2)每个属性的取值
(3)关系的关系模式
(4)授权
(5)物理存储的结构
(6)索引的取值

sql中的domain的类型:
char(n)
varchar(n)
int
smallint
numeric(p,d)一共有p位数字,小数部分占d位
real,double precious
float(n)
可变长的类型一般节省空间但是效率不高。

创建表格:
create table branch (
branch_name char(15), branch_city char(30),
assets integer,
primary key (branch_name))

删除表格:
drop table r :
删除表格r的关系模式和内容
delete table r
删除表格中的信息

增加或者删除表格的属性:
alter table r add A D
初始值全部都是null
alter table r drop A
删除表格的A属性

Basic Query Structure

select 语句:
1.sql语句对名字是大小敏感的
2 .sql允许重复在关系上,去除重复可以用关键字distinct
select distinct banch_name
from loan
3.关键字all意思是允许重复,默认的是all
4.星号代表着选择所有的属性
select *
from loan
5类比于广义投影,select语句中可以包含这加减乘除
6.可以用as语句,相当于改名

where语句:
1.有着and or not。><=>=<=
2between语句
select loan_number
from loan
where amount between 900 and
1000

from语句:
1.也有as,可以将表变成简称。例如:select …
from aaa as b
where b…
2.%匹配任意长度的任意字符。_匹配其中的一个任意字符。跟关键字like进行匹配。
匹配含有main的元组
where customer_street like ‘%
Main%’
如果碰到转义字符:
例如匹配80%
like ‘80%’ escape ‘’

order by语句:
排序,desc降序,asc升序
order by amount desc,loan_number asc

Set Operations
1.并集union
2.交集intersect
3.差集except

Aggregate Functions:

聚集函数,group by 语句
找到每一个银行的人数:
select branch_name,count(distinct customer_name)
from depositer,account
where depositer.account_number = account.account_number
group by branch_name
having count(distinct customer_name)》 1200

Null Values

is null 来检查一个值是否是空值
对null进行运算最后得到的值还是null
null is null true
null == null unknow false
所有的聚集函数除了count(*)胡烈含有待空值的元组

Nested Subqueries(嵌套查询)

set membership:
找到所有具有存款和账户的客户:
select distinct customer_name
from borrower
where customer_name in (select customer_name
from depositor)
还有一个关键字:not in

set comparsion:

关键字some:
题目:寻找…比什么条件的一些…好
=some = in
!=some != not in
关键字all:
题目:寻找…比什么条件的所有…好

test for empty relations:
关键字:exist和not exist
exist r r != 空
not exist r r 为 空
题目描述寻找人的账户都位于一个地区所有的银行;
select customer_name
from browwer as S
where (select branch_name from branch where branch_city = ‘’) except(select R.branch_name from account as R,positer as T where T.account == R.account and R.customer_name= S.customer_name )

unique:
题目描述:找到所有客户当中在…银行中只有一个账户
select T.customer_name
from depositer as T
where unique(
select *
from account ,depositer as R
where T.customer_name = R.customer_name and R.account_name =
account.account_number and account.branch_name = ‘Perryride’
)

derived relation (派生属性):
sql允许在from中引入子查询。
例子:寻找所有均值大于1200美元的银行
select branch_name,avg_balance
from (select branch_name , avg(balance)
from account
group by branch_name
)as branch_avg(branch_name , avg_balance)
where avg_balance_avg > 1200

with子句:
提供临时的视图。
例子:寻找最大的账户余额
with max_balance(value) as
select max(balance)
from account

Complex Queries

Views
create view v as <>
create view all_customer as
(select branch_name, customer_name
from depositor, account
where depositor.account_number =
account.account_number )
union
(select branch_name, customer_name
from borrower, loan
where borrower.loan_number = loan.loan_number)

Modification of the Database
删除:
例子:删除…银行中所有的用户元组
delete from account
where branch_name = ‘Perryrige’
例子:删除…城市中所有银行的信息
delete from account
where branch_name in (select branch_name
from branch
where branch_city = ‘Needham’
)

插入:
insert into account
values(‘A-9732’, ‘Perryridge’, 1200)

更新:
update account
set balance = account.balance*1.06
where balance > 1000

updata account
set balance = case
when balance < 10000
then balabce * 1.05
else balance*1.06
end

Joined Relations**
inner join
left outer join
right outer join
full outer join

自然连接的时候可以指定具体地对应键
loan inner join borrower on
loan.loan_number = borrower.loan_number

SQL Data Types and Schemas
时间类型:
date:yyyy-mm-dd
time:hh-mm-ss
time(i)
timestamp:时间戳,就是time+data
interval:时间段

提取:
extract(year from r.starttime)
类型转化:
cast string as date

用户定义类型:
create type dollars as numeric(12,2)final
create domain person_name char(20) not null
domains 有限制,例如not null

用户定义类型的作用:
1.插入数据库的数据是否有效
2.是查询语句具有实际的意义

数据类型的转化:
cast r.A as Pounds

大对象类型:
1.blob:binary large object
2clob:character large object
当一个大对象进行返回的时候,返回的是指针,而不是本身。

Integrity Constraints

not null
primary key
unique
check(p),where p is a predicate

create table branch
(branch_name char(15),
branch_city char(30),
assets integer,
primary key (branch_name),
check (assets >= 0))

create domain hour_wage numeric(5,2)
constrain value_test check(value >= 400 )

assertion(断言):

asserting:
for all x,p(x)所有的x满足p(x)这个条件
可以等价为:
not exist x such that not p(x)
例子:每一个贷款拥有着都至少拥有一个1000余额的用户。
create assertion balance_constrain check(
no exists(
select *
from loan
where not exist(
select *
from borrow ,depositor , account
where loan.loan_number = borrow.loan_number
)
)

例子:银行当中存款的总数,大于借款的总数
create assertion sum_constrain check(not exist
from branch
where(
select sum(amount)
from loan
where loan.branch_name = branch.branch_name
)>=
(select sum(balance)
form account
where account.branch_name = branch.branch_name)

Authorization
对于数据库信息的权限
1读取
2插入
3更新
4删除
对于数剧库关系模式的权限
1索引:也就是存储常量的变量
2资源:允许创造新的关系
3改变:允许删除和添加新的属性
4删除:关系的删除

授予权限(grant):
grant on to
例子:给u1u2u3三个用户授予在银行关系上的选择权限
grant select on branch to u1,u2,u3

取消权限(revoke):
revoke
on
form
例子:给u1u2u3三个用户取消在银行关系上的选择权限
revoke select on branch to u1,u2,u3

Embedded SQL

host language 和 embedded language

EXEC SQL

END_EXEC

#SQL { …. };

例子:
EXEC SQL
declare c cursor for
select depositor.customer_name, customer_city
from depositor, customer, account
where depositor.customer_name=customer.customer_name and depositor .account_number=account.account_number
and account.balance > :amount
END_EXEC

首先声明游标cursor:
declare c cursor for:
让查询执行:open:
exec sql open c end_exec
查取结果:fetch
exec sql fetch c into :cn,:cc end_exec
让数据库删除暂时关系:close
exec sql close c end_exec

通过游标cursor来更新数据:
update account
set balance = balance+100
where current of c

Dynamic SQL
(允许程序在运行的时候执行并且提交sql查询命令)
char * sqlprog = "updata account set balance = balance*1.06 where account_number = ? "

Exec sql prepare dyprog from :sqlprog;
char account[10] = ‘A_101’
exec sql excute dynprog using :account

ODBC and JDBC
Modeling(模型)
一个模型可以当做:实体集合联系集

entity
entity sets
attributes:
domain
attributes:
relationship
relationship sets

1.简单和复合属性
能不能再分,比如姓名可以分成名字和姓,地址有城市,街道等等
2.单值和多值属性
比如一个人的手机号有多个值
3.派生属性
由实体的其他属性生成的属性

Constraints

mapping cardinality constrains
1一对一
2一对多
3多对一
4多对多
AB里的一些元素可能不会参与这种映射关系

participation constraints
1total
2partial

key for relationship sets
关系集上的主键一多的一方为标准

E-R Diagram

矩形(rectangle):代表着实体集
菱形(diamonds):代表着关系集
线(line):与属性联系
椭圆(ellipse):
(1)(double ellipse)双椭圆:代表着多值数型
(2)虚线椭圆(dashed ellipse):代表着派生属性
下划线(underline):代表着主键属性

roles:can use roles to specify how entities interact vis relationship set.

箭头 代表着one
线代表着many

participation:
双线代表着全部参与
单线代表着部分参与
0…*代表着:一个账户可以被0个或者多个人拥有

在三元关系,最多只有一个箭头指向
如果在三元关系当中有两个箭头,则该三元关系存在着两义性

Design Issues

问题一:使用实体集还是属性
取决于具体问题
问题二:使用实体集还是联系集
描述发上在两个实体集之间的动作
问题三:二元关系集还是多元关系集

从多元关系转化成二元关系:
1.将中间的三元联系集变成一个实体集,在这个实体集合另外三个实体集之间创造三个联系集。
2为这个创造的实体集找到唯一的标识属性。
3.将原来三元联系集上的属性全部添加在新建立的这个实体集上。

转化的缺点:
1.得为新创造的一个实体集上创造一个标识属性
2.多元关系联系集显示更加清楚对于多个联系集之间的关系
3.对于三元联系集上的完整性约束必须的转化成二元联系集上的完整性约束

问题四:联系集上的属性替换
联系加上的属性可以放在多的那一边
对于多对多联系集,联系机上的属性只能放在联系集上。
Weak Entity Sets

实体集上没有主键的叫做虚实体集。
虚实体集的存在必须依靠一个指定的实体集
虚实体集和标明实体集存在的是total 一对多的问题
表明时提及用双线菱形表示
虚实体集存在着分辨符,分辨符和标明实体集上的主码共同构成了虚实体集的主码。

Extended E-R Features
到三角形上写着ISA
E-R模型的特殊化
属性继承关系。低层次的实体集继承所有高层次实体集的属性。
E-R模型的泛化
联系很多实体集组成一个泛化实体集,里面包含着这些实体集的公共属性

特殊化和泛化的限制条件:

(1)那个实体可以成为低层次的实体
1定义的条件:65岁以上的居民被称为高级居民。
2用户自定义
(2)在单独的一个特殊化当中,一个实体是否可以属于多个低层次的实体集
1disjoint 一个实体只可以属于一个低层次的实体集
2overlapping:一个实体可以属于多个低层次的实体集
(3)高层次实体是否必须特殊化
1total 所有高层次实体集中的实体必须实体化
2partial部分高层次实体集中的实体参与了特殊化

aggregation
两个联系集之间的联系代表着两个联系的重叠信息。
例子:员工,银行,职位对应着一个经理

e-r图的设计:
1.实体集和属性代表着一个对象
2.实体集合联系集
3三元关系可以转化成二元关系
4强实体集合弱实体集之间的联系
5特殊化和泛化的使用
6聚合的使用

Design of the Bank Database
对于实体集:
强实体集属性不变
弱实体集加入指示实体集的主码

联系集:
在多对多的关系当中,联系集有两者的主码和其他元素共同构成
在一对多和多对一的联系当中,联系集上的属性可以添加在多的一端当中
在一对一的关系当中,任意一边都可以被当做多的一边
如果多的一一边是部分参与,使用联系集的消除会产生很多空值
弱实体集联系指标实体集会产生冗余

复合属性:
将复合属性替换成几个单值属性

多值属性:
进行划分EM
E原来的关系模式,M多值属性以及E实体集的主码

特殊化的表示:
方法一:
建立高层次的实体表
对于低层次的实体,分别建立实体表
缺点:
查询一个人要访问两张表格

方法二:
对于继承的属性以及特殊化后自身所带的特殊属性建立一张表格
对于total,不需要建立generalized entity
缺点:对于overlapping,可能会造成信息冗余

聚合的模式表示:
包括聚合实体集的 主码和聚合实体集相联系实体集的主码,以及任意的描述属性

Reduction to Relation Schemas

Database Design

Transaction Concept 事务概念

一组执行数据接入和更新的程序
两个主要的问题需要解决:
1失败类型的种类,是硬件上的失败还是系统上的失败。
2多事件的并发执行

事务的性质:
1.原子性
所有的操作要么做,要么不做
2.一致性
事务执行的结果是使数据库从一个一致性状态转到另一个一致性状态
3隔离性
一个事务执行时不能被其他事物干扰,一个事务内部的操作以及使用的其他数据对其他事务来说是隔离的
4持续性
持续性又叫做永久性,一个事务一旦提交,他随数据库的改变是永久的

Transaction State 事务状态
1.active:当事务正在执行的时候,处于该状态
2partially committed 当最后一条语句被执行了
3failed 一些语句无法执行
4aborted :事务开始回滚,并且数据库恢复到了之前的状态
5committed;事务执行成功

Concurrent Executions 并发执行

好处:1增加了处理器和硬盘的利用率(提高吞吐量和资源利用率)
一个事务正在使用cpu另一个正在从硬盘上读取数据
2减少了平均的响应时间
时间短的事务不需要等待时间长的事务执行完在执行

concurrency control schemes(并发控制模式):为了防止并发的事务破坏数据的一致性

schedule:a sequences of instructions that specify the chronological order in which instructions of concurrent transactions are executed

调度:指令在系统中执行的时间顺序
串行的(serial)
并行的(concurrency)

Serializability 可串行化
在并发执行中,通过保证所执行的任何调度的效果都与没有并发执行的调度效果一致,我们可以确保数据库的一致性。也就是说。调度在某种意义上等价一个串行调度,也叫作可串行性

冲突可串行化:

  1. li = read(Q), lj = read(Q). li and lj don’t conflict.
  2. li = read(Q), lj = write(Q). They conflict.
  3. li = write(Q), lj = read(Q). They conflict
  4. li = write(Q), lj = write(Q). They conflict

在这种规则的约束下,通过指令的调度,如果能够恢复可串行调度,则称这种并行调度是可串行化的。

Recoverability 可恢复性
t6写入数据,t7读入t6写的数据,可以说t7依赖于t6。
一个可恢复调度应该是这样的、。对于每对事务ti和tj。如果tj读取了ti写的数据,ti应该先于tj提交。

无级联调度;
级联回滚:因单一的故障导致一些事务回滚称为级联回滚。
对于每对事务ti和tj。如果tj读取了ti写的数据,ti应该先于tj提交。可以保证无级联回滚

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值