数据data
数据库中存储的基本对象,描述事物的符号记录数据库DB
长期存储在计算机内有组织的可共享的大量数据的集合数据管理:数据查询、(数据更新)数据插入、数据删除SEO靠我、数据修改数据库管理系统
位于用户和计算机操作系统之间的一层数据管理软件主要功能: 数据定义数据操作事务管理和运行管理数据存储和查询处理建立和维护功能数据库系统DBS
采用数据库技术的计算机系统称为DBSSEO靠我组成:数据库DB、数据库管理系统DBMS、数据库管理员DBA、应用程序优点: 数据整体结构化 – 数据库系统与文件系统的本质区别数据的共享性高、冗余度低、易扩充数据独立性高 物理独立性:数据库数据的存SEO靠我储结构与存取方法与外部应用程序独立逻辑独立性:局部逻辑数据结构与全局逻辑数据结构之间的独立性 数据统一由DBMS控制数据模型是一种形式机制,用于数据建模,描述数据、数据之间的联系、数据SEO靠我的语义、数据上的操作和数据的完整性约束条件
概念模型(信息模型):实体-联系(E-R)模型是一种广泛使用的概念模型
数据模型的三要素
数据结构:数据结构描述数据库中的对象和对象之间的联系,是对系统静态特性的SEO靠我描述数据操作:数据操作定义数据库中各种数据对象的实例上允许执行的操作和操作规则(查询和更新),是对系统动态特性的描述数据完整性约束:数据的完整性约束条件是一组规则,用以限定符合数据模型的数据库状态和状SEO靠我态的变化,保证数据的正确、有效和相容目前最流行的数据模型是关系模型
关系的每个属性必须取原子值
三级模式
**外模式:**外模式也称子模式或用户模式。外模式介于模式与应用之间,是特定数据库用户的数据视图,是与某一具体应用相关的数据局部逻辑结构的描述,一个数据库有多个外模式模式:模式也称逻辑模式。模SEO靠我式是数据库中全体数据的总体逻辑结构描述,是所有用户的公共数据视图,一个数据库只有一个模式**内模式:**内模式也称存储模式或物理模式。内模式是数据物理结构和存储方式的描述,定义数据在数据库内部的表示方SEO靠我式,一个数据库只有一个内模式二级映像
外模式–模式映像
保证数据的逻辑独立性模式–内模式映像
保证数据的物理独立性唯一的扩展
数据库系统提供三种语言:DDL用于定义数据库模式,DML用于表达数据库的查询和更新SEO靠我,而 DCL用于定义用户对数据对象的访问权限。这三种语言不是独立的,而是集成在一起,形成完整的数据库语言。数据管理员负责管理数据库,实施数据的集中控制。实体:客观SEO靠我存在并且可以相互区分的任何事物,可以是实际对象,也可以是抽象模型
实体集:具有相同属性的实体的集合
码:
超码:能够唯一确定实体集中每个实体的属性集,(包含无关紧要属性的码)候选码:真子集都不是超码的极小超SEO靠我码**(”最小“超码)**主码:用来区分同一实体集中不同实体的候选码**(从候选码中选即可)**,(最多只能有一个的码)码:表示主码或候选码 对于学生实体集中,{学号}和{学号,姓名}都是超码,{学号SEO靠我}是极小超码,因为它的真子集是空集,不是超码,如果不允许重名的话,{姓名}也是极小超码,{学号},{姓名}都是候选码,可以选择{学号}作为主码属性:
简单属性:不能划分成更小部分的属性复合属性:可以划分SEO靠我成更小部分的属性(具有层次关系)单值属性:是特定的实体在该属性上只能取单个值的属性多值属性:是特定的实体在该属性上只能取多个值的属性(具有对等关系)基本属性:不能通过其他属性的值来推导出来(即它的值必SEO靠我须存储在系统中)的属性派生属性:派生属性的值可以从其他相关属性或实体计算得到,因此派生属性又称计算属性 E-R图:联系是多个实体之间的相互联系
联系集是相同类型联系SEO靠我的集合
联系的类型
一对一联系一对多(多对一)联系多对多联系关系模型只包含单一的数据结构 – 关系
域:一个具有相同数据类型的值的集合 – 顺序的取SEO靠我值范围
基数:一个域允许的不同取值个数
笛卡尔积:域上面的一种集合运算 – 得到每个域中元素的所有可能的组合 – 基数相乘
关系:笛卡尔积的子集叫做其在域上的集合(可以用二维表和集合来表示关系)
除了语义约束SEO靠我外,对关系的限制主要有两点:
第一,在关系数据库中,只考虑有限关系第二,关系的每个属性都必须是原子的关系模式概念对应于程序设计语言中的类型概念,是对关系型的描述,可以表示为R(U, D, DOM, F)SEO靠我 – 关系模式名(关系模式的诸属性,属性对应的域,U到D的映射,属性间的数据依赖集定义)
二维表表示关系时列的次序不重要
外码是另外一个表的主码
属性处理
派生属性的处理:转换时我SEO靠我们忽略派生属性复合属性的处理:忽略复合属性本身,而直接考虑它的成分属性多值属性的处理:为每个多值属性M创建一个关系Rm实体集处理
强实体集处理:实体集名可以作为关系名,实体集的全部属性构成关系的属性弱实SEO靠我体集处理:弱实体集名可以作为关系名,弱实体集存在依赖的标识实体集的主码和弱实体集的全部属性构成关系的属性联系集处理
方法一:联系转换成关系模式
联系是一对一的,则每个实体集的码都是关系的码联系是**一对多SEO靠我(多对一)的,则“多端”**实体集的码组合成关系的码联系是多对多的,则参与联系的所有实体集的码组合成关系的码方法二:合并
联系是一对一的,则可以和任意一端实体集转换得到的关系模式合并联系是一对多的,则和SEO靠我多端实体集转换得到的关系模式合并联系是多对多的,则该联系集转换成独立的关系模式关系语言的分类 :关系代数、关系演算、SQL语言
完整性分类:
实体完整性:关系R的所有SEO靠我元组在主码上的值必须惟一,并且在主码的任何属性上都不能取空值参照完整性:如果属性集FK是关系R的外码(一个关系中的一个属性是另外一个关系中的主码则这个属性为外码),它参照关系S的主码Ks ,则R的任何SEO靠我元组在FK上的值等于S的某个元组在主码Ks上的值,或者为空值,对外码取值限制用户自定义完整性:反映特定的数据库所涉及的数据必须满足的语义约束条件。由于不存在一般性规则,这些约束条件必须由用户根据实际问SEO靠我题的语义指定,对候选码取值限制基本运算:选择(一元运算符)、投影(一元运算符)、并、差、笛卡尔积
附加运算:交、除、连接、自然连接(必须有同名属性才能进行)
1NF要求关系的所有属性值都是原子的,是对关系模式的基本要求,不满足1NF的数据模式不能称为关系模式,即所有关系模式都是1NF
2NF对于任意的非平凡函数依赖X→A∈F+ SEO靠我:A是主属性,X不是R的任意码的真子集
3NF对于任意的非平凡函数依赖X→A∈F+:A是主属性,X是R的码
BCNF限制R中成立的所有函数依赖要么是平凡的,要么是对码的依赖。对于任何关系模式R,以下两种两SEO靠我数依赖必定成立:平凡的函数依赖;任意属性对超码的依赖
主属性:一个属性只要在任何一个候选码中出现过,这个属性就是主属性。
非主属性:一个属性没有在任何候选码中出现过,这个属性就是非主属性。
部分函数依赖:设SEO靠我有关系R(A,B,C),若AB→C,A→C,则C部分函数依赖于AB。
完全函数依赖:设有关系R(A,B,C),若AB→C,A!→C,B!→C,则C完全函数依赖于AB。
传递函数依赖:设有关系R(A,B,CSEO靠我),若A→B,B→C,则C传递函数依赖于A。
1NF:关系中的每个属性都不可再分。
2NF:在1NF的基础之上,消除了非主属性对于候选码的部分函数依赖。
3NF:在2NF的基础之上,消除了非主属性对于候选码SEO靠我的传递函数依赖。
**BCNF:**在3NF的基础之上,消除主属性对于候选码的部分函数依赖与传递函数依赖。
数据库在物理设备上的存储结构和存取方法就称为数据库的物理结构
数据库的物理结构设计∶就是为一个给定数据库的逻辑结构选取一SEO靠我个最适合应用环境的物理结构和存取方法的过程,目的是为了提高数据库的访问速度并有效地利用存储空间
常用索引方法 – 聚簇:为了提高某个属性(或属性组)的查询速度,把这个或这些属性(称为取簇码)上具有相同值SEO靠我的元组集中存放在同一个物理块或若干个相邻的物理块或柱面内
对已有关系建立聚簇,将导致关系中元组物理存储位置的变化,并使此关系上原有的索引无效,必须重建
确定数据库的物理结构主要指:
确定数据的存放位置和存储SEO靠我结构,包括确定关系、索引、聚簇、日志、备份等存储安排和存储结构确定系统配置确定数据的存放位置和存储结构要综合考虑
存取时间
存储空间利用率
维护代价
为了提高系统性能,应该根据应用情况将数据的易变部分与稳定部SEO靠我分,经常存取部分和存取频率较低部分分开存放
DBMS产品一般都提供了一些系统配置变量、存储分配参数、供设计人员和DBA对数据库进行物理优化
(field FROM Var) , Var可以是DATE ·TIME 或TIMESTSEO靠我AMP数据类型的变
量,ETRACT函数的功能是从 Var 中提取字段field模式
目录(catlog) – 模式(schema) – 对象
符号说明:
< X >表示X是SEO靠我需要进一步定义或说明语言成分[X]表示X可以缺省或出现一次{}表示X可以出现一次X |Y表示或者X出现,或者Y出现,但二者不能同时出现模式的定义:
CREATE SCHEMA<模式名>[<模式元素>….SEO靠我]CREATE SCHEMA[<模式名>]AUTHORIZATION<用户名> – 授权模式删除:DROP SCHEMA<模式名> CASCADE|RESTRICT
CASCADE,则删除<模式名>指定模式SEO靠我得同时并删除该模式中的所有数据库对象(基本表﹑视图﹑断言等)RESTRICT,则仅当<模式名>指定的模式不包含任何数据库对象时才删除指定的模式,否则拒绝删除表
表的定义:CREATE TABLE<表名>SEO靠我
列级约束的定义:[CONSTRAINT<约束名>]<列约束>
NOT NULLPRIMARY KEYUNIQUECHECK<条件>表级约束的定义:[CONSTRAINT<约束名>]<表约束>
PRIMARSEO靠我YUNIQUECHECKFOREIGN KEY修改基本表:ALTER TABLE<表名>
[ADD[COLUMN]<列名><数据类型[列级约束定义]][[ALTER[COLUMN]<列名>{SET DESEO靠我FAULT<缺省值>| DROP DEFAULT}][DROP [ COLUMN ]<列名>{CASCADE|RESTRICT}][[ADD<表约束定义>][DROP CONSTRAINT<约束名>{SEO靠我CASCADE|RESTRICTH]删除基本表:DROP TABLE<表名>{CASCADE|RESTRICT}
索引
CREATE [UNIQUE] [CLUSTER] INDEX<索引名>ON<表名>SEO靠我(<列名>[<次序>]{,<列名>[<次序>]})<索引名>为建立的索引命名<表名>是要建立索引的基本表的名字次序可以是 ASC (升序)和 DESC (降序),缺省值为ASC UNIQUE表示该索引SEO靠我为惟一性索引UNIQUE缺省时,创建的索引为非唯一性索引;CLUSTER表示建立的索引是聚簇索引,缺省时为非聚簇索引;创建索引不仅创建索引结构,而且将索引的定义存储在数据字典中索引删除:DROP INSEO靠我DEX<索引名>SELECT
SELECT[ALL | DISTINCT]<选择序列>FROM<表引用>,…,<表引用>[WHERE<查询条件>][GROUP BY<分组列>{<分组列>SEO靠我}[HAVING<分组选择条件>][ORDER BY<排序列>[ASC | DESC]{,<排序列>[ASC lDESC}SELECT后可以使用集合量词ALL或DISTINCT,缺省时为ALL;ALLSEO靠我不删除结果的重复行,而DISTINCT将删除结果中的重复行
BETWEEN表达式:<值表达式>[NOT] BETWEEN<下界>AND<上界>
IN表达式:
<值表达式>[NOT]IN(<值表达式列表>)<SEO靠我元组> |[NOT] IN<子查询>LIKE表达式:[NOT] LIKE<匹配串>[ESCAPE‘<换码字符>]
NULL表达式:<值表达式><子查询>IS [ NOT ] NULL
排序:ORDER BSEO靠我Y<排序列>[ASC | DESC] {,<排序列>[ASCDESC]}
聚集函数
分组语句group by:GROUP BY<分组列>{,<分组列>}[HAVING<分组选择条件>]
对于带GROUP BSEO靠我Y子句的SELECT语句,SELECT子句中的结果列必须是GROUPBY子句中的<分组列>或聚集函数;分组语句细化了聚集函数作用的作用对象
连接查询、嵌套查询、子查询、集合查询
数据更新
插入:INSERRSEO靠我T INTO T[] VALUES() / INSERT INTO T[]删除:DELETE FROM T [ WHERE<删除条件>]修改:UPDATE T SET A1 = e1, …,Ak = SEO靠我ek[WHERE<修改条件>]例:
1.在产品表(Products)中找出库存大于50的产品的所有信息,按产品编号升序排序。
SELECT * FROM Products WHERE UnitsInStoSEO靠我ck>=50 ORDER BY ProductID
2.查询顾客表(Customers)中所有不重复的所在城市,并升序排序。
SELECT DISTINCT City FROM Customers ORDSEO靠我ER BY City
3.在顾客表(Customers)中找出所在城市为London、Madrid、Torino和Paris的顾客编号及电话。
SELECT CustomerID,Phone FROM CSEO靠我ustomers WHERE City IN (London,Madrid,Torino,Paris)
4.在产品表(Products)中找出单位数量中有box的产品名和产品编号。
SELECT ProdSEO靠我uctName,ProductID FROM Products WHERE QuantityPerUnit LIKE %box%
5.在顾客表(Customers)中找出公司名的首字母为F,第5位为k的SEO靠我顾客编号和联系人名。
SELECT CustomerID,ContactName FROM Customers WHERE CompanyName LIKE F___k%
6.统计在’1997-10-1’SEO靠我 到’1997-10-7’期间,订单中每个员工的订单数,并按订单数降序排序。
SELECT EmployeeID"员工编号",COUNT(ORDERID)"订单数" FROM Orders WHERE SEO靠我OrderDate BETWEEN 1997-10-1ANd1997-10-7 GROUP BY EmployeeID ORDER BY COUNT(OrderID) DESC
7.请查询平均价格在30SEO靠我元及以上的产品类型。
SELECT CategoryID,AVG(UnitPrice)平均价格 FROM Products GROUP BY CategoryID Having AVG(UnitPricSEO靠我e)>=30
8.查询’1997-10-7’当天所售商品的库存情况,包括商品编号、名称、库存。
SELECT Products.ProductID,ProductName,UnitsInStock FROSEO靠我M Products,Orders,[Order Details] WHERE Products.ProductID=[Order Details].ProductID AND [Order DetaSEO靠我ils].OrderID=Orders.OrderID AND OrderDate=1997-10-7
定义:CREATE VIEW<视图名>[(<列名>,…,<列名>)]AS<查询表达式>SEO靠我[WITH CHECK OPTION]
删除:DROP VIEW<视图名>[ CASCADE |RESTRICT ]
视图的优点:
视图能够简化用户的操作
视图使用户能以多种角度看待同一数据
视图重构数据库提供SEO靠我了一定程度的逻辑独立性
视图能够对机密数据提供安全保护
视图能够更清晰的表达
数据库的完整性是指数据库中数据是正确的(数据库的数据是符合语义约束的数据)、一致的(数据之间SEO靠我的逻辑关系是正确的)和相容的(同一个事实的两个数据应当是一致的)
约束的分类:(就被约束的数据对象而言)
类型/域约束属性约束关系约束数据库约束约束的分类:(从约束的状态的角度)
静态约束(数据库正确状态)SEO靠我动态约束(数据库状态转移)DBMS必须提供完整性控制的机制有:定义完整性约束条件的方法、完整性检查机制、违约处理
可以实现级联操作的短语是:CASCADE
实体完整性要求:
每个关系应该有SEO靠我一个主码,每个元组的主码值惟一确定该元组主码的任何属性都不能取空值违反的操作: 插入新元祖、修改元祖的主码、DBMS自动检查、SQL支持实体完整性
参照完整性要求:
参照关系R的任何元组SEO靠我在其外码FKR上的值或者等于被参照关系S的某个元组在主码K上的值,或者为空值违法的操作:向参照关系R插入、修改参照关系R外码上的值、删除(修改)被参照关系S的元组
向数据库表中插入数据违法参照完整性规则SEO靠我时,系统所做的操作是:拒绝
用户自定义的完整性约束:用户定义的完整性即是针对某个特定关系数据库的约束条件,它反映某一具体应用所涉及的数据必须满足的语义要求,用户定义的完整性可以是SEO靠我:
属性级关系级数据库级域约束:每个属性都必须在一个值域上取值
属性约束:属性的取值必须来自其定义的值域
关系约束:说明关系的合法取值,常常涉及同一关系的多个属性和或多个元祖
断言与数据库约束:断言是一种命名SEO靠我约束,表达了数据库状态必须满足的逻辑条件
用户标识与鉴别是系统提供的最外层安全保护措施
其基本SEO靠我方法是:系统提供一定的方式让用户标识自己的名字或身份;系统内部记录着所有合法用户的标识;每次用户要求进入系统(与数据库连接)时,由系统核对用户提供的身份标识;通过鉴别的合法用户才能进入系统,建立数据库SEO靠我连接
自主存取控制不能阻止副本的非授权传播
强制存取控制( Mandatory Access Control ,简称MAC)是系统为保证更高程度的安全性所采取的强制存取检查手段
在MAC中,DBSEO靠我MS所管理的全部实体被分为主体和客体两大类:
主体是系统中的活动实体,可以是DBMS管理的实际用户或代表用户的各个进程客体是系统中的被动实体,是受主体操纵的对象·如文件、基本表、索引、视图等敏感度标记:SEO靠我绝密、机密、秘密、公开
主体的敏感度标记称为许可证级别( Clearance Level)客体的敏感度标记称为密级( Classification Level )仅当主体的许可证级别大于或等于客体的密级SEO靠我时,该主体才能读取相应的客体;仅当主体的许可证级别小于或等于客体的密级时,该主体才能写相应的客体
事务
事务是用户定义的一个数据库的操作序列,这些操作要么全做,要么全不做,是一个不可分割的工作单元事务是SEO靠我并发控制与调度的基本单位,也是数据库恢复的基本单位事务的特点:(ACID)原子性、一致性、隔离性、持久性事务状态 活动状态:初始状态,事务执行时处于该状态部分提交状态:最后一条语句被执行后的状态失败状态SEO靠我:正常的执行不能持续后的状态中止状态:事务回滚并且数据库已被恢复到事务开始执行前的状态 重启事务废除事务 提交状态:成功完成后的状态 SQL对事务的支持:COMMIT WORK–提交当SEO靠我前事务;ROLLBACK WORD–中止当前事务;SET TRANSACTION–设置事务的特性这里<级别>从低到高依次为 READ UNCOMMITED读未提交的修改,只能在只读状态下使用READ SEO靠我COMMITED读提交的修改REPEATABLE READ可重复读SERIALIZABLE可串行化 隔离级别越高(低),可能出现的问题越少(多),系统并发度越低(高)并发控制
为了防止数据库的不一致性,SEO靠我对多个运行的事务需要并发控制保证事务的一致性、隔离性相对于串行执行,并发执行优点有:提高吞吐量和资源利用率、减少等待时间;缺点有:丢失修改、读脏数据、不可重复读封锁协议:
一级封锁协议 防止丢失修改二级封锁协议 防止读“脏”数据三级封锁协议 进一步保证可重复读活锁与死锁:活锁又称饥饿,是某个事务因等待锁SEO靠我而处于无限期等待状态(解决–先来先服务);死锁是两个或两个以上的事务之间的循环等待现象(解决–一次封锁法、顺序封锁法)
死锁的检测与解除:超时法和等待图法
解除死锁:选择一个或多个处于死锁状态的事务,将其SEO靠我撤销并释放这些事务持有的所有的锁,从而打破了循环等待条件,解除死锁,使得其他事务能够继续运行。当然,被撤消的事务对数据库的更新必须恢复(回滚),并且要在稍后需要重新运行
存储器类型:
易失性存储器:内存、高速缓存非易失性存储器:磁盘、磁带稳定存储器:理想的存储器采用冗余独立磁盘阵列可以保证单个磁盘的故障不会导致数据丢失
数据访问通过input和outpSEO靠我ut将块在主存和磁盘之间移动
基于日志的恢复技术
日志是日志记录的序列,记录了数据库中所有的更新活动日志记录的格式:事务标识符、操作类型、操作对象、旧值、新值日志登记的原则:日志记录必须严SEO靠我格按并发事务执行的时间次序登记;必须先记日志,后写数据库redo(正序)和undo(逆序)操作延迟更新指的是将事务对数据库的更新推迟到事务提交之后即时更新技术允许事务在活跃状态时就将更新输出到数据库中SEO靠我系统故障发生,哪些事务需要重做,事务需要回滚 什么时候重做——系统故障发生之前,事务A已经提交,事务A需要重做什么时候回滚——系统故障发生时,事务B已经开始,但未提交,而且没有回滚什么时候不做处理——系SEO靠我统发生故障前,已经回滚(PS:注意检查点隔断问题!!!)基于检查点的恢复技术
提高系统故障恢复效率的基本方法是使用检查点技术
在建立检查点时,不允许事务执行任何更新动作,如写缓冲块或写日志记录;建立检查点SEO靠我之后,所有在检查点前发生的更新都已经输出到数据库中,尚未完成的事务都登记在检查点记录中;这样,发生系统故障时,只需要从最近的检查点记录开始扫描日志
对于事务故障用处不大,对于系统故障能提高效率
缓冲技术
日SEO靠我志缓冲:一个日志记录通常远小于稳定存储器的块。为了提高I/O效率,日志记录在主存中被缓冲,而不是直接输出到稳定存储器;当缓冲区被日志记录装满,或者执行日志强制输出时,日志记录才被输出到稳定存储器;日志SEO靠我缓冲减少了将日志输出到稳定存储器的开销,但是也带来了风险:一旦发生系统发生故障,缓冲区中的日志记录将丢失数据库缓冲:数据库存储在非易失性存储器中,在需要时再将相应的数据块调入主存,存在闩锁转储
转储是指SEO靠我将整个或部分数据库复制到磁带或另一个磁盘上,产生数据库后备副本的过程;后备副本可以脱机保存,供介质故障恢复时使用(因此,转储又称归档);一旦数据库遭到破坏,就可以将后备副本重新装入,将数据库恢复到转储SEO靠我时的状态,分为静态转储/动态转储或者海量转储/增量转储其他恢复技术
影子分页技术数据库镜像网站备案号:浙ICP备17034767号-2