数据库原理-第五章
数据库原理与应用第五章课件

5.2 需求分析
5.2.2 需求分析的方法
需求分析常用的调查方法有以下几种: (1)亲自参与业务活动,了解业务处理的基本情况。 (2)请专人介绍。 (3)在对用户的需求了解过程中一定会存在许多疑问,可以通
过与用户座谈、询问等方式来解决这些疑问。 (4)设计调查表请用户填写。如果调查表设计得合理接受。 (5)查问记录。即查问原系统有关的数据记录。 (6)学习文件。及时了解掌握与用户业务相关的政策和业务规
5.6 数据库实施
所谓数据库的实施,就是根据数据库的逻辑结构 设计和物理结构设计的结果,在具体RDBMS支持的计算 机系统上建立实际的数据库模式、装人数据、并进行 测试和试运行的过程。 (1)散数据库的建立与调整 (2)数据库的调整 (3)应用程序编制与调试 (4)数据库系统的试逻辑结构设计阶段 物理结构设计阶段 数据库实施阶段 数据库运行和维护阶段
5.2 需 求 分 析
5.2.1 需求分析的任务
需求分析的任务是通过详细调查所要处理的对象(组织、 部门、企业等),充分了解原有系统的工作概况,明确用户的 各种数据需求、完整性约束条件、事务处理和安全性条件等, 然后在此基础上确定新系统的功能。新系统必须充分考虑今后 可能的扩充和改变,不能仅仅按当前应用需求来设计数据库。
(1)一个实体型转换为一个关系模式; (2)实体的属性就是关系的属性,实体的码就是关系的码。
5.5 物 理 设 计
数据库物理设计阶段主要包括以下4个过程: (1)分析影响物理数据库设计的因素。 (2)为关系模式选择存取方法。 (3)设计关系、索引等数据库文件的物理存储结构。 (4)评价物理结构。
(1)数据库的转储和恢复。 (2)维持数据库的完整性与安全性。 (3)监测并改善数据库性能。 (4)数据库的重组和重构。
MySQL数据库原理及应用第5章

构,是某个表中一列或者若干列的集 合以及相应的标识这些值所在的数据 页的逻辑指针清单。索引是依赖于表 建立的,提供了数据库中编排表中数 据的内部方法。表的存储由两部分组 成,一部分是表的数据页面,另一部 分是索引页面。索引就存放在索引页 面上。 索引一旦创建,将由数据库自动管理 和维护。例如,向表中插入、更新和 删除一条记录时,数据库会自动在索 引中做出相应的修改。在编写SQL查 询语句时,具有索引的表与不具有索 引的表没有任何区别,索引只是提供 一种快速访问指定记录的方法。
第5章 数据库的高级应用
第5章 数据库的高级应用
任务要求: 为了提高学生信息管理系统中数据的安全性、完整性和查询速 度,在应用系统开发过程中要充分利用索引、视图、存储过程 和函数、触发器、事务等来提高系统的性能。 学习目标: 了解索引、视图、游标、存储过程和函数、触发器及事务的 作用 掌握索引、视图、游标、存储过程和函数、触发器及事务的 创建方法 掌握索引、视图、游标、存储过程和函数、触发器及事务的 修改及删除方法
5.1.2 索引的类型 5.1.3 索引的设计原则 5.1.4 创建索引 5.1.5 删除索引
【任务分析】
第5章 数据库的 高级应用
5.1 索引 5.2 视图 5.3 SQL编程基础 5.4 存储过程和函 数 5.5 触发器 5.6 事务 5.7 锁
设计人员在数据库中怎样合理地设
1.索引并非越多越好 2.避免对经常更新的表进行过多的索引 3.数据量小的表最好不要使用索引 4.在不同值少的列上不要建立索引 5.指定唯一索引是由某种数据本身的特 征来决定 6.为经常需要排序、分组和联合操作的 字段建立索引
创建索引
第5章 数据库的 高级应用
《数据库原理及应用》第五章SQL查询

SQL语言
SQL功能 命令动词
数据查询
数据定义 数据操纵
SELECT
CREATE、DROP、ALTER INSERT、UPDATE、DELETE
数据控制
GRANT、REVOKE
SQL语言
SQL语言的优点在于SQL不是面向过程的 语言,使用SQL语言只需描述做什么,而 不需要描述如何做,为使用者带来极大的 方便。本章将以讨论SQL的数据查询语言 为主,同时介绍数据定义语言和数据操纵 语言。本章中大部分例题使用“学生管理” 数据库,并假定数据库在Access的当前目录 下。
简单查询----选择记录
WHERE子句通过指定查询条件,可以在表中找出满足条件 的记录。查询条件可以是任意复杂的逻辑表达式。 当WHERE子句需要指定一个以上的查询条件时,要使用逻 辑运算符AND、OR和NOT将其连接成复合的逻辑表达式。 其优先级由高到低为:NOT、AND、OR,可以使用括号改 变优先级。 条件查询还可以使用LIKE或NOT LIKE进行部分匹配查询。* 表示任意长度的字符串;?表示任意单个字符。 在查询中还可以使用查询谓词,查询谓词IN 和NOT IN用于 检索属于(IN)或不属于(NOT IN)指定集合的记录。 例10 查询成绩在60分以下(不包括60分)、90分以上(含 90分)学生的学号。
连接查询(多表查询)
例13 查询会计系学生选修课程及成绩,要求查询结果中含 属性学号、姓名、课程名称和成绩。 SELECT student.学号,姓名,课程名称,成绩 FROM student,course,grade WHERE 所属院系='会计学院' and student.学号=grade. 学号 and grade.课程编号=course.课程编号 这个查询涉及到两个表,查询所要求的结果来自两个表,查 询的条件也涉及到两个表,所以有“FROM student,grade”; 这两个表之间是有联系的,这种联系是通过父表的主关键字 (student中的学号)和子表的外部关键字(grade表的学号) 建立的,所以有命令子句WHERE中的筛选条件“student. 学号=grade.学号”。 由于student表和grade表都有学号属性,因此在SELECT子 句中要用前缀的形式“student.学号”指明取自哪个表中的 学号;此例中用“grade.学号”的形式,查询结果是一样的。
数据库系统原理课后答案 第五章

5.1 名词解释(1)SQL模式:SQL模式是表和授权的静态定义。
一个SQL模式定义为基本表的集合。
一个由模式名和模式拥有者的用户名或账号来确定,并包含模式中每一个元素(基本表、视图、索引等)的定义。
(2)SQL数据库:SQL(Structured Query Language),即‘结构式查询语言’,采用英语单词表示和结构式的语法规则。
一个SQL数据库是表的汇集,它用一个或多个SQL模式定义。
(3)基本表:在SQL中,把传统的关系模型中的关系模式称为基本表(Base Table)。
基本表是实际存储在数据库中的表,对应一个关系。
(4)存储文件:在SQL中,把传统的关系模型中的存储模式称为存储文件(Stored File)。
每个存储文件与外部存储器上一个物理文件对应。
(5)视图:在SQL中,把传统的关系模型中的子模式称为视图(View),视图是从若干基本表和(或)其他视图构造出来的表。
(6)行:在SQL中,把传统的关系模型中的元组称为行(row)。
(7)列:在SQL中,把传统的关系模型中的属性称为列(coloumn)。
(8)实表:基本表被称为“实表”,它是实际存放在数据库中的表。
(9)虚表:视图被称为“虚表”,创建一个视图时,只把视图的定义存储在数据词典中,而不存储视图所对应的数据。
(10)相关子查询:在嵌套查询中出现的符合以下特征的子查询:子查询中查询条件依赖于外层查询中的某个值,所以子查询的处理不只一次,要反复求值,以供外层查询使用。
(11)联接查询:查询时先对表进行笛卡尔积操作,然后再做等值联接、选择、投影等操作。
联接查询的效率比嵌套查询低。
(12)交互式SQL:在终端交互方式下使用的SQL语言称为交互式SQL。
(13)嵌入式SQL:嵌入在高级语言的程序中使用的SQL语言称为嵌入式SQL。
(14)共享变量:SQL和宿主语言的接口。
共享变量有宿主语言程序定义,再用SQL 的DECLARE语句说明, SQL语句就可引用这些变量传递数据库信息。
精品课件-数据库原理及应用-第5章

第5章 关系数据库设计理论
(4) 示例模式4。 Teach(Cname,Tname,Rbook); 该关系模式用来存放课程、教师及课程参考书信息。其中, Teach为关系模式名,Cname为课程名,Tname为教师名, Rbook为某课程的参考书名。
第5章 关系数据库设计理论
现实系统的数据及语义可以通过高级语义数据模型(如实 体关系数据模型、对象模型)抽象后得到相应的数据模型。为 了通过关系数据库管理系统实现该数据模型,需要使其向关系 模型转换,变成相应的关系模式。然而,这样得到的关系模式, 还只是初步的关系模式,可能存在这样或那样的问题。因此, 需要对这类初步的关系模式,利用关系数据库设计理论进行规 范化,以逐步消除其存在的异常,得到一定规范程度的关系模 式,这就是本章所要讲述的内容。
第5章 关系数据库设计理论
实际上,设计任何一种数据库应用系统,不论是层次的、 网状的还是关系的,都会遇到如何构造合适的数据模式即逻辑 结构的问题。由于关系模型有严格的数学理论基础,并且可以 向别的数据模型转换,因此,人们就以关系模型为背景来讨论 这个问题,形成了数据库逻辑设计的一个有力工具——关系数 据库的规范化理论。规范化理论虽然是以关系模型为背景,但 是对于一般的数据库逻辑设计同样具有理论上的意义。
第5章 关系数据库设计理论
关系系统当中,数据冗余产生的重要原因就在于对数据依 赖的处理,从而影响到关系模式本身的结构设计。解决数据间 的依赖关系常常采用对关系的分解来消除不合理的部分,以减 少数据冗余。在例5.1中,我们将Teaching关系分解为三个关 系模式来表达:Student (Sno,Sname,Ssex,Sdept), Course(Cno,Cname,Tname)及Score(Sno,Cno,Grade),其 中Cno为学生选修的课程编号;分解后的部分数据如表5.2、 表5.3和表5.4所示。
《MySQL数据库原理、设计与应用》第5章课后习题答案

第五章一、填空题1.逗号或,2. 33.FLOOR(3+RAND()*(11-3+1))或FLOOR(3+RAND()*9)4.NULL5.ON DUPLICATE KEY二、判断题1.错2.对3.错4.对5.对三、选择题1. D2. B3. D4. A5. C四、简答题1.请简述DELETE与TRUNCA TE的区别。
答:①实现方式不同:TRUNCATE本质上先执行删除(DROP)数据表的操作,然后再根据有效的表结构文件(.frm)重新创建数据表的方式来实现数据清空操作。
而DELETE语句则是逐条的删除数据表中保存的记录。
②执行效率不同:在针对大型数据表(如千万级的数据记录)时,TRUNCATE清空数据的实现方式,决定了它比DELETE语句删除数据的方式执行效率更高。
③对AUTO_INCREMENT的字段影响不同,TRUNCATE清空数据后,再次向表中添加数据,自动增长字段会从默认的初始值重新开始,而使用DELETE语句删除表中的记录时,则不影响自动增长值。
④删除数据的范围不同:TRUNCATE语句只能用于清空表中的所有记录,而DELETE语句可通过WHERE指定删除满足条件的部分记录。
⑤返回值含义不同:TRUNCATE操作的返回值一般是无意义的,而DELETE语句则会返回符合条件被删除的记录数。
⑥所属SQL语言的不同组成部分:DELETE语句属于DML数据操作语句,而TRUNCA TE通常被认为是DDL数据定义语句。
2.请简述WHERE与HA VING之间的区别。
1答:①WHERE操作是从数据表中获取数据,用于将数据从磁盘存储到内存中,而HA VING是对已存放到内存中的数据进行操作。
②HA VING位于GROUP BY子句后,而WHERE位于GROUP BY 子句之前。
③HA VING关键字后可以跟聚合函数,而WHERE则不可以。
通常情况下,HA VING关键字与GROUPBY一起使用,对分组后的结果进行过滤。
《数据库系统原理》PPT电子课件教案-第五章 数据库保护

四、用户定义的安全性措施 除了系统级的安全性措施外,Oracle还允许用户用数 据库触发器定义特殊的更复杂的用户级安全性措施。例 如,规定只能在工作时间内更新Student表,可以定义如 下触发器,其中sysdate为系统当前时间: CREATE OR REPLACE TRIGGER secure student BEFORE INSERT OR UPDATE OR DELETE ON Student BEGIN IF(TO_CHAR(sysdate,’DY’) IN(‘SAT’,’SUN’)) OR(TO_NUMBER(sysdate HH24') NOT BETWEEN 8 AND l7) THEN
常用的方法:
1)用一个用户名或者用户标识号来标明用户身份, 系统鉴别此用户是否是合法用户。 2)口令(Password)。为进一步核实用户,系统要求 用户输入口令 3)系统提供一个随机数,用户根据预先约定好的某 一过程或函数进行计算,系统根据计算结果是否正 确进一步鉴定用户身份。
2. 存取控制
(2)行级安全性 Oracle行级安全性由视图实现。用视图定义表的水 平子集,限定用户在视图上的操作,就为表的行级提供 了保护。视图上的授权与回收与表级完全相同。 例如,只允许用户U2查看Student表中信息系学生的 数据,则首先创建信息系学生视图S_ IS,然后将该视图 的SELECT权限授予U2用户。 (3)列级安全性 Oracle列级安全性可以由视图实现,也可以直接在基 本表上定义。 用视图定义表的垂直子集就可以实现列级安全性,方 法与上面类似。
Oracle对数据库对象的权限采用分散控制方式, 允许具有WITH GRANTOPTION的用户把相应权限或 其子集传递授予其他用户,但不允许循环授权,即被 授权者不能把权限再授回给授权者或其祖先, U1 U2 U3 U4 × 循环授权 Oracle把所有权限信息记录在数据字典中。当用 户进行数据库操作时,Oracle首先根据数据字典中的 权限信息,检查操作的合法性。在Oracle中,安全性 检查是任何数据库操作的第一步。
数据库原理 第五章

Database Theory
Integrity Constraints in Create Table
SCT
Student
Not NULL
Primary Key (A1, ..., An) Check (P), where P is a predicate …… E.g.
Create Table Student (Sno char(10) Not NULL, Sname char(20),
DCL (Data Control Language)
Grant Revoke
4 Finance & Economics Zhejiang University of
Database Theory
Data Definition Language (DDL) Allows the specification of not only a set of relations but also information about each relation, including:
char(n) – Fixed length character string, with user-specified length n. varchar(n). – Variable length character strings, with user-specified maximum length
Database Theory
Operations of SQL
DDL (Data Definition Language)
Create
Alter Drop
DML (Data Manipulation Language)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
5.6 触发器
定义触发器 激活触发器 删除触发器 Sqlserver2005中的触发器
9
激活触发器
触发器的执行,是由触发事件激活的,并由数据 库服务器自动执行。
一个数据表上可能定义了多个触发器同一个表上 的多个触发器激活时遵循如下的执行顺序:
• (1) 执行该表上的BEFORE触发器; • (2) 激活触发器的SQL语句; • (3) 执行该表上的AFTER触发器。 • 同一个表上的多个BEFORE(AFTER)触发器的执行
7
• [例19]续
– CREATE TRIGGER Update_Sal AFTER UPDATE ON Teacher FOR EACH ROW AS BEGIN IF (new.Sal <> old.Sal) THEN INSERT INTO Sal_log VALUES(new.Eno,new.Sal,CURRENT_USER,CURRENT_TIMESTAMP); END IF; END;
6
• [例19]定义AFTER行级触发器,当教师表Teacher的工资发生变化后就 自动在工资变化表Sal_log中增加一条相应记录
• 首先建立工资变化表Sal_log
– CREATE TABLE Sal_log ( Eno NUMERIC(4) references teacher(eno) Sal NUMERIC(7,2), Username char(10), Date TIMESTAMP );
– DROP TRIGGER Insert_Sal ON Teacher;
12
5.6 触发器
定义触发器 激活触发器 删除触发器 Sqlserver2005中的触发器
13
Sqlserver2005中的触发器 触发器是什么?
• 触发器是用户定义在关系表中的一类由事件驱动的特殊 过程。
• [例18] 定义一个BEFORE行级触发器,为教师表Teacher定义 完整性规则“教授的工资不得低于4000元,如果低于4000元,自 动改为4000元”。
– CREATE TRIGGER Insert_Or_Update_Sal BEFORE INSERT OR UPDATE ON Teacher FOR EACH ROW AS BEGIN IF ( new.Job = '教授' ) AND (new.Sal < 4000) THEN new.Sal := 4000; END IF; END;
和操作,具有更精细和更强大的数据控制能力。
触发器的定义
• CREATE TRIGGER语法格式
– CREATE TRIGGER <触发器名> <BEFORE | AFTER> <触发事件> ON <表名> FOR EACH <ROW | STATEMENT>
[WHEN <触发条件>] <触发动作体>
– CREATE TRIGGER Insert_Sal AFTER INSERT ON Teacher FOR EACH ROW AS BEGIN INSERT INTO Sal_log VALUES(new.Eno,new.Sal,CURRENT_USER,CURRENT_TIMESTAMP); END;
数据库原理
主讲人:王子健
1
第五章 数据库完整性
实体完整性 参照完整性 用户自定义的完整性 完整性约束命名子句 触发器
2
5.6 触发器
定义触发器 激活触发器 删除触发器 Sqlserver2005中的触发器
3
定义触发器
触发器是什么?
• 触发器是用户定义在关系表中的一类由事件驱动的特殊过程。 • 表中数据的增、删、改操作是激活触发器的事件。 • 触发器可以实施比foreign key约束、check约束更为复杂的检查
• 在执行某些特定的SQL语句(触发特定事件)时自动执 行。
• 表的创建,修改,删除是激发触发器的事件(DDL触发 器)
• 表中数据的增、删、改操作是激活触发器的事件 (DML触发器)。
• 触发器可以实施比foreign key约束、check约束更为 复杂的检查和操作,具有更精细和更强大的数据控制能 力。
顺序:
– 遵循“谁先创建,谁先执行”的原则 – 按字母顺序
10
激活触发器
例题
• [例20]执行修改某个教师工资的SQL语句,激活上 述定义的触发器。
– UPDATE Teacher SET Sal=800 WHERE Ename='陈平';
• 执行顺序是:
– 执行触发器Insert_Or_Update_Sal – 执行SQL语句“UPDATE Teacher SET Sal=800 WHERE
4
定义触发器
触发器的定义
• 语法详解
– 创建者:表的拥有者 – 触发器名:为触发器命名 – 表名:触发器的目标表的名字 – 触发事件:INSERT、DELETE、UPDATE或它们的组合 – 触发器的类型:行级触发器和语句级触发器 – 触发条件:触发器被激活时,根据该条件判断是否执行<触发动作体
> – 触发动作条:是一个匿名过程块,或是对以创建存储过程的调用。
如果是行级触发器,用户可以在过程体中使用NEW和OLD引用 UPDATE/INSERT事件之后的新值和UPDATE/DELETE事件之前的 旧值。如果是语句级触发则不能在动作体中使用NEW或OLD进行 引用。
5
定义触发器
触发器的定义
Ename='陈平';” – 执行触发器Insert_Sal; – 执行触发器Update_Sal
11
删除触发器
删除触发器的SQL语法:
• DROP TRIGGER <触发器名> ON <表名>; • 触发器必须是一个已经创建的触发器,并且只能由具有
相应权限的用户删除。 • [例21] 删除教师表Teacher上的触发器Insert_Sal
14
Sqlserver2005中的触发器 触发器的定义?
• 在定义触发器时应指定触发器的:
– 名称 – 目标表格 – 触发事件 – 类型(执行动作体的方式) – 动作体(过程块)