第八章数据库基础
数据库系统概念原书第六版第八章
8.5.1 BCNF分解
Database System Concepts - 5th Edition, July 28, 2005.
7.2
©Silberschatz, Korth and Sudarshan
Database System Concepts - 5th Edition, July 28, 2005.
/*删NF· 算法通过为正则覆盖中的每个依赖显式地构造一个模式确保依赖的保持。 该算法通过保证至少有一个模式包含被分解模式的候选码,确保该分解是一个 无损分解。
Database System Concepts - 5th Edition, July 28, 2005.
7.9
©Silberschatz, Korth and Sudarshan
8.6.3
4NF 分解算法
Database System Concepts - 5th Edition, July 28, 2005.
7.10
©Silberschatz, Korth and Sudarshan
第八章 关系数据库设计
8.5 分解算法4
8.6 使用多值依赖的分解
8.7 更多的范式
8.8 数据库设计过程 8.9 时态数据建模
Database System Concepts - 5th Edition, July 28, 2005.
7.1
©Silberschatz, Korth and Sudarshan
7.3
©Silberschatz, Korth and Sudarshan
Database System Concepts - 5th Edition, July 28, 2005.
数据库第八章-数据库应用开发技术
(3) 设置“宏查询”按钮属性,在其单击按钮属性中选择 “查询学号” 。 (4) 运行“学生基本情况浏览”窗体,输入学号,点击 “宏查询”按钮。
教学进度
计算机科学与工程系
例:修改“学生基本情况浏览”窗体,将页脚中的功能 用自定义按钮替代。并保存为“学生基本情况浏览1”窗体。 (1) 打开“学生基本情况浏览”窗体,在页脚处加5个命 令按钮,标题如图。
教学进度
计算机科学与工程系
创建报表: 创建报表与创建窗体非常类似。报表和窗体都是使用 控件来组织和显示数据的,所以创建窗体的方法同样也适 用于创建报表。 1. 使用“自动创建报表”创建报表 用这种方式创建的报表格式是由系统规定的,但也可以通过 报表“设计视图”对其进行修改。 例1:选择“自动创建报表:表格式”,根据学生表创 建报表。
教学进度
计算机科学与工程系 (4) 双击“求和成绩”按钮,选择“平均值” (5) 下一步,指定图表标题“各门课程平均分”
教学进度
8.3 宏
计算机科学与工程系
宏的概念: 宏是一种特定的编码,是一个或多个操作命令的集合。 宏以动作为基本单位,一个宏命令能够完成一个操作动作。 每一个宏命令由动作名和操作参数组成。 宏可以是包含一个或多个宏命令的宏集合。若是由多个 宏命令组成的宏,其操作动作的执行是按宏命令的排列顺序 依次完成的。 宏也可以定义成宏组,将多个宏保存在一个宏组中。如 将在同一窗体中使用的宏,或功能相近的宏组织成宏组,这 样做的好处是便于宏的组织和管理。 简单讲,使用宏的目的就是为了实现自动操作。 在Access中实现自动处理的方法主要有两种:宏和VBA 模块。
教学进度
计算机科学与工程系
举例:新建宏,设置一个消息框(MsgBox)宏命令,再设 置一打开窗口(OpenForm)宏命令,命名宏为“欢迎”。 运行时先后执行这两个宏,执行结果如下:
第八章 数据库管理(部分)
三、SQL中的完整性约束
1. 域完整性规则:定义属性的取值范围―-属性值约束。 包括:域约束子句、非空值约束、基于属性的检查子句。
①用“CREATE DOMAIN”语句定义新的域,并可出现CHECK子句。
例:
定义一个新的域DEPT,可用下列语句实现:
DEPT CHAR(20) DEFAULT „计算机软件’
二、完整性规则的组成与分类
1、每个规则由三部分组成:
①什么时候使用规则进行检查(规则的“触发条件”);
②要检查什么样的错误( “ 约束条件”或“谓词”);
③若检查出错误,该怎样处理( “ELSE子句”,即违反时 要做的动作)。 2、在关系数据库中,完整性规则可分为三类: ①域完整性规则:定义属性的取值范围; ②基本表约束; ③断言。
CREATE DOMAIN
CONSTRAINT
VALID_DEPT
/*域约束名字*/
CHECK(VALUE IN („计算机科学与技术’,„计算机软件’)); 允许域约束上的CHECK子句中可以有任意复杂的条件表达式。
②非空值约束(NOT NULL) 例: SNO char(4) NOT NULL ③基于属性的检查子句(CHECK): 例:CHECK (GRADE IS NULL) OR (GRADE BRTWEEN 0 AND 100)
教学重点:
检查点技术
并发操作、封锁带来的若干问题,并发调度的可串行化。
SQL中完整性约束的实现:断言、触发器技术。 安全性中的授权语句。
§1
事务的概念
一、事务的定义 形成一个逻辑工作单元的数据库操作的汇集, 称为事务(transaction)。
例:在关系数据库中,一个事务可以是一条SQL语句、
数据库应用基础第八章触发器
AS
指定对标内某字段作增加
或修改操作时触发器材起
作用
IF UPDATE(column_name)
[{and|or} UPDATE(column_name)…]
sql_statesments
定义触发器被触
发后,将执行的 数据库操作
13
8.2.1 INSERT触发器
例:在pubs库的authors表上创建 my_trigger1触发器,该触发器被操 作INSERT所触发
35
36
2. 使用系统表 例:用系统表sysobjects查看数据 库pubs上的所有触发器的相关信息
USE pubs SELECT name from sysobjects WHERE type='TR' go
37
8.3使用触发器
8.3.1 使用触发器强制数据完整性 约束和触发器都可以用来实施数据 完整性,但两者各有优势
33
还可使用系统存储过程 sp_helptrigger来查看某特定 表上存在的触发器的某些信息
EXEC sp_helptrigger <tablename>
34
例:用系统存储过程sp_helptrigger 查看表authors上存在的所有触发器 的相关信息
USE pubs EXEC sp_helptrigger authors go
23
IF UPDATE(au_lname) BEGIN raiserror('Unauthorized!',10,1) rollback transaction END
不使用INSTEAD OF而 是通过rollback
transaction子句恢 复原来的数据的方法 来实现字段不被修改
数据库第8章习题参考答案
第8章习题参考答案2.求程序的运行结果(1)Public Sub 习题8_2_1()Dim i As IntegerDebug.Print Tab(10); "*"For i = 1 To 5Debug.Print Tab(10 - i); "*"; Spc(i - 1); "*"; Spc(i - 1); "*"Next iFor i = 4 To 1 Step -1Debug.Print Tab(10 - i); "*"; Spc(i - 1); "*"; Spc(i - 1); "*"Next iDebug.Print Tab(10); "*"End Subrun:***** * ** * ** * ** * ** * ** * ** * *****(2)Public Sub 习题4_2_2()Dim x, y, i As Doublex = 0: y = 0For i = 1 To 8If i Mod 2 <> 0 Thenx = x - iElsey = y + iEnd IfNextDebug.Print "i="; iDebug.Print "x="; xDebug.Print "y="; yEnd Subrun:x=-16y= 20(3)Public Sub习题4_2_3()Dim m, s, k As Doublem = 28s = 0k = 1Do While k <= Int(m / 2)If Int(m / k) = m / k ThenDebug.Print ks = s + kEnd Ifk = k + 1LoopDebug.Print "s="; sEnd Subrun:124714s= 28(4)Public Sub 习题8_2_4()Dim n, a1, a2, a3, i As Doublen = Val(InputBox("请输入n,要求n>=3"))If n <= 2 ThenExit SubEnd Ifa1 = 1a2 = 1Debug.Print a1; a2For i = 2 To n - 1a3 = a1 + a2a1 = a2a2 = a3Debug.Print a3NextEnd Sub1 12353.改错题(1)Public Sub 改错8_3_1()Dim i, n, s As Doublen = Val(InputBox("请输入n"))i = 2: s = 1Do While i <= ns = s + ii = i + 1LoopDebug.Print "S="; sEnd Sub(2)Public Sub 改错8_3_2_求分式多项和()Dim nm, n, k ,p As integerDim y As Doublenm = Val(InputBox("请输入计算公式1后面的项目数目个数")) n = 1: p = 1: y = 1Do While n <= nmk = 2 * n + 1p = p * (k - 1) * ky = y + ((-1) ^ n) / pn = n + 1LoopDebug.Print "y="; yEnd Sub4.编程题(1)用if……else语句编程Public Sub分段函数1()Dim x, y, z As Doublex = Val(InputBox("请输入x的值:"))y = Val(InputBox("请输入y的值:"))If x > y And y <> 0 Thenz = x / yElseIf x = y Thenz = x * y * Sgn(y)Elsez = x + yEnd IfDebug.Print "x="; xDebug.Print "y="; yDebug.Print "z="; zEnd Sub(1)用select case语句结构编程Public Sub分段函数2()Dim x, y, z, a As Doublex = Val(InputBox("请输入x"))y = Val(InputBox("请输入y"))a = y - xSelect Case aCase Is > 0z = x + yDebug.Print zCase 0z = x * y * Sgn(y)Debug.Print zCase ElseIf y <> 0 Thenz = x / yDebug.Print zElseDebug.Print "z没有值"End IfEnd SelectEnd Sub(2)Public Sub 求解一元二次方程()Dim a, b, c As IntegerDim d, x1, x2, x3, x4 As Doublea = Val(InputBox("请输入a的整型数:"))b = Val(InputBox("请输入b的整型数:"))c = Val(InputBox("请输入c的整型数:"))d = b * b - 4 * a * cIf d > 0 Thenx1 = (-b + Sqr(d)) / (2 * a)x2 = (-b - Sqr(d)) / (2 * a)Debug.Print "x1="; x1, "x2="; x2Else if d=0 thenx3 = -b / (2 * a)x4 = -b/ (2 * a)Debug.Print "x3=";x3Debug.Print "x4=";x4ElseDebug.Print "方程没有实数解"End IfEnd Sub(3--1)用无条件转向语句GOTO编程Public Sub 数字与星期的转换1()Dim num As Integer10 num = Val(InputBox("请输入整数值:")) If num = 0 ThenDebug.Print "这是星期日"ElseIf num = 1 ThenDebug.Print "这是星期一"ElseIf num = 2 ThenDebug.Print "这是星期二"ElseIf num = 3 ThenDebug.Print "这是星期三"ElseIf num = 4 ThenDebug.Print "这是星期四"ElseIf num = 5 ThenDebug.Print "这是星期五"ElseIf num = 6 ThenDebug.Print "这是星期六"ElseIf num = -1 ThenDebug.Print "程序运行结束"EndElseDebug.Print "输入数据错误!"GoTo 10End IfEnd Sub(3--2)Public Sub数字与星期的转换2 ()Dim x As IntegerDo While Truex = Val(InputBox("请输入数字"))If x = 0 ThenDebug.Print "这是星期日"Exit DoElseIf x >= 1 And x <= 6 ThenDebug.Print "这是星期" + Str(x)Exit DoElseIf x = -1 ThenExit DoElseMsgBox ("输入数据错误!")End IfLoopEnd Sub(4)Public Sub 行李重量计费()Dim an, cn, weight, s_w, distance, fee As Doublean = Val(InputBox("请输入成年人数量"))cn = Val(InputBox("请输入未成年人数量"))weight = Val(InputBox("请输入行李重量"))distance = Val(InputBox("请输入距离"))s_w = weight - 20 * an - 10 * cnIf s_w <= 0 Thenfee = 0ElseIf distance / 100 = Int(distance / 100) Thenfee = 0.2 * s_w * (distance / 100)Elsefee = 0.2 * s_w * (Int(distance / 100) + 1) End IfEnd IfDebug.Print feeEnd Sub(5)Public Sub 求自然数的多项式和()Dim n, s As Integers = 0For n = 1 To 10s = s + (s + n)NextDebug.Print "S=1+(1+2)+(1+2+3)+...+1+2+3+...+10)="; s End SubRun:S=1+(1+2)+(1+2+3)+...+1+2+3+...+10)= 2036Public Sub 求多项自然数阶乘的和()Dim s, t As SingleDim n As Integert = 1s = 0For n = 1 To 20t = t * ns = s + tNextDebug.Print "1!+2!+3!+...+20!="; sEnd SubRun:1!+2!+3!+...+20!= 2.561327E+18(6)Public Sub 既能被3整除又能被5整除正整数个数() Dim i, x As Integerx = 0For i =100 To 200If i / 3 = Int(i / 3) And i / 5 = Int(i / 5) ThenDebug.Print ix = x + 1End IfNextDebug.Print "x="; xEnd SubRun:120135150165180195x= 7(7)Public Sub 输出直角三角形图案1()Dim i, j As IntegerFor i = 1 To 9Debug.PrintNextFor i = 1 To 4Debug.Print Tab(20); "*";For j = 1 To (2 * i - 2)Debug.Print "*";NextDebug.PrintNextEnd SubRun:****************Public Sub 输出直角三角形图案2() Dim i, j As IntegerFor i = 1 To 9Debug.PrintNextDebug.Print Tab(20); "*";For i = 1 To 4Debug.Print Tab(19 - i); "*";For j = 1 To (i + 1)Debug.Print "*";NextDebug.PrintNextEnd SubRun:*******************Public Sub 输出平行四边形图案() Dim i, j As IntegerFor i = 1 To 9Debug.PrintNextFor i = 1 To 5Debug.Print Tab(21 - i);For j = 1 To 6Debug.Print "*";NextDebug.PrintNextEnd SubRun:******************************(8)Public Sub 求选手获得的平均分()Dim score(1 To 11), minno, maxno, sum, aver As Single Dim i As Integerminno = 1maxno = 1sum = 0For i = 1 To 10score(i) = Val(InputBox("请输入选手的成绩值:")) Debug.Print score(i)NextFor i = 2 To 10If score(i) < score(minno) Thenminno = iEnd IfIf score(i) > score(maxno) Thenmaxno = iEnd IfNext iFor i = 1 To 10sum = sum + score(i)Next isum = sum - score(minno) - score(maxno)aver = sum / 8Debug.Print "该选手的平均分是:"; averEnd Sub(9)关于素数的求解(9-1)求100之内的所有素数Public Sub 求所有素数之和()Dim s, w, n As Integers = 0For w = 2 To 99 Step 2For n = 2 To Sqr(w)If w Mod n = 0 ThenExit ForEnd IfNextIf n > Sqr(w) Thens = s + wEnd IfDebug.Print "S="; sNextEnd Sub(9-2)Public Sub 求200以内的所有素数()Dim w, n As IntegerDebug.Print "200 以内的所有素数是:" For w = 2 To 199For n = 2 To Sqr(w)If w Mod n = 0 ThenExit ForEnd IfNext nIf n > Sqr(w) ThenDebug.Print w;End IfNextDebug.PrintEnd Sub(10)Public Sub 求水仙花数1()Dim i, j, k, n As IntegerDebug.Print "水仙花数是:"For i = 1 To 9For j = 0 To 9For k = 0 To 9n = i * 100 + j * 10 + kIf n = i * i * i + j * j * j + k * k * k ThenDebug.Print n;End IfNext kNext jNext iDebug.PrintEnd SubPublic Sub 求水仙花数2()Dim i, j, k, n As IntegerDebug.Print "水仙花数是:"For n = 150 To 999i = Int(n / 100)j = Int(n / 10 - i * 10)k = n Mod 10If n = i * i * i + j * j * j + k * k * k ThenDebug.Print n;End IfNextDebug.PrintEnd Subrun:水仙花数是:153 370 371 407(11)Public Sub 求分数数列和()Dim i, t, n As IntegerDim a, b, s As Singlen = 20a = 2:b = 1: s = 0For i = 1 To ns = s + a / bt = aa = a + bb = tNextDebug.Print "sum="; s;End Sub(12)Public Sub N年达到的利息()Dim y As IntegerDim interest1,interest As DoubleP=10000y = 0interest = 0Do Until interest >= 1000Interest1 =2*p* 0.0225 *(1-0.2) ‘一期2年整存整取扣税后的利息p=p+interest1 ‘扣税后的利息加上本金成为新一期的本金Interest=p-10000 ‘存款以来实际所的利息y = y + 2Debug.Print interest, yLoopEnd SubRun:360 2732.959999999999 4 1119.34656 6。
《数据库基础知识》PPT课件
编写触发器与存储过程
根据业务需求编写触发器和存储过程 ,实现复杂业务逻辑。
监控与优化性能
监控数据库性能,定期进行优化和调 整,确保数据库高效运行。
维护数据安全
定期备份数据、修复损坏数据、防范 恶意攻击等,确保数据安全可靠。
05
索引与查询优化技术
索引基本概念及作用
索引定义
索引是数据库中用于快速查找和检索数据的数据结构。
如在线购物网站、拍卖网站等,需要处理 大量的用户信息和交易数据,数据库可以 提供安全、可靠的数据存储和检索功能。
金融系统
科研领域
如银行、证券、保险等金融机构的信息系 统,需要处理大量的金融数据,数据库可 以提供高效的数据处理和分析功能。
如生物信息学、天文学等科研领域,需要处 理大量的实验数据和观测数据,数据库可以 提供灵活的数据存储和管理功能。
关系完整性约束
完整性约束概念
完整性约束是用来保证数据库中数据的正确性和一致性的规则。在关系模型中,完整性约束包括实体 完整性、参照完整性和用户自定义完整性。
完整性约束类型
实体完整性约束要求关系中的主键属性不能取空值;参照完整性约束要求关系中的外键属性取值必须 对应于另一个关系中的主键取值;用户自定义完整性约束则是根据应用需求定义的其他规则。
03
SQL语言基础
SQL语言简介
01
SQL(Structured Query Language)是一种用于管理关系数 据库管理系统的语言。
02
它包括数据插入、查询、更新和删除,数据库模式创建和修改
,以及数据访问控制。
SQL语言简单易学,是开发和管理数据库系统的标准语言。
03
数据定义语言DDL
DDL(Data Defini对象,如表、 索引、触发器等。
第8章 数据库系统的概要设计
2.数据库概念结构设计的方法 概念模型是数据模型的前身,它比数据模型更独立于机器、更 抽象,也更加稳定。概念设计的方法有以下4种: (1)自顶向下的设计方法。 该方法首先定义全局概念结构的框架,然后逐步细化为完整的全 局概念结构。 (2)自底向上的设计方法。 即首先定义各局部应用的概念结构,然后将它们集成起来,得到 全局概念结构的设计方法。 (3)逐步扩张的设计方法。 此方法首先定义最重要的核心概念结构,然后向外扩充,生成其 他概念结构,直至完成总体概念结构。 (4)自顶向下与自底向上相结合的方法。 最常采用的策略是自底向上的方法,即自顶向下地进行需求分析, 然后再自底向上地设计概念结构,其方法如图8-1所示。其中,概 念模式对应于概念模型。
需求 需求1 需求1.1 需求1.2 需求2.1 需求2 需求2.2
需求分析
。。。。。
概念模式 概念模式 概念模式 概念模式
概念模式1
概念模式n
概念结构设计
。。。。。
全局概念模式
图8-1 自顶向下的分析需求与自底向上设计概念结构
8.2 数据库的概念设计
结构化系统分析和设计方法学强调系统的功能方面,其本质是抽 象和功能分解,如前面章节介绍的数据流图就是一种面向功能的建模 方法,自20世纪70年代中期以来,数据库管理系统尤其是关系数据库 技术的应用,使软件系统的开发重心开始向系统的数据部分转移,而 面向数据的建模方法使用实体-联系图(Entity Relationship Diagram, 也称实体-关系图,简称E-R图)等图形工具来对客观世界进行抽象表 示,有时也称为实体-关系建模方法。在一个数据库应用系统的设计中, 面向功能的建模方法和面向数据的建模方法应相互参照,才能使系统 结构特性和行为特性有效地结合起来,达到系统设计的目标。
《数据库》第八章 多表连接及子查询
例:查询出学生信息与院系信息相关连的查询结果集, 要求学院信息是全部的,学生信息作为补充。
SQL> SELECT t1.s_id, t1.s_name,c_id,t2.c_name FROM t_student t1 LEFT OUTER JOIN t_college t2 USING (c_id);
19
Inspur Education
外部连接-右外连接
右外连接(RIGHT [OUTER] JOIN):
这类连接实际应用场景较等值连接来说较为少见,例 :查询一下学生自修课程数大于院系平均自修课程数 的学生与院系的相关信息。
SQL> SELECT t1.s_id, t1.s_name, t2.c_name, t1.s_course FROM t_student t1, t_college t2 WHERE t1.s_course > t2.c_course_avg AND t1.c_id = t2.c_id;
right [outer] join子句+on子句连接
SQL> SELECT t1.s_id, t1.s_name,t2.c_id,t2.c_name FROM t_student t1 RIGHT OUTER JOIN t_college t2 ON t1.c_id = t2.c_id;
right [outer] join子句+using子句连接
公共列是两个或更多表中存在相同数据的列,比如, t_student表和t_college表都包含一个c_id的公共列 。这里的公共列的列名不必一致,主要是存放的数据 要有一定的相关性,甚至是业务上的同类数据。
-数据库原理及应用第二版-第8章数据库设计
需求 分析
逻辑结构 设计
物理 设计
图 7- 2
8.1.3数据库设计的基本步骤
需求分析阶段 概念结构设计 结构设计阶段 逻辑结构设计 物理结构设计 功能设计 行为设计阶段 事务设计 程序设计 数据库实施阶段 数据库运行和维护
需求分析:收集信息并进行分析和整理,是后 续的各个阶段的基础。概念结构设计:对需求分析 的结果进行综合、归纳形成一个独立于具体的DBMS 的概念模型。逻辑结构设计:将概念结构设计的结 果转换为某个具体的DBMS所支持的数据模型,并对 其进行优化。物理数据库设计:为逻辑结构设计的 结果选取一个最适合应用环境的数据库物理结构。 数据库行为设计:要设计所包含的功能,功能间的 关联关系以及一些功能的完整性要求;数据库实 施:运用DBMS提供的数据语言以及数据库开发工 具,根据逻辑设计和物理设计的结果建立数据库, 编制应用程序,组织数据入库并进行试运行。数据 库运行和维护阶段:投入正式使用,在其使用过程 中不断对其进行调整、修改和完善。
常用的发现事实的方法有: 1、检查文档 2、面谈 3、观察业务的运转 4、研究 5、问卷调查
8.3 数据库结构设计
8.3.1概念结构设计
概念设计的特点和策略 1、概念模型的特点 有丰富的语义表达能力。 易于交流和理解。 易于更改。 易于向各种数据模型转换,易于导出与DBMS 有关的逻辑模型。
必须注意:关系上定义的索引数并不是越多越好, 系统为维护索引要付出代价,查找索引也要付出代价。 例如,若一个关系的更新频率很高,这个关系上定义的 索引数不能太多。因为更新一个关系时,必须对这个关 系上有关的索引做相应的修改。
聚簇存取方法 为了提供某个属性或属性组的查询速 度,把这个或这些属性(称为聚簇码)上具有 相同值的元祖集中存放在连续的物理块称为 聚簇。 一个数据库可建立多个聚簇,一个关系 只能加入一个聚簇。
(完整版)数据库系统基础教程第八章答案
Section 1Exercise 8.1.1a)CREATE VIEW RichExec ASSELECT * FROM MovieExec WHERE netWorth >= 10000000;b)CREATE VIEW StudioPres (name, address, cert#) ASSELECT , MovieExec.address, MovieExec.cert# FROM MovieExec, Studio WHERE MovieExec.cert# = Studio.presC#;c)CREATE VIEW ExecutiveStar (name, address, gender, birthdate, cert#, netWorth) AS SELECT , star.address, star.gender, star.birthdate, exec.cert#, WorthFROM MovieStar star, MovieExec exec WHERE = ANDstar.address = exec.address;Exercise 8.1.2a)SELECT name from ExecutiveStar WHERE gender = ‘f’;b)SELECT from RichExec, StudioPres where = ;c)SELECT from ExecutiveStar, StudioPresWHERE Worth >= 50000000 ANDStudioPres.cert# = RichExec.cert#;Section 2Exercise 8.2.1The views RichExec and StudioPres are updatable; however, the StudioPres view needs to be created with a subquery.CREATE VIEW StudioPres (name, address, cert#) ASSELECT , MovieExec.address, MovieExec.cert# FROM MovieExecWHERE MovieExec.cert# IN (SELECT presCt# from Studio);Exercise 8.2.2a) Yes, the view is updatable.b)CREATE TRIGGER DisneyComedyInsertINSTEAD OF INSERT ON DisneyComediesREFERENCING NEW ROW AS NewRowFOR EACH ROWINSERT INTO Movies(title, year, length, studioName, genre)VALUES(NewRow.title, NewRow.year, NewYear.length, ‘Disney’, ‘comedy’);c)CREATE TRIGGER DisneyComedyUpdateINSTEAD OF UPDATE ON DisneyComediesREFERENCING NEW ROW AS NewRowFOR EACH ROWUPDATE Movies SET length NewRow.lengthWHERE title = NewRow.title AND year = NEWROW.year ANDstudionName = ‘Disney’ AND genre = ‘comedy’;Exercise 8.2.3a) No, the view is not updatable since it is constructed from two different relations.b)CREATE TRIGGER NewPCInsertINSTEAD OF INSERT ON NewPCREFERENCING NEW ROW AS NewRowFOR EACH ROW(INSERT INTO Product VALUES(NewRow.maker, NewRow.model, ‘pc’))(INSERT INTO PC VALUES(NewRow.model, NewRow.speed, NewRow.ram, NewRow.hd, NewRow.price));c)CREATE TRIGGER NewPCUpdateINSTEAD OF UPDATE ON NewPCREFERENCING NEW ROW AS NewRowFOR EACH ROWUPDATE PC SET price = NewPC.price where model = NewPC.model;d)CREATE TRIGGER NewPCDeleteINSTEAD OF DELETE ON NeePCREFERENCING OLD ROW AS OldRowFOR EACH ROW(DELETE FROM Product WHERE model = OldRow.model)(DELETE FROM PC where model = OldRow.model);Section 3Exercise 8.3.1a)CREATE INDEX NameIndex on Studio(name);b)CREATE INDEX AddressIndex on MovieExec(address);c)CREATE INDEX GenreIndex on Movies(genre, length);Section 4Exercise 8.4.1Exercise 8.4.2Q1 = SELECT * FROM Ships WHERE name = n;Q2 = SELECT * FROM Ships WHERE class = c;Q3 = SELECT * FROM Ships WHERE launched = y;I = InsertsIndexesNone Name Class Launched Name & Name & Class & ThreeSection 5Exercise 8.5.1Updates to movies that involves title or yearUPDATE MovieProd SET title = ‘newTitle’ where title=’oldTitle’ AND year = oldYear; UPDATE MovieProd SET year = newYear where title=’oldYitle’ AND year = oldYear;Update to MovieExec involving cert#DELETE FROM MovieProdWHERE (title, year) IN (SELECT title, yearFROM Movies, MovieExecWHERE cert# = oldCert# AND cert# = producerC#);INSERT INTO MovieProdSELECT title, year, nameFROM Movies, MovieExecWHERE cert# = newCert# AND cert# = producerC#;Exercise 8.5.2Insertions, deletions, and updates to the base tables Product and PC would require a modification of the materialized view.Insertions into Product with type equal to ‘pc’:INSERT INTO NewPCSELECT maker, model, speed, ram, hd, price FROM Product, PC WHEREProduct.model = newModel and Product.model = PC.model;Insertions into PC:INSERT INTO NewPCSELECT maker, ‘newModel’, ‘newSpeed’, ‘newRam’, ‘newHd’, ‘newPrice’FROM Product WHERE model = ‘newModel’;Deletions from Product with type equal to ‘pc’:DELETE FROM NewPC WHERE maker = ‘deletedMaker’ AND model=’deletedModel’; Deletions from PC:DELETE FROM NewPC WHERE model = ‘deletedModel’;Updates to PC:Update NewPC SET speed=PC.speed, ram=PC.ram, hd=PC.hd, price=PC.price FROM PC where model=pc.model;Update to the attribute ‘model’ needs to be treated as a delete and an insert. Updates to Product:Any changes to a Product tuple whose type is ‘pc’ need to be treated as a delete or an insert, or both.Exercise 8.5.3Modifications to the base tables that would require a modification to the materialized view: inserts and deletes from Ships, deletes from class, updates to a Class’ displacement. Deletions from Ship:UPDATE ShipStats SETdisplacement=((displacement * count) –(SELECT displacementFROM ClasssesWHERE class = ‘DeletedShipClass’)) / (count – 1),count = count – 1WHEREcountry = (SELECT country FROM C lasses WHERE class=’DeletedShipClass’); Insertions into Ship:Update ShipStat SETdisplacement=((displacement*count) +(SELECT displacement FROM ClassesWHERE class=’InsertedShipClass’)) / (count + 1),count = count + 1WHEREcountry = (SELECT country FROM Classes WHERE classes=’InsertedShipClass); Deletes from Classes:NumRowsDeleted = SELECT count(*) FROM ships WHERE class = ‘DeletedClass’; UPDATE ShipStats SETdisplacement = (displacement * count) - (DeletedClassDisplacement *NumRowsDeleted)) / (count – NumRowsDeleted),count = count – NumRowsDeletedWHERE country = ‘DeletedClassCountry’;Update to a Class’ displacement:N = SELECT count(*) FROM Ships where class = ‘UpdatedClass’;UPDATE ShipsStat SETdisplacement = ((displacement * count) + ((oldDisplacement – newDisplacement) * N))/countWHEREc ountry = ‘UpdatedClassCountry’;Exercise 8.5.4Queries that can be rewritten with the materialized view:Names of stars of movies produced by a certain producerSELECT starNameFROM StarsIn, Movies, MovieExecWHERE movieTitle = title AND movieYear = year AND producerC# = cert# AND name = ‘Max Bialystock’;Movies produced by a certain producerSELECT title, yearFROM Movies, MovieExecWhere produce rC# = cert# AND name = ‘George Lucas’;Names of producers that a certain star has worked withSELECT nameFROM Movies, MovieExec, StarsInWhere producerC#=cert# AND title=movieTitle AND year=movieYear AND starName=’Carrie Fisher’;The number of movies produced by given producerSELECT count(*)FROM Movies, MovieExecWHER E producerC#=cert# AND name = ‘George Lucas‘;Names of producers who also starred in their own moviesSELECT nameFROM Movies, StarsIn, MovieExecWHERE producerC#=cert# AND movieTitle = title AND movieYear = year AND = starName;The number of stars that have starred in movies produced by a certain producer SELECT count(DISTINCT starName)FROM Movies, StarsIn, MovieExecWHERE producerC#=cert# AND movieTitle = title AND movieYear = year AND n ame ‘George Lucas’;The number of movies produced by each producerSELECT name, count(*)FROM Movies, MovieExecWHERE producerC#=cert# GROUP BY name。
初学者必读的SQL数据库基础教程
初学者必读的SQL数据库基础教程SQL数据库是一种常用的数据库管理系统,广泛应用于各种软件开发和数据管理领域。
对于初学者来说,掌握SQL数据库的基础知识是非常重要的。
本文将从数据定义语言、数据操作语言、数据查询语言和数据控制语言等方面,为初学者提供一份必读的SQL数据库基础教程。
第一章数据定义语言(DDL)数据定义语言(DDL)是SQL数据库中用来定义数据库结构的语言。
它包括创建、修改和删除数据库、表、列以及其他对象的操作。
在SQL中,创建数据库使用CREATE DATABASE语句,创建表使用CREATE TABLE语句,修改表结构使用ALTER TABLE语句,删除表使用DROP TABLE语句等。
初学者在学习时应该了解这些常用的DDL语句,并能够正确地使用它们。
第二章数据操作语言(DML)数据操作语言(DML)是SQL数据库中用来对数据库中的数据进行操作的语言。
它包括插入、更新和删除数据的操作。
在SQL中,插入数据使用INSERT INTO语句,更新数据使用UPDATE语句,删除数据使用DELETE FROM语句等。
初学者需要熟悉这些基本的DML语句,并能够通过它们来操作数据库中的数据。
第三章数据查询语言(DQL)数据查询语言(DQL)是SQL数据库中用来查询数据库中的数据的语言。
它包括SELECT语句和一些用于过滤、排序和聚合数据的函数。
初学者需要掌握SELECT语句的基本用法,了解如何使用WHERE子句进行条件过滤,如何使用ORDER BY子句进行排序,以及如何使用GROUP BY子句进行数据聚合。
第四章数据控制语言(DCL)数据控制语言(DCL)是SQL数据库中用来控制数据库访问权限和事务处理的语言。
它包括GRANT和REVOKE语句用于授权和撤销权限,以及BEGIN TRANSACTION、COMMIT和ROLLBACK语句用于管理事务。
初学者需要了解如何使用DCL语句来管理数据库的安全性和事务一致性。
数据库管理的基础知识和技巧
数据库管理的基础知识和技巧第一章:数据库管理概述数据库管理是指管理和维护数据库系统的各种操作和任务的过程。
它包括数据库设计、数据库安装、数据备份与恢复、性能优化等方面的工作。
数据库管理旨在确保数据库系统的高效运行和数据的完整性、一致性和安全性。
第二章:数据库设计数据库设计是数据库管理的第一步,它涉及到对数据的组织、存储结构、数据关系的建立和优化等问题。
在数据库设计中,需要分析需求,选择适当的数据模型(如关系型模型、面向对象模型等),设计数据表结构、建立关系和定义约束等。
第三章:数据库安装数据库管理的另一个重要方面是数据库的安装。
在数据库安装中,需要选择适用的数据库系统(如MySQL、Oracle等),按照相应的安装指南进行安装和配置。
安装过程中需要设置数据库的参数、权限,确保数据库可以正常运行。
第四章:数据备份与恢复数据备份与恢复是数据库管理中必不可少的环节。
通过合理的数据备份策略,可以保证在数据库发生故障、数据丢失或被破坏时能够快速进行数据恢复。
常用的数据备份方法包括完全备份、增量备份和差异备份等,通过定期备份数据库,可以最大程度地减少数据损失。
第五章:性能优化性能优化是数据库管理的重要任务之一。
通过合理的性能优化策略,可以提高数据库系统的响应速度和并发处理能力。
性能优化的方法包括索引优化、查询优化、服务器参数调整、数据分区等。
通过对数据库的监控和调优,可以减少系统崩溃和性能瓶颈等问题的发生。
第六章:安全管理安全管理是数据库管理不可忽视的方面。
数据库系统存储着重要的数据,对数据的安全性进行保护至关重要。
在安全管理中,可以采取加密、访问控制、审计等手段来确保数据库的安全。
此外,定期更新数据库系统补丁和加强数据库系统的防火墙等措施也是安全管理的一部分。
第七章:故障排除与监控数据库管理还包括故障排除与监控。
通过监控数据库的运行状态,可以及时发现和解决潜在的故障。
故障排除和监控可以通过日志查看、性能监控工具、系统报警等方法进行。
数据库基础教程(完整版)
数据库基础教程(完整版)第一部分:认识数据库数据库,顾名思义,就是一个用来存储、管理数据的仓库。
在这个信息爆炸的时代,数据已经成为了企业的核心资产,而数据库就是管理这些资产的重要工具。
无论是电商平台、社交媒体,还是企业内部的管理系统,都离不开数据库的支持。
一、数据库的分类1. 关系型数据库:以表的形式组织数据,每个表由行和列组成,行代表记录,列代表字段。
常见的有MySQL、Oracle、SQL Server等。
2. 非关系型数据库:与关系型数据库不同,非关系型数据库的数据结构更加灵活,常见的有MongoDB、Redis、Cassandra等。
3. NoSQL数据库:NoSQL是Not Only SQL的缩写,表示不仅仅是SQL,它包含了非关系型数据库以及一些新型的数据库技术,如NewSQL 等。
二、数据库的组成1. 数据库管理系统(DBMS):负责管理和维护数据库的软件系统,如MySQL、Oracle等。
2. 数据库:存储数据的仓库,由多个表组成。
3. 表:数据库中的基本单位,由行和列组成,行代表记录,列代表字段。
4. 记录:表中的一行数据,代表一个完整的信息。
5. 字段:表中的一列数据,代表记录中的一个属性。
三、数据库的作用1. 数据存储:将数据存储在数据库中,方便管理和查询。
2. 数据管理:通过数据库管理系统,可以对数据进行增删改查等操作。
3. 数据安全:数据库管理系统提供了数据备份、恢复、权限控制等功能,保障数据的安全。
4. 数据共享:多个用户可以同时访问数据库,实现数据共享。
5. 数据分析:通过数据库管理系统,可以对数据进行统计、分析等操作,为企业决策提供依据。
四、学习数据库的必要性1. 提高工作效率:掌握数据库技术,可以快速地处理大量数据,提高工作效率。
2. 适应市场需求:随着互联网的发展,数据库技术已经成为IT 行业的必备技能。
3. 拓展职业发展:学习数据库技术,可以为职业发展打下坚实的基础。
MySQL 数据库基础与应用 第8章 存储过程和存储函数
COMMENT 'string'
| LANGUAGE SQL
| [NOT] DETERMINISTIC
| { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
| SQL SECURITY { DEFINER | INVOKER }
组成。这组语句编译后存储在数据库服务器端,用户通过指定存储过程 的名称并给出参数(如果该存储过程带有参数)来执行。将经常需要执行
的特定的操作写成存储过程,通过过程名,就可以多次调用,从而实现 程序的模块化设计,这种方式提高了程序的效率,节省了用户的时间。
存储过程具有以下特点:
● 存储过程编译后放在数据库服务器端、并在服务器端运行,执 行速度快。
入/输出参数3种,分别用IN、OUT和INOUT这3个关键字来标志。存储过
程中的参数被称为形式参数(简称形参),调用带参数的存储过程则应提
供相应的实际参数(简称实参)。
● IN:向存储过程传递参数,只能将实参的值传递给形参;在存储
过程内部只能读、不能写;对应IN关键字的实参可以是常量或变量。
● OUT:从存储过程输出参数,存储过程结束时形参的值会被赋给
● 存储过程可以用于处理较为复杂的应用问题。
● 存储过程可以提高系统性能 。
● 可存储过程增强了数据库的安全性。
● 可增强SQL语言的功能和灵活性。
● 存储过程允许模块化程序设计。
● 可以减少网络流量。
MySQL 数据库基础与应用
2
•
8.2 存储过程操作
8.2.1 创建存储过程
创建存储过程使用的语句是CREATE PROCEDURE。 语法格式:
数据库第八章习题答案
第八章习题一、选择填空1.下列对派生类的描述中,( )是错的。
A.一个派生类可以作为另一个派生类的基类;B.派生类至少有一个基类;C.派生类的成员除了它自己的成员以外,还包含了它的基类的成员;D.派生类中继承的基类成员的访问权限到派生类保持不变。
2.派生类的对象对它的基类成员中( )是可以访问的。
A.公有继承的公有成员;B.公有继承的私有成员;C.公有继承的保护成员;D.私有继承的公有成员。
3.对基类和派生类的关系的描述中,( )是错的。
A.派生类是即类的具体化;B.派生类是基类的子集;C.派生类是基类定义的延续;D.派生类是基类的组合。
4.派生类的构造函数的成员初始化列中,不能包含( )。
A.基类的构造函数;B.派生类中子对象的初始化;C.基类的子对象的初始化;D.派生类中一般数据成员的初始化。
5.关于子类型的描述中,( )是错误的。
A.子类型就是指派生类是基类的子类型;B.一种类型当它至少提供了另一种类型的行为,则这种类型是另一种类型的子类型;C.在公有继承下,派生类是基类的子类型;D.子类型关系是不可逆的。
6.关于多继承二义性的描述中,( )是错误的。
A.一个派生类的两个基类中都有某个同名成员,在派生类中对该成员的访问可能出现二义性;B.解决二义性的最常用的方法是对成员名的限定法;C.基类和派生类中同时出现的同名函数,也存在二义性问题;D.一个派生类是从两个基类派生来的,而这两个基类又有一个共同的基类,对该基类的成员进行访问时也可能出现二义性。
7.设置虚基类的目的是( )。
A.简化程序;B.消除二义性;C.提高运行效率;D.减少目标代码8.带有虚基类的多层派生类构造函数的成员初始化列表中都要列出虚基类的构造函数,这样将对虚基类的子对象初始化( )。
A.与虚基类下面的派生类个数有关;B.多次;C.二次;D.一次9.若类A和类B的定义如下:class A{int i,j;public:void get();//……};class B:A{int k;public:void make();//…….};void B::make(){k=i*j;}则上述定义中,()是非法的表达式。
数据库基础知识
数据库基础知识数据库是计算机科学中一项非常重要的技术,广泛应用于各个领域。
它是一种用于存储、管理和检索数据的系统,可以有效地组织和处理大量结构化数据。
本文将介绍数据库的基础知识,包括数据库的定义、类型、结构以及常用的查询语言等内容。
一、数据库的定义数据库是指存储和管理数据的集合,它具有持久性(数据在计算机上永久存储)、共享性(多个用户可以同时访问和使用数据)和独立性(数据与应用程序相互独立)等特点。
数据库可以用于保存各种类型的数据,比如文本、数值、图像等等。
二、数据库的类型根据数据的组织方式和存储结构,数据库可以分为多种类型。
常见的数据库类型有关系型数据库、非关系型数据库和面向对象数据库等。
1. 关系型数据库:采用表格的形式来组织和存储数据,数据之间通过关系建立连接。
关系型数据库使用结构化查询语言(SQL)进行数据的操作和管理,具有数据一致性和完整性的特点。
2. 非关系型数据库:与关系型数据库不同,非关系型数据库不使用表格的形式来组织和存储数据,而是使用键值对、文档、列族等方式。
非关系型数据库具有高可扩展性和灵活性,适用于处理大数据和分布式环境。
3. 面向对象数据库:将数据和对象进行直接映射,可以将对象的属性和方法作为数据库中的数据存储和操作。
面向对象数据库适用于需要存储复杂对象和维护对象之间的关系的场景。
三、数据库的结构数据库的结构由表(Table)、字段(Field)和记录(Record)组成。
1. 表(Table):表是数据库中数据的组织单位,每个表由多个字段组成,用于存储特定类型的数据。
表由表名和列名组成,列名定义了表中字段的属性。
2. 字段(Field):字段是表中的一个属性,用于存储具体的数据。
每个字段有一个数据类型来定义它的数据格式,比如整数、字符串、日期等。
3. 记录(Record):记录是表中的一行数据,包含了若干个字段的值。
每个记录都有一个唯一的标识符,称为主键(Primary Key),用于区分不同的记录。
数据库复习题
课后巩固练习一、单选题第一章数据库基础知识1.DBS是( A )的简写。
A. 数据库系统B. 数据库管理系统C. 数据库D. 操作系统2. ORDBS的中文意思是 ( C )A.面向对象的数据库系统B.数据库管理系统C.对象关系数据库系统D.关系数据库系统3.DB是( D )的简写A. 数据库系统B. 数据库管理系统C. 数据D. 数据库4.DBMS是( D )的简写A. 数据库系统B. 数据库C. 数据D. 数据库管理系统5.在数据库的三级模式结构中,描述数据库中全局逻辑结构和特征的是( B )A. 外模式B. 模式C. 内模式D. 存储模式6.在数据库的三级模式结构中,模式有( A )个A. 1B. 2C. 3D. 任意7.在数据库系统中,数据独立性是指( C )。
A)用户与计算机系统的独立性 B)数据库与计算机的独立性C)数据与应用程序的独立性 D)用户与数据库的独立性8.要保证数据库的物理独立性,需要修改的是( B )。
A.模式B.模式与内模式的映射C.模式与外模式的映射D.内模式9.( B)的映像技术提供了模式变化而应用程序不变的方法,从而保证了数据的逻辑独立性A. 模式/内模式B.外模式/模式C. 外模式/内模式D.数据库/操作系统10.( B )的映像技术提供了内模式变化而应用程序不变的方法,从而保证了数据的物理独立性A.外模式/模式B. 模式/内模式C. 外模式/内模式D.数据库/操作系统11.要保证数据库的逻辑独立性,需要修改的是( C )。
A.模式B.模式与内模式的映射C.模式与外模式的映射D.内模式12. 位于用户和数据库之间的一层数据管理软件是 ( C ) 。
A.DBSB.DBC.DBMSD.MIS13. 数据视图属于三级模式中的 ( A )A. 外模式B. 模式C. 内模式D. 存储模式14.基本表属于三级模式中的 ( B )A. 外模式B. 模式C. 内模式D. 存储模式15.在数据操纵语言(DML)的基本功能中,不包括的是( B )。
(完整版)数据库系统基础教程第八章答案
Section 1Exercise 8.1.1a)CREATE VIEW RichExec ASSELECT * FROM MovieExec WHERE netWorth >= 10000000;b)CREATE VIEW StudioPres (name, address, cert#) ASSELECT , MovieExec.address, MovieExec.cert# FROM MovieExec, Studio WHERE MovieExec.cert# = Studio.presC#;c)CREATE VIEW ExecutiveStar (name, address, gender, birthdate, cert#, netWorth) AS SELECT , star.address, star.gender, star.birthdate, exec.cert#, WorthFROM MovieStar star, MovieExec exec WHERE = ANDstar.address = exec.address;Exercise 8.1.2a)SELECT name from ExecutiveStar WHERE gender = ‘f’;b)SELECT from RichExec, StudioPres where = ; c)SELECT from ExecutiveStar, StudioPresWHERE Worth >= 50000000 ANDStudioPres.cert# = RichExec.cert#;Section 2Exercise 8.2.1The views RichExec and StudioPres are updatable; however, the StudioPres view needs to be created with a subquery.CREATE VIEW StudioPres (name, address, cert#) ASSELECT , MovieExec.address, MovieExec.cert# FROM MovieExec WHERE MovieExec.cert# IN (SELECT presCt# from Studio);Exercise 8.2.2a) Yes, the view is updatable.b)CREATE TRIGGER DisneyComedyInsertINSTEAD OF INSERT ON DisneyComediesREFERENCING NEW ROW AS NewRowFOR EACH ROWINSERT INTO Movies(title, year, length, studioName, genre)VALUES(NewRow.title, NewRow.year, NewYear.length, ‘Disney’, ‘comedy’);c)CREATE TRIGGER DisneyComedyUpdateINSTEAD OF UPDATE ON DisneyComediesREFERENCING NEW ROW AS NewRowFOR EACH ROWUPDATE Movies SET length NewRow.lengthWHERE title = NewRow.title AND year = NEWROW.year ANDstudionName = ‘Disney’ AND genre = ‘comedy’;Exercise 8.2.3a) No, the view is not updatable since it is constructed from two different relations.b)CREATE TRIGGER NewPCInsertINSTEAD OF INSERT ON NewPCREFERENCING NEW ROW AS NewRowFOR EACH ROW(INSERT INTO Product VALUES(NewRow.maker, NewRow.model, ‘pc’))(INSERT INTO PC VALUES(NewRow.model, NewRow.speed, NewRow.ram, NewRow.hd, NewRow.price));c)CREATE TRIGGER NewPCUpdateINSTEAD OF UPDATE ON NewPCREFERENCING NEW ROW AS NewRowFOR EACH ROWUPDATE PC SET price = NewPC.price where model = NewPC.model;d)CREATE TRIGGER NewPCDeleteINSTEAD OF DELETE ON NeePCREFERENCING OLD ROW AS OldRowFOR EACH ROW(DELETE FROM Product WHERE model = OldRow.model)(DELETE FROM PC where model = OldRow.model);Section 3Exercise 8.3.1a)CREATE INDEX NameIndex on Studio(name);b)CREATE INDEX AddressIndex on MovieExec(address);c)CREATE INDEX GenreIndex on Movies(genre, length);Section 4Exercise 8.4.1Action No Index Star Index Movie Index Both Indexes Q110041004Q210010044I2446 Average 2 + 98p1 + 98p2 4 + 96 p2 4 + 96 p1 6 – 2 p1 – 2 p2 Exercise 8.4.2Q1 = SELECT * FROM Ships WHERE name = n;Q2 = SELECT * FROM Ships WHERE class = c;Q3 = SELECT * FROM Ships WHERE launched = y;I = InsertsIndexes Actions None Name Class Launched Name &ClassName &LaunchedClass &LaunchedThreeIndexesQ1502505022502 Q21121212 2 Q35050502650262626 I24446668Average 2 +48p1 -p2 +48p34 +46 p3- 2 p1- 3 p24 +46p1 -2p2 +46p34 + 46p1- 3p2 +22p36 - 4p1- 4p2 +44p36 - 4p1 -5p2 + 20p36 - 44p1 -4p2 + 20p38 - 6p1 -6p2 + 18p3The best choice of indexes (name and launched) has an average cost of 6 - 4p1 - 5p2 + 20p3 per operation.Section 5Exercise 8.5.1Updates to movies that involves title or yearUPDATE MovieProd SET title = ‘newTitle’ where title=’oldTitle’ AND year = oldYear; UPDATE MovieProd SET year = newYear where title=’oldYitle’ AND year = oldYear; Update to MovieExec involving cert#DELETE FROM MovieProdWHERE (title, year) IN (SELECT title, yearFROM Movies, MovieExecWHERE cert# = oldCert# AND cert# = producerC#);INSERT INTO MovieProdSELECT title, year, nameFROM Movies, MovieExecWHERE cert# = newCert# AND cert# = producerC#;Exercise 8.5.2Insertions, deletions, and updates to the base tables Product and PC would require a modification of the materialized view.Insertions into Product with type equal to ‘pc’:INSERT INTO NewPCSELECT maker, model, speed, ram, hd, price FROM Product, PC WHEREProduct.model = newModel and Product.model = PC.model;Insertions into PC:INSERT INTO NewPCSELECT maker, ‘newModel’, ‘newSpeed’, ‘newRam’, ‘newHd’, ‘newPrice’FROM Product WHERE model = ‘newModel’;Deletions from Product with type equal to ‘pc’:DELETE FROM NewPC WHERE maker = ‘deletedMaker’ ANDmodel=’deletedModel’;Deletions from PC:DELETE FROM NewPC WHERE model = ‘deletedModel’;Updates to PC:Update NewPC SET speed=PC.speed, ram=PC.ram, hd=PC.hd, price=PC.price FROM PC where model=pc.model;Update to the attribute ‘model’ needs to be treated as a delete and an insert. Updates to Product:Any changes to a Product tuple whose type is ‘pc’ need to be treated as a delete or an insert, or both.Exercise 8.5.3Modifications to the base tables that would require a modification to the materialized view: inserts and deletes from Ships, deletes from class, updates to a Class’ displacement. Deletions from Ship:UPDATE ShipStats SETdisplacement=((displacement * count) –(SELECT displacementFROM ClasssesWHERE class = ‘DeletedShipClass’)) / (count – 1),count = count – 1WHEREcountry = (SELECT country FROM Classes WHERE class=’DeletedShipClass’); Insertions into Ship:Update ShipStat SETdisplacement=((displacement*count) +(SELECT displacement FROM ClassesWHERE class=’InsertedShipClass’)) / (count + 1),count = count + 1WHEREcountry = (SELECT country FROM Classes WHERE classes=’InsertedShipClass); Deletes from Classes:NumRowsDeleted = SELECT count(*) FROM ships WHERE class = ‘DeletedClass’; UPDATE ShipStats SETdisplacement = (displacement * count) - (DeletedClassDisplacement *NumRowsDeleted)) / (count – NumRowsDeleted),count = count – NumRowsDeletedWHERE country = ‘DeletedClassCountry’;Update to a Class’ displacement:N = SELECT count(*) FROM Ships where class = ‘UpdatedClass’;UPDATE ShipsStat SETdisplacement = ((displacement * count) + ((oldDisplacement – newDisplacement) * N))/countWHEREcountry = ‘UpdatedClassCountry’;Exercise 8.5.4Queries that can be rewritten with the materialized view:Names of stars of movies produced by a certain producerSELECT starNameFROM StarsIn, Movies, MovieExecWHERE movieTitle = title AND movieYear = year AND producerC# = cert# AND name = ‘Max Bialystock’;Movies produced by a certain producerSELECT title, yearFROM Movies, MovieExecWhere producerC# = cert# AND name = ‘George Lucas’;Names of producers that a certain star has worked withSELECT nameFROM Movies, MovieExec, StarsInWhere producerC#=cert# AND title=movieTitle AND year=movieYear AND starName=’Carrie Fisher’;The number of movies produced by given producerSELECT count(*)FROM Movies, MovieExecWHERE producerC#=cert# AND name = ‘George Lucas‘;Names of producers who also starred in their own moviesSELECT nameFROM Movies, StarsIn, MovieExecWHERE producerC#=cert# AND movieTitle = title AND movieYear = year AND = starName;The number of stars that have starred in movies produced by a certain producer SELECT count(DISTINCT starName)FROM Movies, StarsIn, MovieExecWHERE producerC#=cert# AND movieTitle = title AND movieYear = year AND name ‘George Lucas’;The number of movies produced by each producerSELECT name, count(*)FROM Movies, MovieExecWHERE producerC#=cert# GROUP BY name。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据库系统(DataBase System,DBS)
由数据库、数据库管理系统、应用程序、数据库管理员、用户 等构成的人-机系统。
1
8.1.2 数据库技术的产生和发展 数据管理经历了三个发展阶段
6
8.1.3 数据库系统的特点
1.采用复杂的结构化的数据模型。 2.最低的冗余度 3.有较高的数据独立性 用户面对的是简单的逻辑结构操作而不涉及数据具体的物理存储结 构, 4.安全性 设置用户的使用权限 在数据库被破坏时,系统有能力把数据库恢复到可用状态。 5.完整性 系统采用一些完整性检验以确保数据符合某些规则,保证数据库中 数据始终是正确的。
数据共享性差,冗余度大 数据的不一致性 程序与数据之间的独立性不高 数据缺乏统一的管理和控制 安全性、完整性 、并发操作、数据破坏后的恢复
•子系统的问题 :大量重复程序、技术难度
4
数据库系统阶段
20世纪60年代后期 •硬件方面出现了大容量且价格低廉的磁盘 •软件方面操作系统已开始成熟,为数据技术的发展提供了良好的 基础 •数据处理的规模越来越大,数据共享的要求越来越强烈 数据库技术诞生的标志
11
8.2.2 Access 数据库的建立
•确定表的结构 •建立一个空数据库,输入文件名 •使用设计器或向导创建表,进入设计视图,输入各个字段 的信息 •定义主键 •输入表的名称保存表
•字段数据类型有10种 •字段属性 大小、小数位、格 式
No男No女Yes女Yes
物理 物理 数学 数学 数学 计算机 计算机
82-01-21 82-09-21 81-04-18 81-12-02 80-08-06 82-11-14 83-02-21
记录
¥160.00 ¥200.00 ¥180.00 ¥280.00 ¥240.00 ¥200.00 ¥160.00
–人工管理 –文件管理 –数据库系统 数据库技术是对传统信息管理模式的大变革 –提高了信息的利用率 –缩短了信息的传播过程 –实现了信息一体化的管理目标
2
人工管理阶段
20世纪50年代中期以前 •硬件方面只有卡片、纸带、磁带等存储设备 •软件方面没有操作系统,没有进行数据管理的软件 •此时的计算机、数据主要以科学计算为目的 •原始数据随程序一起输入内存 、运算、退出 •数据是面向应用
7
8.1.4 数据模型
1. 数据模型的定义 现实世界数据特征的模拟和抽象,数据库中数据的存储方式
2. 数据模型的基本要求 较真实的模拟现实世界 容易被人理解 便于在计算机上实现
3. 数据模型的二个层次 概念模型(信息模型) 基本数据模型
4. 数据模型的三个要素
数据结构
数据操作 数据的约束条件
在几十年的数据库发展史中,出现了三种重要的数据模型:一是层 次模型,它用树型结构来表示实体及实体间的联系,如早期的IMS 系统;二是网状模型,它用网状结构来表示实体及实体间的联系, 如DBTG系统;三是关系模型,它用一组二维表表示实体及实体间 的关系
1968年美国IBM公司推出的层次模型的IMS数据库管理系统 1969年美国数据系统语言研究会下属数据库任务组公布了关 于网状模型的DBTG报告 1970年IBM公司研究员E.F.Codd发表论文提出了关系模型
5
新型数据库系统
分布式数据库系统 数据库中一个数据在多个不同的地理位置存储的和处理。 面向对象数据库 可以像对待一般对象一样存储复杂信息与过程,这些对象可以方便地被系 统检索。 多媒体数据库 涉及了诸如图像、音频、视频处理技术、三维动画技术、海量数据存储与 检索技术等多方面的技术 数据仓库 面向主题的、集成的、稳定的和随时间变化的数据集合,用于决策制定。 工程数据库 一种能存储和管理各种工程设计图形和工程设计文档,并能为工程设计提 供各种服务的数据库。 空间数据库 是描述、存储与处理具有位置、形状、大小、分布特征及空间关系等属性 的空间数据及其属性数据的数据库系统
•表 最基本的对象,表及其表之间的关系 构成数据库的核心 •查询 从表(或查询)中选择一部分数据 ,形成一个全局性的集合 •窗体 用户与数据库交互的界面,窗体的 数据源是表或查询 •报表 按指定的样式格式化的数据形式 •宏 若干个操作的组合 •模块 用户用VBA语言编写函数过程或子程 序 •Web页 向Internet上发布数据
属性值 (字 段 值 )
9
三种关系类型
• 基本表 基本表就是关系模型中实际存在的表,如表Students • 查询表 查询表是查询结果表,或查询中生成的临时表 • 视图 视图是由基本表或其他视图导出的表 视图是为数据查询、处理及数据安全设计的虚表,不对应实 际存储的数据。
10
8.2 Access 2002数据库的建立和维护 8.2.1 Access 数据库的组成
8
关系模型
学号 990001 990002 990101 990102 990103 990201 990202
姓名 王涛 庄前 丁保华 姜沛棋 张智忠 程玲 黎敏艳
关系(二维表)
关 键 字 唯一确定一条记录
属性名 (字 段 名 )
Students表
性别
党员
专业
出生年月
助学金
男
No
女
Yes
男
No
女
数据不具有共享性 数据需要由应用程序自己来管理
•程序与相应的数据有着很强的依赖性 •程序与数据之间不具有独立性
3
文件系统阶段
20世纪60年代中期 •硬件方面有了磁带、磁盘等大容量存储设备 •软件方面有了操作系统 •不仅用于科学计算,还用于数据管理。所有相关数据存放在特 定的应用文件中,并由该文件系统进行管理 •问题
8.1数据库系统概述
8.1.1常用术语
数据库(DataBase,DB)
长期保存在计算机外存上的、有结构的、可共享的数据集合。
数据库管理系统(DataBase Management System,DBMS)
数据库系统中对数据库进行管理的软件系统。数据库的一切操 作,如查询、更新、插入、删除以及各种控制,都是通过DBMS 进行的。