- 数据库安全性
|----------------|------------------------------|
| 论述题5' | |
| 编程题10' | sql 语言实现权限控制 |
一、概述
1、不安全因素
(1)⾮授权对数据库的恶意存取和破坏
(2)数据库中重要的数据泄露
(3)安全环境的脆弱性
2、⾃主存取控制⽅法
grant <权限> on table <表名> to <⽤户>
revoke <权限> on table <表名> from <⽤户>
二、安全性控制
1、数据库安全性控制
(1)、⽤户身份鉴别
静态⼝令鉴别、动态⼝令鉴别、⽣物特征鉴别、智能卡鉴别
- 、存取控制
组成结构:定义用户权限+合法权限检查
(3)、⾃主存取控制⽅法(重点讲解);
1)定义:数据拥有者决定哪些用户可以访问该数据
2)基本原理: 主体S,客体O,访问权限R,关系D
①核心:主体S是否对客体O拥有正确的访问权限R
②如果主体S对客体O有权限R,(S,O,R)在D中;
否则,如果S没有对客体O的权限R, (S,O,R)不在D中
3)通过grant语句 和revoke语句来进⾏控制
4)由用户权限构成: 数据库对象 和 操作权限
5)DS定义:对存取权限的定义 称为++++授权++++
关系数据库系统中存取控制对象,主要存取权限:
(4)、授权 Grant
Grant <权限> 【on 表名[(列名)] 】to ⽤户 【With grant option】;
1)授权命令:由数据库管理员将对指定操作对象的指定操作权限授予指定的用户。
2)With grant option:若给⽤户分配权限时带With grant option⼦句,则普通⽤户获权后,可把⾃⼰的权限授予其他⽤户。否则,不能传播。
注:不允许循环授权
3)附加:
全部权限: all priviliges
所有用户: public
修改学生学号的权限:UPDATE(Sno)
(5)、回收 revoke
REVOKE <权限> (属性) 【ON <数据对象> 】 FROM <⽤户名> 【cascade】
1)授予的权限:由DBA或其他授权者用REVOKE语句收回
2)级联CASCADE语句:
将用户U5的INSERT权限收回的时候必须使用级联CASCADE语句,否则拒绝执行。如果U6或U7还有从其他用户处获得对SC表的INSERT权限,则他们仍具有此权限,系统只收回直接或间接从U5处获得的权限。
(6) 、 进行自主存取控制具体过程
1、用有权限的账号登录SSMS
两种身份验证模式:Windows身份验证模式混合身份验证模式
2、创建登录账号
create login 登录账号名with password='密码'
3、创建数据库用户
create user 数据库用户名for login 登录账号名
- 授权
(7)、创建数据库模式的权限/数据库用户
create user <username>[WITH][DBA | RESOURCE | CONNECT]
1)只有系统超级用户才有权限创建数据库用户
2)数据库用户可有三种权限:CONNECT、RESOURCE和DBA(默认CONNECT权限)
- 数据库⻆⾊
数据库角色:被命名的一组与数据库操作相关的权限的集合
(1) 、 ⻆⾊的创建:
create role <⻆⾊名>
( 2) 、 ⻆⾊授权
grant <权限> on <对象类型> 对象名 to <⻆⾊1>,<⻆⾊2>
( 3 )、 把⻆⾊授权个其他⽤户或者⻆⾊
grant <⻆⾊> to ⻆⾊或者⽤户名字 [with admin option]
若加上with admin option ,这个⽤户还可以将这权限授予给其他⻆⾊或者⽤户
( 4 )、 ⻆⾊权限的收回
revoke <权限> on <对象名> from ⻆⾊名字
- 视图机制
把要保密的数据对无权存取这些数据的用户隐藏起来,对数据提供一定程度的安全保护
EX1、建立计算机系学生的视图,把对该视图的SELECT权限授于王平,把该视图上的所有操作权限授于张明
1)先建立计算机系学生的视图CS_Student
CREATE VIEW CS_Student AS SELECT * FROM Student WHERE Sdept='CS';
2)在视图上进一步定义存取权限
GRANT SELECT ON view CS_Student TO 王平 ;
GRANT ALL PRIVILIGES ON view CS_Student TO 张明;
- 审计
- 定义:跟踪数据库记录和权限的使用监视,同时所有用户对数据的操作并记录到审计日志中SC数据的操作进⾏审计。
- audit语句:设置审计功能
- noaudit语句:取消审计功能
EX1、对修改SC表结构或修改SC表数据的操作进行审计
AUDIT ALTER,UPDATE ON SC;
EX2、取消对SC表的一切审计
NOAUDIT ALTER,UPDATE ON SC;
- 数据加密
通过⼀些加密算法,把明⽂变成密⽂,这样别⼈就⽆法查看
- 简答题:
6.1、什么是数据库的安全性?有哪些安全措施?
(1)数据库的安全性是指☆☆
保护数据库,防止非合法的使用,以免数据的泄漏、非法更改和破坏。
(2)数据库安全性控制的方法☆☆
①用户标识 系统鉴定:DBMS 都要提供一定的方式供用户标识自己。在存取数据库的数据前,用户首先要自我标识,系统对用户的标识迚行核定,通过鉴定后,才提供数据库的使用权。常用的标识方法是用户名和口令字。
②存取权限的控制:用户被获准使用数据库后,还要根据预定的用户权限迚行存取控制,如某个用户只能读哪些数据库表,某个用户只能写哪些数据库表等。
③数据加密:以密码的方式存储数据。
6.2、计算机系统的安全模型包括哪几个部分
用户 数据库安全保护 操作系统 数据库 及其操作图
6.3、常用的用户身份鉴别方法都有哪些?
静态口令鉴别,动态口令鉴别,智能卡鉴别,生物特征鉴别
6.4、简述强制存取控制的定义
强制存取控制是指系统为保证更高程度的安全性,
按照TDI/TCSEC标准中安全策略的要求所采取的强制存取检查手段。
6.5、试述计算机系统的安全模型
应用层次 → 数据库管理系统(DBMS)→操作系统(OS)→数据库(DB) 用户标识和鉴别 数据库安全保护 安全保护 数据加密 视图 日志 审计 存取控制(自主、强制) →层次越低,安全性越高
6.6简述自主存取控制和强制存取控制的不同
1、在自主存取控制方法中,用户对于不同的数据库对象有不同的存取权限,不同的用户对同一对象也有不同的权限,而且用户还可将其拥有的存取权限转售给其他用户,因此自主存取控制非常灵活。
2、在强制存取控制方法中,每一个数据库对象被标以一定的密级,每个用户也被授予某一个级别的许可证,对于任意一个对象,只有具有合法许可证的用户才可以存取。强制存取控制因此相对比较严格。
6.7、DBMS存取控制机制主要包括两部分:
自主存取控制和强制存取控制
6.8在SQL语言中为了数据库的安全性,设置了对数据的存取进行控制的语句对用户授权使用 GRANT REVOKE语句收回所授的权限
6.9举例说明对数据库安全性产生威胁的因素。
(I) 非授权用户对数据库恶意存取和碳坏:恶意互联网企业的软件开发人员利用数据库平台软件有漏河的函数将普通用户权限提升为管理员权限,存取和删改相应数据:
(2) 数据库中重要或敏感数据被露:恶意金融企业的教件开发人员使用不合法的手段盗取其他金业数据库中的企业运行的重要数据:
(3) 安全环境脆性:恶意入侵医院 DBMS 者使用 MS-Excel等其他客户端与医院病人信息 DBMS 相连,破坏环境安全任,查看医院病人的病历,侵害相应病人的权益。
6.10什么是数据库中的自主存取控制方法和强制存取控制方法?
(1) 数据库中的自主存取控制方法:
用户对不同数据库对象以及不同用户对同一对象存取权限不同,且用户可将其拥有的存取权限转授给其他用户,非常灵活。
(2) 数据库中的强制存取控制方法:
每个数据对象用某个密级标记,每个用户用某个级别的许可证标记,仅具有合法许可证的用户可存取任意对象,相对比较严格。
6.11 解释强制存取控制机制中主体、客体、敏感度标记的含义。
强制存取控制机制小主体、客体、领悠度标记的含义:
(I) 主体:系统中的活动实体,包括 DBMS 管理的实际用户和代表用户的各进程:
(2) 客体:系统中的被动实体,受主体操纵,包括文件、基本表、索引、祝图等:
(3)敏感度标记:DBMS 为主体和客体的每个实例(值)指派一个敏感度标记,敏感性标记的密级次序 TS(绝率)>S(机密)>C(可信)>P(公开)。主体的敏感度标记称为许可证级别,客体的敏感度标记称为密级。
6. 10举例说明强制存取控制机制是如何确定主体能否存取客体的。
强制存取控制机制确定主体能否存取客体的举例说明:
假设对关系 Teacher 进行 MAC,对控制存取的数据单元(元组》用密级标记,Teacher 元組密级如表4-6所示(4=绝密,3=机密,2=可信,1=公开)。
若用户U1 和U2的许可证级别分别为4和1.则根据存取规期,U1能读取元组 TI、T2、T3、T4,只能写T4:U2火能读取和写元组Tl。
6.11 什么是数据库的审计功能,为什么要提供审计功能?
(I) 数据库中的市计功能的定义:
审计功能是把用户对数据库的所有操作白动记录 下来放入审计目志中,包括用户级审计和系统级审计。
(2) 提供审计功能的原因:
①任何系统的安全保护措能都不是完美无缺的,盗意盗窃破坏数据的人总可能存在。审计员利用审计日志鉴控数据库中各种行为,重现导致数据库现有状况的一系列事件,找出非法存取数据或豁意盗窃破坏数据的人、时间和内容等,保护系统安全:
②对审计日志分析,提前采取措施兆潜在成胁,保护系统安全。
- 数据库完整性
|---------------|-------------|
| 论述题5 | |
| 编程题10 | 触发器 |
- 完整性
1、数据库的完整性是指:数据库数据的正确性和相容性☆☆
****2、正确性:****指数据是符合现实世界语义,反映了当前实际状况的
3、 相容性 ****:****指数据库同一对象在不同关系中的数据是符合逻辑的
4 、简述数据为什么要具有完整性和安全性?
数据的完整性:
防止数据库中存在不符合语义的数据,也就是防止数据库中存在不正确的数据
防范对象:不合语义的、不正确的数据
数据的安全性:
保护数据库防止恶意的破坏和非法的存取
防范对象:非法用户和非法操作
- 简述数据库的完整性的作用?
为了防止数据库中存在不符合语义的数据,也就是防止数据库中存在不正确的数据。
6、为维护DB的完整性,关系DMS具备的三个功能:☆☆
1 、 提供定义完整性约束条件的机制
①关系模型的完整性约束分类:实体完整性、参照完整性、用户自定义完整性
②完整性约束实现方法:由SQL的DDL语句来实现,并存入数据字典
2 、 提供完整性检查的方法
①完整性检查:DBMS中检查数据是否满足完整性约束条件的机制
②检查时机:INSERT、UPDATE、DELETE语句执行后,或事务提交时检查
- 违约处理 :
拒绝no action、级联cascade、设置为空set null
- 解答题:
- 数据库的完整性概念与数据库的安全性概念有什么区别和联系?
-
区别:
-
联系:两者都是对数据库进行规范和限制的,最终目的是保护数据库。
- 什么是数据库的完整性约束条件?
数据库的完整性约束条件是指数据库中的数据应该满足的语义约束条件,表达给定的数据模型中数据及其联系所具有的制约和依规则,限定符合数据模型的数据库状态以及状态的变化,保证数据的正确、有效和相容。
- 关系数据库管理系统在实现参照完整性时需要考慮哪些方面?
(1)修改关系的主码值,只能先删除元组,再把有新主码值的元组桶入到关系中。着允许修改主码,先保证主码唯一性和非空,再区分参照关系和被參照关系:
(2) 外码是否可以为空值:
(3)在参照关系中捅入元组时,系统可能采取受限插入和递归播入的方式:
(4)删除核参照关系元组时,系统可能采取級联删除、受限删除和置空值删除的方式。
6.在关系系统中,当操作违反实体完整性、参照完整性和用户定义的完整性约束条件时,一般是如何分别进行处理的?
(1)当操作违反实体完整性约束条件时,一般采用的方式是拒绝插入或修改;
(2) 当操作违反参照完整性约束条件时,一般采用的方式是拒绝执行、级联操作、设置为空值;
(3)当操作违反用户定义的完整性约束条件时,一般采用的方式是拒绝执行。
- 三大完整性
2.1、 实体完整性 : 主码唯⼀,且⾮空
1、定义:
CREATE TABLE中用primary key定义
2、 定义方法(两种):
①列级约束②表级约束
注:对多个属性构成的只能定义为表级约束
3、实体完整性规则:
①主码值是否唯一,不唯一则拒绝insert或update
②主码的各个属性是否为NULL,有一个为空就拒绝insert或update
检查记录中主码值是否唯一的方法:B+树索引
2.2、 参照完整性 : 外码没有 、或者有且只有 ⼀个
1、参照完整性:
foreign key (参照关系属性)references 表名(主键)
一个参照完整性将两个表中相应元组联系起来。
2 、参照完整性违约处理:
(1)拒绝(no action)执行(默认)
(2)级联(cascade)操作:
当删除或修改被参照表的一个元组造成与参照表的不一致,则删除或修改参照表中所造成不一致的元组
(3)设置为空值(set null):
当删除或修改被参照表的一个元组造成与参照表的不一致,则对应属性值为空
++++前提条件:该属性允许空值++++
2.3、 ⽤户定义完整性
1 、 属性上的约束条件
(1)CREATE TABLE时定义
①列值非空(NOT NULL)
②列值唯一(UNIQUE)
③检查列值是否满足一个布尔表达式(CHECK( ))
(2)属性上约束检查时机:INSERT元组或UPDATE属性的值时,RDBMS自动检查
(3)违约处理:不满足则拒绝执行
2、 元组上的约束条件
在CREATE TABLE语句中可以用CHECK短语定义元组上的约束,
即元组级的限制同属性值限制相比,元组级的限制可以设置不同属性之间的取值
的相互约束元组级的限制(表级约束)可以设置不同属性之间的取值的相互
约束条件
(1)⾮空
create table student(
no char(9) primary key,
age int not null
);
(2)列值唯⼀
create table student(
no char(9) primary key,
age int unique
);
(3)满⾜某⼀个条件表达式 check来写
create table student(
no char(9) primary key,
sex char(2) check (sex in ('男','⼥')),
age int not null
);
2.4完整性约束命名子句 constraint约束
constraint <完整性约束条件名>
[primary key短语
|foreign key短语
|check短语]
- 断言
1、create assertion <断⾔名> <check⼦句>
其中check字句 与where⼦句的表达式类似
2、删除断⾔名称:
drop assertion 断⾔名字;
- 触发器
4.1定义 ****:****做 事件->条件->动作 规则.(ECA rule)
- 含义:当对⼀个表增、删、改时候, 对触发器⾥⾯的条件进⾏检查,如果成⽴,就执⾏触发器⾥⾯的动作.否则不执⾏⾥⾯的动作.
4.2 CREATE TRIGGER语法格式
CREATE TRIGGER <触发器名>
{BEFORE (前) | AFTER (后) } <触发事件> ON <表名>
FOR EACH {ROW | STATEMENT}
[WHEN <触发条件> ]
<触发动作体>
- 触发事件
①是INSERT、DELETE、UPDATE,也可以是几个事件组合•
②UPDATE OF <触发列,...>,进一步明确指出修改哪个列时触发
BEFORE | AFTER是触发的时机
前触发 后触发
(2)触发器类型
①行级触发器 (FOR EACH ROW)
②语句级触发器(FOR EACH STATEMENT)(默认语句级触发)
如果是语句级触发器,执行完UPDATE语句后触发动作体将执行一次
如果是行级触发器,UPDATE 语句影响多少行,就触发多少次,同时用户在过程体中使用new或old语句引用update/insert事件之后的新值/之前的旧值。
4.3触发器类型
1、DML触发器
(1)含义:
当数据库中发生数据操作语言 (DML) 事件时将调用 DML 触发器
INSERT,DELETE, UPDATE
- 语句:
create trigger 触发器名
of 属性 on 表名 [with encryption]
{for|after|instead of} +{[insert][,][update][,][update][,][delete]}
as
[begin]
[ if update (列名1) ]
sql_statements
[end]
- DDL触发器
- 含义:
DDL事件由DDL语句中的关键字以及关键字之间的下划线构成。
如:创建表事件为create_table
删除表事件为drop_table
修改表事件为alter_table
删除视图事件为drop_view
-
触发事件:
create trigger 触发器名
on {all server|database}
[with encryption]
{for|after} { DDL事件} [ ,...n ]
as
sql_statement
4.4删除触发器
DROP TRIGGER <触发器名> ON <表名>;
- 关系数据理论
|--------|-----------|
| 应用题20' | 范式判断并分解还原 |
- 引入范式原因
数据冗余、更新异常、插⼊异常、删除异常
- 范式
1、某一关系模式R为第n范式, 可简记为R∈nNF。
2、一个低一级范式的关系模式,通过模式分解可以转换为若干个高一级范式的关系模式的集合,这种过程就叫规范化。
3、设计关系数据库时,遵从不同的规范要求,这些不同的规范要求被称为不同的范式,各种范式呈递次规范,越⾼的范式数据库冗余越⼩。
4、⽬前关系数据库有六种范式:第⼀范式(1NF)、第⼆范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF)。(⼀般来说,数据库只需满⾜第三范式(3NF)就⾏)
-
依赖
四、 候选码
- 候选码 概念:(可推出所有属性)
是一个++++属性组++++ (或属性),通过该++++属性组能推出所有的属性++++ ,且该属性组的++++任意子集都不能++++再推出有属性。
即在满足完全函数依赖的前提下,还得是最小的属性组。
2、 如何选出候选码?
小结:(1)一定属于候选码的属性:只出现在左边,或者左右都没出现
(2)可能属于候选码的属性:左右都出现
(3)一定不属于候选码的属性:只出现在右边
step1、找出一定属于、可能属于、以及不属于候选码的属性。
step2、先对确定的属性求闭包,若不能构成候选码,
再将++++待定的属性++++ ++++逐个地与确定的属性++++ ++++进行组合,做闭包++++运算,直到得到的属性组能推出all属性U。
(若两两结合可以找到,则不必三三结合,否则以此类推)
- 闭包运算:
- 闭包:
在关系模式R(U,F)中为F 所逻辑蕴涵的函数依赖的全体叫作F 的闭包,记为F +
- 步骤:
(2)码分类定义:
1) 超码: 能表示出所有属性的集合, 候选码是最⼩的超码.
2) 主码: 从候选码⾥⾯任意跳出⼀个作为主码
3) 主属性: 包含在所有候选码的属性
4) ****⾮主属性:****不包含在候选码中的属性
5) ****全码:****所有的属性都是主码
6) ****外码:****关系模式R中,若有一个属性或属性组X,它不是R的码,但X是另一个关系模式S中的码,
- 四 大范式
****4.1分类:****1NF---(消除非主属性对码的部分依赖)--->2NF---(消除非主属性对码的传递依赖)--->3NF
4.2范式判断步骤:
step1.闭包(求左边元素的组合)
step2.求候选码->主属性->非主属性
step3.根据定义判断范式
1、 1NF : ++++所有属性都是不可分割的数据项++++。
1)定义:
对于关系模式R,当且仅当R中的每个属性对应的域是++++原子++++的,
则该关系模式R属于第一范式,即R
1NF。
- 注:不满足第一范式的数据库模式不能称为关系数据库
2、 2NF : ++++消除非主属性对主属性的部分函数依赖++++。
- 定义:
对于关系模式R,当且仅当R
1NF,且R中++++每一个非主属性都完全函数依赖于候选码++++时,
该关系模式R属于第二范式,R
2NF。
- 判断2NF:
①找出数据表中的所有候选键;
②找出所有主属性和非主属性;
③判断所有的非主属性对候选键的部分函数依赖。
3、 3NF : ++++消除非主属性对候选码的传递函数依赖。++++
- 定义:
对于关系模式R,当且仅当R
2NF,且R中所有++++非主属性都不传递函数依赖于候选码++++时,
该关系模式R,属于第三范式,记作R
3NF。
- 解释:
3NF指表中的所有数据元素不但要能唯一地被主关键字所标识,而且它们之间还必须相互独立,不存在其他的函数关系。
4、 BCNF : ++++消除主属性对主键的部分与传递依赖++++
1)定义:消除任何属性对候选码的传递依赖,即每一个决定因素都包含码,表现为在函数依赖集当中,左边的都包含候选码(整个属性组!)
- 公理系统
Armstrong 公理系统:设U为属性集总体,F是U上的一组函数依赖,于是有关系模式R<U.F>,对R<U.F>来说有以下的推理规则:
- 求最小函数的依赖集
1、依赖定义:
依赖是指关系中⼀个或⼀组属性的值可以决定其它属性的值
2、 如何求最⼩依赖集?
1)右切:
拆多个元素的右边,Eg:A->BC 拆为 A->B 和A->C
- 除本求包:
除去当前元素,求它的闭包(把集合⾥⾯所有元素都弄完)
若其闭包包含本来推出的元素,则删除本条依赖
- 左部最小化:
通过遮住元素 来看能不能推出其他元素,能则去除该元素关系依赖
Eg:BCD,遮住B看:CD能否推出B,能则去B , 再遮住C、D......
- 模式分解
- 关系模式的规范化过程:
通过对关系模式的分解来实现的,把低一级的关系模式分解为若干个高一级的关系模式的方法并不是唯一的,在这些分解方法中,只有能够保证分解后的关系模式与原关系模式等价的方法才有意义。
2、 准则: ⽆损连接 和 保持函数依赖
①⽆损: 就是分解后再次连接,和分解之前⼀样
②依赖: 依赖不变
3、判断无损连接的方法:
step1:画表格。
列表示所有的属性,有多少属性就画多少个属性列。行表示分解后的关系,有几个关系就画几个关系行.
step2:根据每一行关系进行判断。
找到关系中的每个属性对应第几到,并在相应的位置上标为aj,下标j是表格里的列数。其余关系中不存在的属性则标为bij,i、j是表格对应的行数、列数。
step3:依次对函数依赖集里的各个依赖关系进行考案。
倒如有XY->Z。在属性列中找到X和Y,观察X和Y的行列上是否有相同的标记(b的下标要相同),若有,则查看它们对应在属性列2上的各个标记。其中若有aj,则将属性列上的这些标记全部改为aj。若没有aj,则找到i值最小的bij,将这些标记金部改为bij。
step4:反复执行以上操作,直到某一行全部变为a为止,则表明具有无损连接性。否则不具有无损连接性。
- 数据库设计
|--------|---------|
| 应用题20' | ER图关系模式 |
| 论述题5' | |
一、数据库设计的基本步骤
需求分析
2 概念结构设计 ER图或者是设计数据字典
3 逻辑结构设计 把ER图转为逻辑模型
4 物理结构设计 把逻辑模型转为物理模型
5 数据库实施 写SQL代码
6 数据库运⾏维护 性能检测
- 试述数据库设计过程各个阶段上的设计描述☆☆
****( l )需求分析:****准确了解与分析用户需求(包括数据与处理)。
****( 2 )概念结构设计:****通过对用户需求进行综合、归纳与抽象,形成一个独立于具体DBMS的概念模型。
****( 3 )逻辑结构设计:****将概念结构转换为某个DBMS 所支持的数据模型,并对其进行优化。
****( 4 )数据库物理设计:****为逻辑数据模型选取一个最适合应用环境的物理结构(包括存储结构和存取方法)。
****( 5 )数据库实施:****设计人员运用DBMS 提供的数据语言、工具及宿主语言,根据逻辑设计和物理设计的结果建立数据库,编制与调试应用程序,组织数据入库,并进行试运行。
****( 6 )数据库运行和维护:****在数据库系统运行过程中对其进行评价、调整与修改
设计一个完善的数据库应用系统往往是上述六个阶段的不断反复。
- 试述数据库设计过程中结构设计部分形成的数据库模式☆☆
( l )在概念设计阶段形成独立于机器特点,独立于各个DBMS 产品的概念模式,在本篇中就是E-R图;
( 2 )在逻辑设计阶段将E-R图转换成具体的数据库产品支持的数据模型,如关系模型,形成数据库逻辑模式,然后在基本表的基础上再建立必要的视图,形成数据的外模式;
( 3 )在物理设计阶段,根据DBMS 特点和处理的需要,进行物理存储安排,建立索引,形成数据库内模式。
- 什么是数据库的概念结构?试述其特点和设计策略
1、(1)数据库的概念结构的含义:
数据库的概念结构是将用户需求综合、归纳与抽象得到的信息结构(即独立于具体 DBMS 的概念模型)概念结构是信息世界的结构,即概念模型,
2、主要特点是:
( l )能真实、充分地反映现实世界,包括事物和事物之间的联系,能满足用户对数据的处理要求,是对现实世界的一个真实模型;
( 2 )易于理解,从而可以用它和不熟悉计算机的用户交换意见,用户的积极参与是数据库设计成功的关键;
( 3 )易于更改,当应用环境和应用要求改变时,容易对概念模型修改和扩充;
( 4 )易于向关系、网状、层次等各种数据模型转换。概念结构的设计策略通常有四种:
l )自顶向下,即首先定义全局概念结构的框架,然后逐步细化;
2 )自底向上,即首先定义各局部应用的概念结构,然后将它们集成起来,得到全局概念结构;
3 )逐步扩张,首先定义最重要的核心概念结构,然后向外扩充,以滚雪球的方式逐步生成其他概念结构,直至总体概念结构;
4 )混合策略,即将自顶向下和自底向上相结合,用自顶向下策略设计一个全局概念结构的框架,以它为骨架集成由自底向上策略中设计的各局部概念结构。
- 什么是数据库的逻辑结构设计?试述其设计步骤。
数据库的逻辑结构设计就是把概念结构设计阶段设计好的基本 E 一 R 图转换为与选用的 DBMS 产品所支持的数据模型相符合的逻辑结构。
设计步骤为 : ( l )将概念结构转换为一般的关系、网状、层次模型; ( 2 )将转换来的关系、网状、层次模型向特定 DBMS 支持下的数据模型转换; ( 3 )对数据模型进行优化。
- 需求分析阶段的设计目标是什么?调查的内容是什么?
- 需求分析阶段的设计目标:通过详细调查现实世界的处理对象,充分了解原系统工作概况,明确用户的各种需求,确定新系统的功能,并考虑新系统的扩充性和变化性。
- 调查的内容:"数据"和"处理",获得用户对数据库的信息要求、处理要求以及安全性与完整性要求。
- 数据字典的内容和作用是什么?
- 数据字典的内容:
①数据项:不可再分的数据单位;
②数据结构:反映数据之问的组合关系,可以由若干个数据项或数据结构或数据项和数据结构混合组成;
③数据流:数据结构在系统内传输的路径;
④数据存储:数据结构停留或保存的地方,是数据流的来源和去向之-
⑤处理过程:具体处理逻辑一般用判定表或判定树来描述。数据字典中只需要描述处理过程的说明性信息。
- 数据字典的作用:
数据字典是关于数据库中数据的描述,即元数据,不是数据本身,是进行详细的数据收集和数据分析所获得的主要成果,在需求分析阶段建立,是概念设计的基础,在数据库设计过程中不断更新。
- 定义并解释概念模型中以下术语:实体,实体型,实体集,属性,码,实体联系图(E-R 图)
- 实体:客观存在并可以相互区分的事物;
- 实体型:具有相同属性的实体具有相同的特征和性质,用实体名及其属性名集合来抽象和刻画同类实体:
- 实体集:同型实体的集合;
- 属性:表中的一列即为一个属性;
- 码:码是能唯一标识实体的属性,是整个实体集的性质,而不是单个实体的性质;
(6)实体联系图:提供表示实体型、属性和联系的方法,用来描述现实世界的概念模型
9.什么是数据库的逻辑结构设计?试述其设计步骤
(1)数据库的逻辑结构设计的含义:数据库的逻辑结构设计是把基本 E-R 图转换为符合选用 DBMS 产品支持的数据模型的逻辑结构
(2)数据库的逻辑结构设计步骤:
①将概念结构(E-R 图)转换为关系、网状、层次模型;
②将转换来的关系、网状、层次模型转换为特定 DBMS 支持的数据模型;
③对数据模型优化;
④设计用户子模式。
- 规范化理论对数据库设计有什么指导意义?
规范化理论为数据库设计人员判断关系模式的优劣提供理论标准,用于消除相应的数据冗余或联系冗余,指导优化关系数据模型,预测模式可能出现的问题,为设计人员提供自动产生各种模式的算法工具,使数据库设计工作有严格的理论基础。
- 试述数据库物理设计的内容和步骤。
(1)内容:为一个给定的逻辑数据模型选取一个最适合应用环境和要求的物理结构,并选择存取方法、存储结构和评价物理结构。
(2)步骤:
①确定数据库的物理结构,在关系数据库中主要指存取方法和存储结构;
②评价对物理结构,评价的重点是时间效率和空间效率。若评价结果满足原设计要求,则进入到物理实施阶段,否则,需要重新设计或修改物理结构,有时要返回逻辑设计阶段修改数据模型。
- 数据输入在实施阶段的重要性是什么?如何保证输入数据的正确性?
- 重要性:
①数据的载入是数据库实施阶段重要的工作之一,且数据库是用来对数据进行存储、管理与应用的,因此在实施阶段必须将原有系统中历史数据输入到数据库;
②一般数据库的数据量很大,且数据来源于部门中的不同单位,数据的组织方式、结构和格式与新设计的数据库系统存在差距,组织数据录入就要将各类源数据从各局部应用中抽取出来,分类转换,最后综合成符合新设计的数据库结构的形式,输入数据库。因此数据转换、组织入库的工作是相当费力赞时的,具有较高的重要性
(2)方法:针对具体的应用环境设计一个数据录入子系统,由计算机完成数据入库任务。在源数据入库前要采用多种方法对其检验,防止不正确的数据入库。
15,什么是数据库的再组织和重构造?为什么要进行数据库的再组织和重构造?
(1)含义:
①数据库的再组织是指按原设计要求重新安排存储位置、回收垃圾、减少指针链等,提高系统性能;
②数据库的重构造是指部分修改数据库的模式和内模式。
(2)原因:
①数据库运行一段时间后,记录不断增、删、改,会使数据库物理存储情况变坏,降低数据的存取效率,数据库性能下降,需要 DBA 对数据库重组织;
②DBMS 一般都提供用于数据重组织的实用程序,数据库应用环境常常发生变化,如增加新应用或新实体,取消某些应用,有的实体与实体间的联系也发生变化等,使原有数据库设计不能满足新需求,需要调整数据库的模式和内模式,需要数据库重构造。
七、 ER图
- 数据库编程
|-------------------------|--------------|
| 编程题10 ' | 存储过程 |
一、 嵌入式SQL
就是把SQL语句嵌⼊到 其他编程语⾔⾥⾯ ⽐如java
二、 嵌入式SQL的处理过程:
预编译转换为函数调⽤
主语⾔编译
边成主语⾔所编译的类型
三、 SQL与主语言的通信
1 SQL给主语⾔传递状态
2 主语⾔给SQL提供参数
3 SQL把查询结果交给主语⾔处理(游标,和主变量实现)
四、存储过程
- 创建存储过程
create or replace procedure 过程名 (
[[IN|OUT|INOUT] 参数1 数据类型,
[IN|OUT|INOUT] 参数2 数据类型,
...]
) /*存储过程首部*/
AS <过程化SQL块>; /*存储过程体,描述该存储过程的操作*/
(1)过程名:数据库服务器合法的对象标识
(2)参数列表:需指定参数模式、参数名、以及参数的数据类型。
存储过程有三种参数模式:
①IN输入参数在被调用时需要指定参数值。
②OUT输出参数调用时不传入参数值,而是作为返回值返回。
③INOUT输入输出参数调用时需要传入初始值,并会返回操作后的最终值。
(不声明参数模式时,缺省为 IN 类型)
(3)过程体:是一个<过程化SQL块>,包括声明部分和可执行语句部分
2.执行存储过程
call/perform [procedure] 过程名([参数1,参数2,...]);
使用CALL或者PERFORM等方式激活存储过程的执行
在过程化SQL中,数据库服务器支持在过程体中调用其他存储过程
3.修改存储过程
重命名: alter procedure 过程名1 rename to 过程名2;
重新编译: alter procedure 过程名 compile ;
4.删除存储过程
drop procedure 过程名;
五、存储函数
1. 函数的定义
cre ate or replace function 函数名([参数1 数据类型, 参数2数据
类型, ...])
returns <类型>
as <过程化SQL块>;
2. 函数的执行
call / select 函数名 ([参数1,参数2,...]);
3. 修改函数
(1) 重命名 :
alter function 函数名1 rename to 函数名2;
(2) 重新编译
alter function 函数名 compile ;
- 关系数据库存储管理
|-------------|---|
| 论述题 | |
- 试分析每个数据库对象对应一个操作系统文件和整个数据库对应一个或若干个文件,这两种存储关系数据库的策略各有什么优缺点。
1、每个数据库对象对应一个操作系统文件
1)优点:
灵活性高:每个表或数据库对象可以独立地进行管理。
易于备份和恢复:可以单独备份和恢复特定的表或数据库对象,而不需要处理整个数据库。
并发控制:可以对不同的表或对象实施不同的并发控制策略,提高系统的整体性能。
扩展性:添加或删除表时,不需要对整个数据库文件进行操作,简化了扩展过程。
2)缺点:
管理复杂性:需要管理大量的文件,这可能会增加数据库管理系统的复杂性。
文件系统限制:依赖于操作系统的文件系统,可能会受到文件大小或数量的限制。
性能问题:频繁的文件操作(如打开、关闭、读写)可能会影响性能。
数据一致性:在事务处理中,需要额外的机制来确保跨多个文件的数据一致性。
2、整个数据库对应一个或若干个文件
1)优点:
简化管理:整个数据库作为一个单一的实体进行管理,简化了文件管理的复杂性。
性能优化:数据库管理系统可以针对整个数据库进行性能优化,如缓存和预读取。
事务一致性:更容易实现跨表的事务一致性,因为所有数据都存储在同一个文件系统中。
文件系统依赖性降低:数据库管理系统可以设计自己的存储机制,减少对操作系统文件系统的依赖。
2)缺点:
备份和恢复困难:需要备份和恢复整个数据库,这可能在大型数据库中非常耗时。
扩展性问题:添加大量数据时,可能需要对整个数据库文件进行操作,这可能影响性能。
并发控制限制:可能需要在数据库级别实施并发控制,这可能不如针对单个表的并发控制灵活。
单一故障点:整个数据库的稳定性和可用性依赖于单个或少数几个文件,增加了故障风险。
2.假设 Course表以定长记录方式存储。请描述Course 表的记录存储,在以下情况下一条记录占多少字节?
① 字段可以在任何字节处开始。
② 字段必须在4的倍数的字节处开始。
③ 字段必须在8的倍数的字节处开始。
3. 试述关系表有哪些组织方式,并分析各自的优缺点。
1、堆组织
优点:简单,易于实现;插入和删除操作不需要移动大量数据。
缺点:查询效率低,因为需要扫描整个表来找到所有满足条件的记录;没有索引支持导致查询性能较差。
2、排序组织
优点:可以快速进行范围查询,如查询某个字段在特定范围内的所有记录。
缺点:插入和删除操作可能需要移动大量数据,以保持数据的排序状态;更新操作成本较高。
3、索引组织
优点:通过索引可以快速定位到数据,提高查询效率。
缺点:索引本身需要维护,插入、删除和更新操作可能需要更新索引,这会增加操作的复杂性和成本。
4、哈希组织
优点:通过哈希函数快速定位记录,对于等值查询非常高效。
缺点:不支持顺序访问和范围查询;哈希冲突可能导致性能下降。
5、B-树和B+树组织(B-Tree and B+Tree Organization)
优点:B-树和B+树提供了平衡的树结构,可以高效地进行插入、删除和查询操作;B+树特别适合于磁盘存储系统,因为它将所有的数据记录存储在叶子节点,并且叶子节点之间是链接的,便于范围查询和顺序访问。
缺点:相比堆组织,B-树和B+树的维护成本更高,特别是在频繁更新的情况下。
- 试述数据库索引机制的优点。
1、优势:
(1)表的索引块数量通常比数据块数量少得多
(2)可以有高效的方法快速查找索引块
(3)若索引文件足够小,可长期驻留内存缓冲区,加少I/O操作
2、劣势:
索引会带来额外的开销
存储索引开销、建立索引开销、维护索引开销
- 试述稠密索引和稀疏索引的优缺点。
- 稠密索引是指:索引中为表中的每一行都提供一个索引项,即使某些行的索引键值是相同的。
1)优点:
快速访问:由于每个数据项都有索引,可以快速定位到任何一条记录。
查询效率:对于等值查询(查找特定值)非常高效,因为索引项直接指向数据项。
顺序访问:由于索引项是按照键值顺序排列的,可以快速进行顺序访问。
2)缺点:
空间消耗大:由于每个数据项都需要一个索引项,索引可能占用大量存储空间。
维护成本高:数据的插入、删除和更新操作都可能需要更新索引,这会增加维护成本。
性能下降:当索引键值有大量重复时,索引项的维护和查询效率可能会降低。
- 稀疏索引是指:索引中只为表中的一部分数据项提供索引项,通常是那些具有不同键值的数据项。
1)优点:
节省空间:由于不是每个数据项都有索引项,索引占用的存储空间较少。
维护成本低:只有当键值不重复的数据项发生变化时,才需要更新索引,减少了维护操作。
适用于大量重复键值:当表中有大量重复的键值时,稀疏索引可以避免索引项的冗余。
2)缺点:
查询效率受限:对于等值查询,如果查询的键值在索引中不存在,可能需要进行全表扫描。
顺序访问受限:由于索引项不连续,顺序访问可能不如稠密索引高效。
范围查询效率:对于范围查询,稀疏索引可能需要更多的索引扫描和数据访问,效率不如稠密索引。
- 数据库恢复技术
|----------------|-------------|
| 应用题10' | 事务? |
一、事务
1、事务:
事务(Transaction)是用户定义的一个数据库操作序列,这些操作要么全做,要么全不做,是一个不可分割的工作单位。
++++事务是恢复和并发控制的基本单位。++++
2、事务的四⼤特性:
(1)原⼦性autom: 要么全做,要么全不做,是一个不可分割的工作单位。
(2) ⼀致性 consistent:事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。
①一致性状态:数据库中只包括事务成功提交的结果
②不一致状态:运行中发生故障,有些事务尚未完成,被迫中断。或者未完成事务的一部分操作已写入数据库
- 隔离性isolate:⼀个事务的执⾏不能被其他事务所⼲扰
一个事务内部操作及使用的数据对其他并发事务是隔离的。或者,并发执行的各个事务之间不能互相干扰。
(4) 持久性duration:数据库的改变是永久的。⽐如要落⼊磁盘
3、事务有三种模式:
(1)自动提交事务模式
(2)显式事务模式
****commit:****事务正常结束
• 提交事务的所有操作
• 事务中所有对数据库的更新写到磁盘上
****rollback:****事务异常终止
• 系统将事务中对数据库的所有已完成的操作全部撤销。
• 事务回滚到开始状态
- 隐式事务模式
set implicit_transactions on
功能:启动隐式事务,语句不再自动提交,需要用COMMIT 或
ROLLBACK提交或回滚
SET IMPLICIT_TRANSACTIONS OFF
功能:取消隐式事务,恢复自动提交事务模式
- 故障种类:
- 事物内部故障
- 定义:事务内部更多故障是非预期的,是不能由应用程序处理的。
- 事务故障的恢复:撤消事务(UNDO)
①强行回滚(ROLLBACK)该事务
②撤销该事务已经做出的任何对数据库的修改,使得该事务象根本没有启动一样
- 系统故障 DBMS
(1)定义:称为软故障,是指造成系统停止运转的任何事件,使得系统要重新启动
(2)恢复事务:
未提交事务:强行撤消(UNDO)
已提交事务(缓冲区中的信息尚未完全写回到磁盘上):重做(REDO)
系统突然停转,系统要重启
- 介质故障:硬件损坏
介质故障的恢复:重装数据库,重做已经完成的事务
- 计算机病毒
小结:
①恢复的基本原理:冗余(++++利用冗余数据++++重建数据库中已被破坏或不正确的那部分数据)
②恢复的实现技术:复杂
- 恢复方式
数据转储
对失败的事务重新执⾏
⽇志⽂件
记录事务对数据的更新操作的⽂件
- 恢复策略
- 事务调度
(1)一组事务的调度必须保证:
包含了所有事务的操作指令;一个事务内部的指令顺序必须保持不变
(2)并行事务调度必须保证:
可串性化,将所有可能的串行调度结果推演一遍,对于某个具体的并行调度
再执行一遍,看是否能与某个串行调度的结果相同
(3)判断可串性化的充分条件:冲突可串性化(冲突可串性化一定是可串
性化调度,但可串性化调度不一定是冲突可串性化)
冲突操作:不同事务对同一数据分别进行读和写;不同事务对同一数据分别
进行写和写
冲突可串性化调度即不交换不同事务的冲突操作次序,也不交换同一事务的
两个操作的次序。但可以交换不同事务对不同数据各种操作次序,也可以交
换不同事务对同一数据的读取操作次序
- 并发控制
|-------------------------|------------------------------|
| 设计题10 ' | 并发执行顺序,发生了什么问题?怎么解决? |
- 并发
1.1并发带来的问题
- 丢失修改
两个事务T1和T2读入++++同一数据并修改++++,T2的提交结果破坏了T1提交的结果,导致T1的修改被丢失。
- 读脏数据
-
不可重复读
指事务T1读取数据后,事务T2执行更新(修改、插入、删除)操作,使T1无法再现前一次读取结果。
1.2数据不一致性原因:
并发操作破坏了事务的隔离性
1.3数据的并发控制:
在多用户共享的系统中,保证数据库的完整性不受破坏,避免用户得到不正确的数据。
- 封锁
2.1封锁
封锁就是事务T在对某个数据对象(例如表、记录等)操作之前,先向系统发出请求,对其加锁。
2.2封锁类型
1、排它锁:写锁 X锁
某事务对数据对象上锁后,可读取和修改该数据对象,其他事务不可再对该数据对象添加锁
表示方法:上锁Xlock( ) 释放锁Unlock( )
2、共享锁:读锁S锁
某事务对数据对象上锁后,可读取但不可修改该数据对象,其他事务可对该数据对象添加S锁,但不能添加X锁
表示方法:上锁Slock( ) 释放锁Unlock( )
2.2封锁协议
- 一级封锁协议:
写前加写X锁,事务结束释放写X锁;可防止丢失修改
- 二级封锁协议:
写前加写X锁,读前加读S锁,读完释放读S锁,事务结束释放写X锁;可防止丢失修改和读脏数据
- 三级封锁协议(常用:支持一致性维护):
写前加写X锁,读前加读S锁,事务结束释放各锁;可防止丢失修改、读脏数据和不可重复读
如果所有事务均遵循三级封锁协议,由于其隔离级别高,那么这些事务无论怎样交叉并行,都是可串性化的调度
1.4两段锁协议(2PL)
1、三级封锁协议可以保证并发操作的正确性,但由于其太过严苛,对并发度有负面影响。三级封锁协议实际是两段锁协议的特例,是更严格的两段锁协议
2、两段锁协议要求:事务在对任何数据进行读写前,需要获得对该数据的封锁;而当事务在释放任何一个封锁后,不可再获得任何其他封锁事务遵循两段锁协议是可串性化的充分条件,遵循两段锁协议是可能发生死锁的
- 可串行性:
假设多种情况都可以,然后获得结果,
如果并发执⾏的结果跟上⾯的结果⾥⾯任意⼀个⼀样就可以
事务T1: 读取B,A=B+1,写回A
事务T2: 读取A,B=A+1,写回B
那么结果假设先T1, 在T2 , 那么A=4,B =3;
假设先T2 ,那么A=3, B =4;
活锁: 先来先服务
死锁:
预防方法
一次封锁法
顺序封锁法
死锁的诊断与解除
超时法
等待图法
解决死锁:选择一个代价最小的事务终止