第一篇:Oracle数据库触发器京桥大学
京桥大学召开“解放思想、改革开放、创新驱动、科学发展”大讨论活动动员大会 为深入贯彻落实党的十八大精神、5月15日下午,我院在办公楼二楼大会议室召开“解放思想、改革开放、创新驱动、科学发展”大讨论活动动员大会。学院党委书记魏东海作重要讲话,党委副书记张瑾主持会议,学院领导和全体中层干部参加了会议。
魏书记在讲话中指出,开展“解放思想、改革开放、创新驱动、科学发展”大讨论活动,是全面贯彻党的十八精神、深入落实党的十八大精神的重要举措,也是实现我院进位赶超、跨越发展的关键,全体教职员工要真正学深吃透党的十八大精神和市委八届五次全会精神,切实将党的理论创新成果和市委的决策部署转化成促进学院科学发展的自觉行动;要深刻查找与学院科学发展不相适应的思想观念,进一步开创解放思想的新境界;要扎实深入开展对标行动,在学习先进、调查研究、对比分析中,查找差距不足,制定赶超计划;要紧密联系学院实际,着力解决影响学院科学发展的突出问题;要把创新突破贯彻始终,坚持边学习边讨论边实践,把大讨论成果转化为解决问题的科学决策、赶超进位的科学路径、科学发展的实际行动。
魏书记指出,要紧密围绕“解放思想、改革开放、创新驱动、科学发展”这一主题,紧密联系思想和工作实际,从如何在办学理念上解放思想,在培养现代职业人的方法和路径上寻求新突破;如何在人才观念上解放思想,在引进人才、培养人才、用好人才上寻求新突破;如何在体制创新上解放思想,在建立长效动能机制上寻求新突破;如何在服务区域经济社会发展上解放思想,在实现校企的深度合作上寻求新突破;如何在目标管理上解放思想,在推进全面对标,提升学院核心竞争力上寻求新突破;如何在深化改革育人模式上解放思想,在“立德树人”提高人才培养质量上实现新突破;如何在营造发展环境上解放思想,在提升学院发展能力上实现新突破;如何在干部队伍建设上解放思想,在提升学院凝聚力战斗力上实现新突破等八个方面开展讨论,探索促进学院改革发展的新思路、新途径、新举措,努力实现思想上明显解放,作风上明显改善,举措上明显创新,工作上明显突破,为建设人民满意、市内领先、国内知名、特色鲜明的民办院校奠定坚实的基础。
魏副书记在会议结束时强调,各党总支要切实负起责任,认真组织教职员工开展学习讨论,及时对本总支大讨论活动的开展情况、成果转化情况进行自查。全体教职工要以此次大讨论活动为契机,促进教育思想和观念的更新,推动学院又好又快发展。
第二篇:网络数据库讲稿(触发器)
网络数据库讲稿
3/26/2013
触发器
P191
一、触发器概述
1.是一种特殊的存储过程。
2.不能被显式调用,只能由一些特定的操作(命令)引发(激活),这些命令是:INSERT、DELETE、UPDATE、CREATE、ALTER、DROP、GRANT、DENY、REVOKE等。3.每个触发器由三部分组成
①触发器名称:命名规则与变量名、存储过程名相同; ②激活该触发器的操作(命令动词)。③一个存储过程。
4.使用触发器可强制实现数据的一致性和完整性。
二、触发器的分类(按引发命令分类)及其工作原理
1.DML触发器(表级)(1)触发器必须依附于某一个表(触发器必须被包含在某一个表中)。(2)激活该触发器的操作:可以是INSERT、DELETE、UPDATE之一。(3)当上述操作发生在包含触发器的表上时,触发器中的过程被自动执行。(4)支持两种类型的触发器: ①AFTER 可以为同一表的同一操作定义多个该类型的触发器,并可定义执行顺序; ②INSTEAD OF 同一表的同一操作只能定义一个该类型的触发器。(5)工作原理
P193 临时逻辑表INSERTED和DELETED。2.DDL触发器(数据库级和服务器级)(1)触发器必须依附于某一个数据库(触发器必须被包含在某一个数据库中)。
(2)激活该触发器的操作:可以是CREATE、ALTER、DROP、GRANT、DENY、REVOKE等之一。
(3)当上述操作发生在包含触发器的数据库上时,触发器中的过程被自动执行。(4)只有AFTER型触发器。
三、创建DML触发器
P194 用命令CREATE TRIGGER创建 例: 1.
CREATE TRIGGER 增加学生学分 ON 成绩
//只能增加一条记录
FOR INSERT AS DECLARE @XH CHAR(6),@KCH CHAR(8),@FS DECIMAL(4,1)SELECT @XH=学号,@KCH=课程编号,@FS=分数 FROM INSERTED IF @FS>=60
网络数据库讲稿
3/26/2013
UPDATE 学生 SET 已修学分
=已修学分+(SELECT 学分 FROM 课程 WHERE 课程编号=@KCH)
WHERE 学号=@XH 2.
CREATE TRIGGER 减少学生学分 ON 成绩 FOR DELETE AS UPDATE 学生 SET 已修学分=已修学分-(SELECT SUM(学分)FROM 课程 WHERE 课程编号 IN(SELECT DISTINCT 课程编号 FROM DELETED WHERE 学生.学号=DELETED.学号 AND 分数>=60))WHERE EXISTS(SELECT DISTINCT 课程编号 FROM DELETED WHERE 学生.学号=DELETED.学号 AND 分数>=60)3.CREATE TRIGGER 修改学生学分 ON 成绩 FOR UPDATE AS UPDATE 学生 SET 已修学分=已修学分-(SELECT SUM(学分)FROM 课程 WHERE 课程编号 IN(SELECT DISTINCT 课程编号 FROM DELETED WHERE 学生.学号=DELETED.学号 AND 分数>=60))WHERE EXISTS(SELECT DISTINCT 课程编号 FROM DELETED WHERE 学生.学号=DELETED.学号 AND 分数>=60)UPDATE 学生 SET 已修学分=已修学分+(SELECT SUM(学分)FROM 课程WHERE 课程编号 IN(SELECT DISTINCT 课程编号 FROM INSERTED WHERE 学生.学号=INSERTED.学号 AND 分数>=60))WHERE EXISTS(SELECT DISTINCT 课程编号 FROM INSERTED WHERE 学生.学号=INSERTED.学号 AND 分数>=60)
4.“修改学生学分”也可改为:
CREATE TRIGGER 修改学生学分 ON 成绩 FOR UPDATE AS UPDATE 学生 SET 已修学分=(SELECT SUM(学分)FROM 课程 WHERE 课程编号 IN
网络数据库讲稿
3/26/2013(SELECT 课程编号 FROM 成绩
WHERE 学生.学号=成绩.学号 AND 分数>=60))
然后可执行下列命令,并检验执行结果。
--INSERT INTO 成绩 VALUES('200202','L2020308',83)--INSERT INTO 成绩 VALUES('200202','L2030501',80)--INSERT INTO 成绩 VALUES('200202','L2030506',75)--DELETE FROM 成绩 WHERE 学号='200202' AND LEFT(课程编号,1)='L'--UPDATE 成绩 SET 分数=80 WHERE 学号='200202' AND LEFT(课程编号,1)='L'
四、创建DDL触发器
P198 例: 1.P199 2.CREATE TRIGGER 禁删数据库ON ALL SERVER FOR DROP_DATABASE AS PRINT '请不要删除数据库!' ROLLBACK TRANSACTION
DROP DATABASE 订货管理
五、嵌套触发器和递归触发器
P199, P200
六、管理触发器
P201 1.查看 2.修改 3.禁用 4.删除
--根据成绩表计算每个学生的已修学分
update 学生set 已修学分=(select sum(学分)from 课程 where 课程编号in(select 课程编号from 成绩where 学生.学号=成绩.学号 and 分数>=60))
--修改插入触发器,使得向成绩表中插入多条记录,也能成功执行 CREATE TRIGGER 插入学生学分ON 成绩 FOR insert
网络数据库讲稿
3/26/2013 AS UPDATE 学生SET 已修学分=已修学分+(SELECT SUM(学分)FROM 课程 WHERE 课程编号IN(SELECT DISTINCT 课程编号FROM inserted WHERE 学生.学号=inserted.学号AND 分数>=60))WHERE EXISTS(SELECT DISTINCT 课程编号FROM inserted WHERE 学生.学号=inserted.学号AND 分数>=60)
select * from 成绩
select 学号,已修学分from 学生
INSERT INTO 成绩VALUES('200202','L2020308',83)INSERT INTO 成绩VALUES('200202','L2030501',80)INSERT INTO 成绩VALUES('200202','L2030506',75)INSERT INTO 成绩VALUES('200201','L2020308',83)INSERT INTO 成绩VALUES('200201','L2030501',80)INSERT INTO 成绩VALUES('200201','L2030506',75)
select * into 备份成绩from 成绩 //备份成绩表 select 学号,姓名,已修学分from 学生
insert into 成绩 select * from 成绩
INSERT INTO 成绩VALUES('200212','L2030506',75)
第三篇:Oracle数据库实验报告
中南林业科技大学
实验报告
课程名称:
Oracle数据库 专业班级: 姓名:
学号:
****年**月**日
实验一
安装和使用Oracle数据库
【实验目的】
1.掌握Oracle软件安装过程,选择安装组件 2.掌握建立Oracle数据库,配置网络连接 3.掌握Oracle企业管理器的基本操作 4.使用SQL*Plus,登录到实例和数据库 5.掌握命令方式的关闭和启动实例及数据库 【实验内容】
1.查看已安装的Oracle组件
2.查看服务,记录下和数据库有关的服务名,将他们设为手动方式,启动相关服务。
3.配置监听器,查看是否在服务中有LISTENER,是否能启动。4.配置本地net服务,提示:设置正确的服务器地址和端口号。5.打开SQL*Plus,用SYS和SYSTEM用户名和密码登录。6.思考题:有几种打开SQL*Plus的方法?分别是什么? 7.用命令关闭实例和数据库,记录命令
8.用命令以NOMOUNT的方式启动实例,再加载数据库,打开数据库。
【实验结论】
1.查看已安装的Oracle组件
2.查看服务,记录下和数据库有关的服务名,将他们设为手动方式,启动相关服务。
3.配置监听器,查看是否在服务中有LISTENER,是否能启动。
4.配置本地net服务,提示:设置正确的服务器地址和端口号。
5.打开SQL*Plus,用SYS和SYSTEM用户名和密码登录。
6.思考题:有几种打开SQL*Plus的方法?分别是什么?(1)直接打开 sql plus 即窗口方式(2)cmd 命令行方式
(3)WEB 页面中 iSQL*Plus 方式 7.用命令关闭实例和数据库,记录命令 SQL>shutdown immediate
8.用命令以NOMOUNT的方式启动实例,再加载数据库,打开数据库。
sql>startup nomount sql>alter database mount;sql>alter database open;sql>startup
(1).用SQLplus 命令:show parameters参数名
(2).用select [列名] from 表名
2.初始化文件有几种?默认的保存位置在哪里?
初始化文件有三种:数据文件,日志文件,控制文件; 默认的保存位置E:oracleproduct10.2.0oradataorcl
4.打开OEM,查看三类物理文件信息
三类物理文件:数据文件、控制文件、日志文件 数据文件:.DBF存储表、索引及数据结构信息
日志文件:.LOG记录对数据库的所有修改信息,用于恢复
控制文件:.CTL二进制文件,记录数据库名、文件标识、检查点
5.分别用select命令查询V$parameter动态性能视图,用show命令查看全局数据库名、实例名、是否启动自动归档、标准数据块大小这四个参数的值,记录命令和结果。用select命令查询V$parameter动态性能视图
用show命令查看全局数据库名、实例名
用show命令查看是否启动自动归档、标准数据块大小
6.如何用命令查看数据文件、控制文件的文件名、存储位置和状态信息?
(1).查看数据文件的文件名、存储位置和状态信息
(2).查看控制文件的文件名、存储位置和状态信息
0
和服务器型文件都要找到),查看各类默认位置并记录下来(包括物理文件所在目录,该数据库相关的各个目录等),登录到mydb数据库。
2.用命令方式手工创建数据库testorcl
(1)创建批处理文件,建立必需的各级目录,参考第一题MYDB数据库的默认目录。
(4)运行数据库建立脚本,更改相关服务为手动启动方式
(5)运行数据字典等创建脚本
3.在DBCA中删除MYDB数据库。
Enter valuefor 4:runner Specify log path as parameter 5: Enter valuefor 5: D:oracleproduct10.2.0db_2RDBMSlog
二、完成下面的查询,记录查询命令和结果。1.查询HR方案种有哪些表,列出表名 2.设置行宽为160,每页行数为40 3.查询employees表中所有薪水在3000到6000元之间的员工编号、姓、名、受聘日期、工作代号、薪水、经理代号、部门号,按部门号升序排列,同一部门按员工编号降序排列
4.查询每个部门的人数、平均薪水、最高薪水、最低薪水,按部门编号升序排列
5.查询first_name的第三个字母是t的员工编号,first_name,电话号码,部门编号,部门名称
6.在job_history表中查询任职时间超过1年的员工编号,任职历时月份(保留整数),工作代号,部门代号。
7.查询每个部门经理的员工编号、姓名、薪水、部门号。
【实验结论】
一、需要访问HR示例方案中的表,如果机器上没有该示例方案,则运行相关包和相应配置装入HR方案。
1.将hr.rar解压到D:oracleproduct10.2.0db_2demoschema human_resources目录下,然后在SQL*PLUS 中执行 hr_main.sql
二、完成下面的查询,记录查询命令和结果。1.查询HR方案种有哪些表,列出表名
5.查询first_name的第三个字母是t的员工编号,first_name,电话号码,部门编号,部门名称
738
实验五
PL/SQL编程
【实验目的】
1.熟悉PL/SQL的数据类型和书写规则 2.熟悉控制结构和游标的使用 3.编写和运行函数、过程和触发器 【实验内容】
编写脚本文件,调试运行脚本文件,并记录结果。
1.在SQL*Plus中编写一个PL/SQL块,功能用于打印学生信息 在DECLARE部分完成:
(2)建立学生信息记录类型stu_record_type,包括学号,姓名,性别,籍贯,学习成绩和活动成绩。均为可变长字符类型(3)编写本地子过程:学生信息打印过程PrintStuRecord,把(1)中定义的记录类型作为参数(4)定义学生信息记录变量stu_record 在BEGIN…END部分完成:
(1)为stu_record变量的各个元素赋值如下: 学号:‘2001001’ 姓名:’李新’
性别:‘m’
籍贯:‘黑龙江省哈尔滨市’ 学习成绩:‘Excellent’
0
(1)建立学生信息记录类型stu_record_type,包括学号,姓名,性别,籍贯,学习成绩和活动成绩。均为可变长字符类型
set serveroutput on declare type stu_record_type is record
(s_no varchar2(8), s_name varchar2(10), s_sex varchar2(2), s_address varchar2(20), s_studyscore varchar2(10), s_activescore varchar2(10));(2)编写本地子过程:学生信息打印过程PrintStuRecord,把中定义的记录类型作为参数
procedure PrintStuRecord as begin dbms_output.put_line('学号:'|| stu_record.s_no);dbms_output.put_line('姓名 :'|| stu_record.s_name);dbms_output.put_line('性别:'|| stu_record.s_sex);dbms_output.put_line('籍贯:'|| stu_record.s_address);dbms_output.put_line('学习成绩:'|| stu_record.s_studyscore);dbms_output.put_line('活动成绩:'|| stu_record.s_activescore);end PrintStuRecord;(3)定义学生信息记录变量stu_record stu_record stu_record_type;在BEGIN…END部分完成:
(4)为stu_record变量的各个元素赋值如下: 学号:‘2001001’ 姓名:’李新’
性别:‘m’
籍贯:‘黑龙江省哈尔滨市’
2.建立对bookinfo表的DML触发器,一旦bookinfo表发生了任何变化,立即触发,对bookinfo表的数据进行统计,结果存储在数据统计表中
(1)如果没有则建立bookinfo表,选择建立在scott用户下,表结构为(bookno varchar2(36)Primary key, bookname varchar2(40)not null, authorname varchar2(10)not null, publishtime date, bookprice float)
create table bookinfo(bookno varchar2(36)Primary key,4
Selectcount(bookno),count(distinct authorname)from bookinfo;end;/
(4)在bookinfo表中插入、删除和更新信息,再查看major_stats表中数据的变化 <1>插入
647
实验六
模式对象管理与安全管理
【实验目的】
1.了解模式对象的类型
2.掌握在OEM中操作模式对象的方法
3.掌握命令方式建立表、视图、索引等常见对象的方法 4.熟悉Oracle中权限分类和设置,理解系统提供用户的角色和权限
5.熟练使用建立用户、角色,为用户授权、授予角色的命令
【实验内容】
1.创建一个TESTUSET用户,密码为test,默认表空间为user表空间
2.创建用户后为其授予登录数据库和创建数据库对象的权限 3.用TESTUSER用户登录数据库
4.创建学生信息表(学号,姓名,性别,入学成绩),定义主键和输入数据(至少5条数据),提交添加的数据。并完成下面的题目:
(1)再继续添加2条数据,设置一个保存点savepoint,再添加1条数据,执行回退到保存点的回退命令。查看此时表中数据(2)查询入学成绩大于480的学生信息(3)建立男生信息视图
(4)在“成绩”字段上建立B-树索引
5.创建一个表簇,名为empl_dep,容纳empl表和dep表,有公
第四篇:ORACLE数据库工作总结
2014-2015学第一学期ORACLE教学工作总结
班级:13高软班
数据库技术是计算机科学技术中发展最快的领域之一,也是应用最为广泛的技术之一,它已经成为计算机信息系统与应用的核心技术和重要基础。所以在学习这门课时,注重学生实际操作能力,安排了理论与上机操作相结合。以下是我的工作总结:
1、课前准备:备好课。认真学习贯彻教学大纲,钻研教材。了解教材的基本思想、基本概念、结构、重点与难点,掌握知识的逻辑。
了解学生原有的知识技能的质量,他们的兴趣、需要、方法、习惯,学习新知识可能会有哪些困难,采取相应的措施。
考虑教法,解决如何把已掌握的教材传授给学生,包括如何组织教学、如何安排每节课的活动。
2、课堂上的情况。组织好课堂教学,关注全体学生,注意信息反馈,调动学生的注意力,使其保持相对稳定性。同时,激发学生的情感,使他们产生愉悦的心境,创造良好的课堂气氛,课堂语言简洁明了,课堂提问面向全体学生,注意引发学生学习的兴趣,课堂上讲练结合,布置好课外作业,减轻学生的负担。
3、上机操作情况。让学生复习操作上节课的学习内容,布置一定的作业,做到每个学生的每个SQL语句,每个操作抖完全掌握。总之,作为一名教师,教学是我的基本工作,而教与学是一个良性互动的过程,在教中学,在学中教,才能实现自己在业务上的进步与飞跃。实施素质教育对教师的素质要求更高,在今后的教育教学中,我将严格要求自己,努力工作,发扬优点,开拓进取,为教育事业奉献自己的力量。
第五篇:Oracle数据库 知识点总结
1.constraint约束:
alter table [table_name] add constraint [pk_name] primary key(pkname);//添加主键
alter table [table_name] drop constraint [pk_name];//删除主键
alter table [table_name] add constraint [fk_name] foreign key(fkname)references [tablename](fkname);//添加外
键
alter table [table_name] drop constraint [fk_name];//删除外键
2.union 关键字:
A username, B username
rod
bruce
rose
marina
select username from A
union
select username from B
2、几个高级查询运算词
A: UNION 运算符
UNION 运算符通过组合其他两个结果表(例如 TABLE1 和 TABLE2)并消去表中任何重复行而派生出一个结果表。当
ALL 随 UNION 一起使用时(即 UNION ALL),不消除重复行。两种情况下,派生表的每一行不是来自 TABLE1 就是来 自 TABLE2。
B: EXCEPT 运算符
EXCEPT 运算符通过包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重复行而派生出一个结果表。当 ALL 随
EXCEPT 一起使用时(EXCEPT ALL),不消除重复行。
C: INTERSECT 运算符
INTERSECT 运算符通过只包括 TABLE1 和 TABLE2 中都有的行并消除所有重复行而派生出一个结果表。当 ALL 随
INTERSECT 一起使用时(INTERSECT ALL),不消除重复行。
注:使用运算词的几个查询结果行必须是一致的。
3.复合主键一般不设外键
4.组函数也称为聚合函数。
例如:我们把学生可以分为男生和女生两个组,如果想求每组的人数,平均身高,平均年龄等,就需要用到分组函数了。
在SQL中常用的组函数有以下几个:
COUNT():求出全部的记录数
MAX():求出一组中的最大值
MIN():求出一组中的最小值
AVG():求出一组中的平均值
SUM():求和
范例:COUNT()函数
SELECT COUNT(empno)FROM emp;
我们常用COUNT(*),最好能够用字段代替*
范例:MAX()、MIN()函数,求最大最小值,一般是针对于数值的字段的,求出所有员工的的最高工资,和最底工资和平均工
资。
SELECT MAX(sal)最高工资,MIN(sal)最底工资,AVG(sal)平均工资 FROM emp;
范例:求出部门10的所有员工工资的总合
SELECT SUM(sal)工资综合 FROM emp WHERE deptno=10;
如果如下查询输出部门编号和其部门所有员工的工资总和,会产生错误。
SELECT deptno ,SUM(sal)工资综合 FROM emp WHERE deptno=10;
错误: “不是单组分组函数”
发生以上的错误信息,是因为这样的查询需要进行分组统计。
分组统计有其固定的语法格式:
SELECT {DISTINCT} *| 查询列 列别名1,查询列2 列别名2,……
FROM 表名称1 表别名1,表名称2 表别名2,……
{WHERE 条件(s)}
{ORDER BY 排序的字段1,排序的字段2 ASC|DESC}
{GROUP BY 分组字段}
所以老师写的是错的!
5.//从t_student表中删除名字重复的记录的信息
delete from t_student where sid not in(select sid from(select min(sid)sid,sname from t_student group by sname));
// delete from tablename where id not in(select max(id)from tablename group by col1,col2,...)
6.sequence
在oracle中sequence就是序号,每次取的时候它会自动增加。sequence与表没有关系。
(1)
CREATE SEQUENCE seqTest
INCREMENT BY 1--每次加几个
START WITH 1--从1开始计数
NOMAXvalue--不设置最大值
NOCYCLE--一直累加,不循环
CACHE 10;--设置缓存cache个序列,如果系统down掉了或者其它情况将会导致序列不连续,也可以设置为----NOCACHE(2)
定义好sequence后,你就可以用currVal,nextVal取得值。
CurrVal:返回 sequence的当前值
NextVal:增加sequence的值,然后返回 增加后sequence值
eg:
SELECT Sequence名称.CurrVal FROM DUAL;
select seqtest.currval from dual(3)
在Sql语句中可以使用sequence的地方:
-不包含子查询、snapshot、VIEW的 SELECT 语句
-INSERT语句的子查询中
-INSERT语句的values中
-UPDATE 的 SET中
如在插入语句中
insert into 表名(id,name)values(seqtest.Nextval,'sequence 插入测试');
7.范式:
所谓第一范式(1NF)是指在关系模型中,对域添加的一个规范要求,所有的域都应该是原子性的,即数据库表的每一
列都是不可分割的原子数据项,而不能是集合,数组,记录等非原子数据项。即实体中的某个属性有多个值时,必须拆分
为不同的属性。在符合第一范式(1NF)表中的每个域值只能是实体的一个属性或一个属性的一部分。简而言之,第一范式
就是无重复的域。
第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF)。
第二范式(2NF)要求数据库表中的每个实例或记录必须可以被唯一地区分。选取一个能区分每个实体的属性或属性组,作
为实体的唯一标识。第二范式(2NF)要求实体的属性完全依赖于主关键字。所谓完全依赖是指不能存在仅依赖主关键字一
部分的属性,如果存在,那么这个属性和主关键字的这一部分应该分离出来形成一个新的实体,新实体与原实体之间是一
对多的关系。为实现区分通常需要为表加上一个列,以存储各个实例的唯一标识。简而言之,第二范式就是在第一范式的基础上属性完全依赖于主键。例如在员工表中的身份证号码即可实现每个一员工的区分,该身份证号码即为候选键,任何
一个候选键都可以被选作主键。在找不到候选键时,可额外增加属性以实现区分,如果在员工关系中,没有对其身份证号
进行存储,而姓名可能会在数据库运行的某个时间重复,无法区分出实体时,设计辟如ID等不重复的编号以实现区分,被
添加的编号或ID选作主键。
第三范式(3NF)是第二范式(2NF)的一个子集,即满足第三范式(3NF)必须满足第二范式(2NF)。简而言之,第三范式(3NF)要求一个关系中不包含已在其它关系已包含的非主关键字信息。例如,存在一个部门信息表,其中每个部门
有部门编号(dept_id)、部门名称、部门简介等信息。那么在员工信息表中列出部门编号后就不能再将部门名称、部门简
介等与部门有关的信息再加入员工信息表中。如果不存在部门信息表,则根据第三范式(3NF)也应该构建它,否则就会有
大量的数据冗余。简而言之,第三范式就是属性不依赖于其它非主属性,也就是在满足2NF的基础上,任何非主属性不得传
递依赖于主属性。