第5章 数据库表的规范化
数据库第五章习题及答案
数据库第五章习题及答案本文档为数据库第五章的习题及答案,帮助读者巩固数据库相关知识。
习题1. 数据库的优点有哪些?数据库具有以下优点: - 数据共享:多个用户可以同时访问和共享数据库中的数据。
- 数据一致性:数据库提供事务管理能力,保证了数据的一致性。
- 数据持久性:数据在数据库中是永久存储的,不会因为系统关机或程序结束而丢失。
- 数据冗余度低:数据库通过规范化设计,减少了数据的冗余性,提高了数据的存储效率。
- 数据独立性:数据库支持数据与应用程序的独立性,提高了系统的灵活性和维护性。
- 数据安全性:数据库提供了用户权限管理和数据备份机制,保证了数据的安全性。
2. 数据库的三级模式结构是什么?数据库的三级模式结构包括: - 外模式(视图层):外模式是用户所看到的数据库的子集,用于描述用户对数据库的逻辑视图。
每个用户可以有不同的外模式来满足自己的需求。
- 概念模式(逻辑层):概念模式是全局数据库的逻辑结构和组织方式,描述了数据的总体逻辑视图。
概念模式独立于具体的应用程序,是数据库管理员的角度来看待数据库的。
- 内模式(物理层):内模式是数据库的存储结构和物理组织方式,描述了数据在存储介质上的实际存储方式。
3. 数据库的完整性约束有哪些?数据库的完整性约束包括: - 实体完整性约束:确保表的主键不为空,每个实体都能够唯一标识。
- 参照完整性约束:确保外键的引用关系是有效的,即外键值必须等于被引用表中的主键值或者为空。
- 用户定义完整性约束:用户可以自定义额外的完整性约束,如检查约束、唯一约束、默认约束等。
4. 数据库的关系模型有哪些特点?数据库的关系模型具有以下特点: - 数据用二维表的形式进行组织,表由行和列组成,每一行表示一个实体,每一列表示一个属性。
- 表与表之间通过主键和外键建立关联关系,形成关系。
- 关系模型提供了一种数据独立性的设计方法,使得应用程序与数据的逻辑结构相分离,提高了系统的灵活性和可维护性。
教你如何进行数据库设计与规范化
教你如何进行数据库设计与规范化数据库是现代信息系统中非常重要的组成部分,它能够有效地管理数据,提供数据的快速访问和数据的持久化存储。
数据库设计与规范化是数据库开发过程中的关键环节,本文将以专业的角度为读者介绍如何进行数据库设计与规范化。
第一章:数据库设计的基本原则数据库设计的目标是根据系统需求,合理地组织和存储数据,以满足数据的可靠性、安全性、一致性和高性能等要求。
在设计数据库时,应遵循以下基本原则:1. 数据库的结构应反映系统的实际需求,逻辑结构和组织结构要合理。
2. 数据库的设计应具有一定的可扩展性和灵活性,便于后期的扩展和维护。
3. 数据库的设计要考虑数据的完整性,包括实体完整性、参照完整性和用户定义的完整性。
4. 数据库的设计要避免冗余和不一致,保证数据的一致性和准确性。
5. 数据库的设计要考虑性能问题,包括查询的效率和数据的存储空间等方面。
数据库设计的过程包括需求分析、概念设计、逻辑设计和物理设计等阶段。
1. 需求分析:明确系统需求,包括数据的输入、输出和处理等方面,分析用户的需求和期望。
2. 概念设计:根据需求分析结果,设计出概念模型,包括实体-联系图、数据流图等,描述数据的组织和关系。
3. 逻辑设计:将概念模型转化为逻辑模型,选择合适的数据模型,设计出数据库的结构和关系。
4. 物理设计:将逻辑模型转化为物理模型,选择合适的存储结构和索引等,确定数据库的存储方式和存储结构。
第三章:数据库规范化的基本理念数据库规范化是为了消除数据中的冗余和不一致,提高数据库的设计质量和性能。
数据库规范化的基本理念包括:1. 第一范式:每个属性都是不可再分的,属性值的原子性。
2. 第二范式:每个非主属性完全依赖于主键,不存在部分依赖。
3. 第三范式:每个非主属性只依赖于主键,不存在传递依赖。
4. BCNF范式:消除主键以外的属性之间的函数依赖关系。
数据库规范化的步骤包括:1. 识别主键和函数依赖:确定实体和属性,识别主键,分析函数依赖关系。
5第五章第4讲关系模式的规范化
5第五章第4讲关系模式的规范化关系模式的规范化是数据库设计中的一个重要概念,它通过一系列规则和规范化原则,使得关系模式能够更加合理、高效地组织和管理数据。
规范化的目的是消除冗余和数据依赖,以避免数据异常和不一致的情况发生。
本文将介绍关系模式规范化的基本概念、规则和原则,并讨论规范化的实际应用。
关系模式规范化的基本概念是:在关系数据库中,每个关系模式都应该经过规范化,以达到最佳的数据结构和数据组织方式。
规范化是一个多阶段的过程,每个阶段都有特定的规则和原则。
第一范式(1NF)是最基本的规范化原则。
它要求每个关系模式的属性都是原子性的,即不可再分的。
这意味着属性的值不可以是集合、数组或多值的。
如果一个属性的值可以被分解为更小的数据项,则需要拆分为多个属性,使得每个属性都是原子的。
第二范式(2NF)要求在满足1NF的基础上,消除非主属性对码的部分函数依赖。
函数依赖指的是当一个属性的值确定之后,另一个属性的值也能确定。
如果一个属性只依赖于码中的一部分属性,而不是整个码,那么它就存在部分函数依赖,需要拆分为多个关系模式,以消除这种依赖。
第三范式(3NF)要求在满足2NF的基础上,消除非主属性对互相之间的传递依赖。
传递依赖指的是当一个属性的值确定之后,其他非主属性的值也能确定。
如果一个非主属性依赖于另一个非主属性,而不是直接依赖于码,那么它就存在传递依赖,需要拆分为多个关系模式,以消除这种依赖。
此外,还有更高级的规范化形式,如BCNF(巴斯-科德范式)和第四范式。
BCNF要求在满足3NF的基础上,消除所有非主属性对码的冗余依赖。
第四范式则要求在满足BCNF的基础上,消除多值依赖和联合依赖。
这些规范化原则和规则都是为了最大程度地消除数据冗余和依赖问题,并提高数据库的性能和数据完整性。
关系模式规范化在实际应用中有着广泛的应用。
首先,在数据库设计阶段就应该考虑规范化原则,选择合适的属性和关系模式,避免冗余和依赖问题。
SQL数据库第5章表数据操作
•例 • 创建一个规则,并绑定到表KC的课程号列,用于限制课
程号的输入范围 • use xscj • go • Create rule kc_rule • as @rang like ‘[1-5][0-9][0-9]’ • go • Use xscj • exec sp_bindrule ‘kc_rule’,’kc.kch’ • go
• use xscj
• create table xs3
• (xh char(6) not null constraint xh_pk primary key,
• xm char(8)not null,identtitycard char(20) constraint sh_uk unique,
• delete [from ]
•
{table_name׀view_name}
[where <search_condition>] •
的行删39Example:将XSCJ数据库的表XS中总学分小于 • 除:
USE XSCJ •
DELETE FROM XS •
39<
WHERE 总学分 •
go •
• 2. 使用TRUNCATE TABLE语句删除表 数据
• select xh,xm,zhy
• from xs1
•
Where zhy=‘生工’
• 查询结果:select * from xs2
• 二、使用DELETE或TRUNCAT删除数据
• delete 语句的功能是从表中删除行,其基本语法格式为:
• 二、 实体完整性的实现 • 通过选择一列或多列做主键可实现表的实体完整性。 • 一个表只能有一个primary key约束,且primary key
数据库原理第五章关系数据库的规范化设计
12
模式分解是关系规范化的 主要方法(二)
与TDC相比,分解为三个关系模式后,数据的冗余度明显 降低。 当新插入一个系时,只要在关系D中添加一条记录。 当某个教师尚未讲课,只要在关系T中添加一条教师记录, 而与TC授课关系无关,这就避免了插入异常。 当某个系的教师不再讲课时,只需在TC中删除该教师的 全部授课记录,而关系D中有关该系的信息仍然保留,从 而不会引起删除异常。 同时,由于数据冗余度的降低,数据没有重复存储,也不 会引起更新异常。
24
2.2 完全函数依赖和部分函数依赖
例如:学生成绩表中
姓名 王一 王二 王三 王一
学号 1 2 3 4
年龄 16 15 16 16
籍贯 河北 山东 北京 天津
姓名不能推出年龄,学号也不能推出年龄,但是 姓名 + 学号能推出年龄,故完全依赖;
学号能直接推出籍贯,故是部分依赖
25
2.3 传递函数依赖
当关系中的元组增加、删除或更新后都不能被破 坏这种函数依赖。因此,必须根据语义来确定属 性之间的函数依赖,而不能单凭某一时刻关系中 的实际数据值来判断。
20
函数依赖的定义和性质(六)
函数依赖可以保证关系分解的无损连接性
设R(X,Y,Z),X,Y,Z为不相交的属性集合,如果X Y或X Z,则有R(X,Y,Z)=R[X,Y]*R[X,Z],其中,R[X,Y]表示关 系R在属性(X,Y)上的投影,即 R等于其投影在X上的自然连 接,这样便保证了关系R分解后不会丢失原有的信息,称为 关系分解的无损连接性
第5章 数据库表的规范化
§ 5.1.4 数据表和规范化 — 转换为第三范式 续
术语3NF(第三范式,third normal form): 它属于2NF。 它不包括传递依赖。
§ 5.1.5 数据表和规范化 — 改进的设计
依靠规范化我们消除了数据冗余,但是我们不能仅仅 依赖规范化做出好的设计,现在我们来看看如何在规范化的 基础上提高数据库的操作性能和提供数据的能力。 PK分配 命名约定 属性原子性 添加属性 精制PK
表名:PROJECT
表名:JOB
PRJ_NUM PRJ_NAME
JOB_CLASS CHG_HOUR
— 添加属性
— PK分配 — 命名约定
表名:PROJECT
表名:JOB
PRJ_NUM PRJ_NAME EMP_NUM
JOB_CODE
JOB_DESCRIPTION
JOB_CHG_HOUR
§ 5.1.5 数据表和规范化 — 改进的设计
步骤2:标识依赖属性
3个新表PROJECT,EMPLOYEE和ASSIGN可以描述如下: PROJECT(PROJ_NUM,PROJ_NAME) EMPLOYEE(EMP_NUM,EMP_NAME,JOB_CLASS,CHG_HOUR) ASSIGN(PROJ_NUM,EMP_NUM,ASSIGN_HOURS)
§ 5.1.4 数据表和规范化 — 转换为第三范式 续
PRJ_NUM PRJ_NAME
表名:PROJECT
EMP_NUM EMP_NAMEJOB_CLASS
JOB_CLASS CHG_HOUR
表名:EMPLOYEE
表名:JOB
EMP_NUM PRJ_NUM
ASSIGN_HOURS
表名:ASSIGN
第5章 数据库管理
3.5视图3.5.1为什么要使用视图(1)视图能减少S Q L查询语句编写的工作量及对它进行合理的管理。
(2)视图使用户以不同的方式看待相同数据。
(3)视图对数据库的使用提供一定的逻辑独立性。
(4)视图能够对数据提供安全保护。
3.5.2创建视图•C R E A T E V I E W语句可以创建视图,其一般语法格式为:C R E A T E V I E W<视图名>[(<列名>[,<列名>]…)]A S<S E L E C T语句>[W I T H C H E C K O P T I O N];•W I T H C H E C K O P T I O N可选项关键词表示在对视图进行U P D A T E,I N S E R T 和D E L E T E操作时需要保证更新、插入或删除的记录必须满足视图定义中的条件(即S E L E C T语句中的条件表达式)。
•在创建一个视图时要么指定视图的全部列名,要么全部都不指定。
如果缺省了视图的各个属性列名,则该视图就由查询中S E L E C T子句的目标列的列名组成。
但在下列三种情况下必须明确指定组成视图的所有列名: 第一种:视图中包含了多个来自于不同表的相同列名。
第二种:视图中定义的列是由集函数或列表达式所定义。
第三种:视图中为了某些列定义新的列名。
数据库在创建视图时,将其定义存放到相应的系统表中,以供使用。
【例3.56】创建来自加州的作者信息(p u b s数据库的a u t h o r s表,只包含a u_i d, a u_f n a m e,a u_l n a m e,c i t y)视图C A_A u t h o r s。
•语句如下:C R E A T E V I E W C A_A u t h o r sA S S E L E C T a u_i d,a u_f n a m e,a u_l n a m e,c i t y F R O M a u t h o r sW H E R E(s t a t e='C A')•该例没有指定视图的列名,视图则沿用基本表的指定列的列名。
数据库系统概论 课件 第05章_数据库完整性
列值非空(NOT NULL约束) 列值唯一(UNIQUE约束) 检查列值是否满足一个布尔表达式(CHECK约束)
SQL Server 实现用户定义数据完整性的主要方法 有:约束、默认、规则、自定义数据类型和触发器
1、不允许取空值
DB
例5 在定义“学生”表时,说明学号Sno为主键,姓
数据库系统原理
DB
Principles of Database System
第五章 数据库完整性
第五章
DB
数据库完整性
数据库的完整性(Integrity)
数据的正确性、有效性和相容性
防止不合语义的数据进入数据库
例:学生的年龄必须是整数,取值范围为14-35;
学生的性别只能是男或女; 学生的学号一定是唯一的; 学生所在的系必须是学校开设的系;
DB
FOREIGN KEY(<列名>) REFERENCES <表名> [(<列名>)] [ ON DELETE <参照动作> ] [ ON UPDATE <参照动作> ] 其中 第一个“列名”是外部关键字 第二个“列名”是被参照表中的主键或候选键 。
参照动作
DB
NO ACTION(拒绝)
CASCADE(级联)
FOREIGN KEY(Sno) REFERENCES Student(Sno),
FOREIGN KEY(Cno) REFERENCES Course(Cno)
);
5.2.2 参照完整性检查和违约处理
DB
一个参照完整性将两个表的相应元组联 系起来了
对被参照表和参照表进行增删改操作时
有可能破坏参照完整性 因此,必须进行检查
关系数据库规范化理论(05)
5.3 函数依赖
关系模式S(S# , SN , SD , DEAN , C# , G)
根据一般的事实,有: 一个系有若干学生,而一个学生只属于一个系;
一个系只有一名系主任;一个学生可以选修多门课 程,每门课程也可以由多个学生选修;每个学生的 每门课程都只有一个成绩。据此语义,可以得到一 组FD F
9
5.2 数据依赖
G
SNO
DN
CN
DM
关系的规范化理论就是用于改造关系模式,通过 分解关系模式来消除其中不合适的数据依赖,以 解决插入异常、删除异常、更新异常和数据冗余 问题。
10
5.3 函数依赖
函数依赖
设R(U)是属性集U上的关系模式,X , Y U, r是 R(U) 上的任意一个关系,如果成立
对t , s r,若t[X] = s[X],则t[Y] = s[Y] 那么称“X函数决定Y”,或“Y函数依赖于X”,记 作XY 称X为决定因素
如S# SN, (S#,C#) G
不存在t , s r,t[X] = s[X],但t[Y] ≠ s[Y]
11
5.3 函数依赖
A
B
C
D
a1
b1
c1
d1
a1
快速热身
关系模式R(A,B,C,D),码为AB,给出它的一个函数 依赖集,使得R属于2NF而不属于3NF
33
5.4 .4 BC范式(BCNF)
STC(S# , T# , C#)
每位老师只教授一门课
T# C#
某学生选定一门课,就对应一位老师
(S#,C#) T#
候选码
(S#,T#),(S#,C#)
28
5.4 .3 3NF
S# SN SD DEAN S01 杨明 D01 思齐 S02 李婉 D01 思齐 S03 刘海 D02 述圣 S04 安然 D02 述圣 S05 乐天 D03 省身
数据库第五章习题及答案
第五章 关系数据理论一、 单项选择题1、设计性能较优的关系模式称为规范化,规范化主要的理论依据是 ( )A 、关系规范化理论B 、关系运算理论C 、关系代数理论D 、数理逻辑2、关系数据库规范化是为解决关系数据库中( )问题而引入的。
A 、插入、删除和数据冗余B 、提高查询速度C 、减少数据操作的复杂性D 、保证数据的安全性和完整性3、当关系模式R (A ,B )已属于3NF ,下列说法中( )是正确的。
A 、它一定消除了插入和删除异常B 、一定属于BCNFC 、仍存在一定的插入和删除异常D 、A 和C 都是4、在关系DB 中,任何二元关系模式的最高范式必定是( )A 、1NFB 、2NFC 、3NFD 、BCNF5、当B 属性函数依赖于A 属性时,属性A 与B 的联系是( )A 、1对多B 、多对1C 、多对多D 、以上都不是6、在关系模式中,如果属性A 和B 存在1对1的联系,则说( )A 、A B B 、B A C 、A B D 、以上都不是7、关系模式中,满足2NF 的模式,( )A 、可能是1NFB 、必定是1NFC 、必定是3NFD 、必定是BCNF8、关系模式R 中的属性全部是主属性,则R 的最高范式必定是( )A 、2NFB 、3NFC 、BCNFD 、4NF9、关系模式的候选关键字可以有( c ),主关键字有( 1个 )A 、0个B 、1个C 、1个或多个D 、多个10、如果关系模式R 是BCNF 范式,那么下列说法不正确的是( )。
A 、R 必是3NFB 、R 必是1NFC 、R 必是2NFD 、R 必是4NF11、图4.5中给定关系R ( )。
A 、不是3NFB 、是3NF 但不是2NFC 、是3NF 但不是BCNFD 、是BCNF12、设有如图4.6所示的关系R ,它是( )A 、1NFB 、2NFC 、3NFD 、4NF二、 填空题1、如果模式是BCNF ,则模式R 必定是(3NF ),反之,则( 不一定 )成立。
数据库第5章
视图机制(续)
例:王平叧能检索计算机系学生的信息
先建立计算机系学生的视图CS_Student
CREATE VIEW CS_Student AS SELECT FROM Student WHERE Sdept='CS';
视图机制(续)
在视图上迚一步定义存取权限
GRANT SELECT
ON CS_Student
5.4 完整性约束命名字句
• 完整性约束命名字句定义 • CONSTRAINT <完整性约束条件名> PRIMARY KEY 短 语|FOREIGN KEY 短语|CKECK 短语
例2: 建立学生登记表Student,要求学号在 900000至999999 之间,年龄<30,性别只能是‘男’或‘女’,姓名不能取空。
TO 王平 ;
4.2.7 审计
• 什么是审计
– 审计功能启用一个与用的审计日志(Audit Log),系统自劢将用 户对数据库的所有操作记彔在上面 – DBA可以利用审计日志中的追踪信息,重现导致数据库现有状况 的一系列事件,以找出非法存取数据的人
• 统计数据库的安全性
– 允许用户查询聚集类型的信息(例如合计、平均值等) – 丌允许查询单个记彔信息 例:允许查询“程序员的平均工资是多少?” 丌允许查询“程序员张勇的工资是多少?”
– 受限修改:叧有SC中没有任何元组的Sno=950001时,才能修改 Student表中Sno=950001的元组的Sno值改为960123。 – 置空值修改:将Student表中Sno=950001的元组的Sno值改为 960123。而将SC表中所有Sno=950001的元组的Sno值置为空值。 – 在学生选课数据库中叧有第一种方法是正确的。
数据库复习 第五章 习题
第五章习题一、选择题:1.关系规范化中的删除操作异常是指①,插入操作异常是指②。
A.不该删除的数据被删除B.不该插入的数据被插入C.应该删除的数据未被删除D.应该插入的数据未被插入答案:①A ②D2.设计性能较优的关系模式称为规范化,规范化主要的理论依据是____。
A.关系规范化理论B.关系运算理论C.关系代数理论D.数理逻辑答案:A3.规范化理论是关系数据库进行逻辑设计的理论依据。
根据这个理论,关系数据库中的关系必须满足:其每一属性都是____。
A.互不相关的B.不可分解的C.长度可变的D.互相关联的答案:B4.关系数据库规范化是为解决关系数据库中____问题而引人的。
A.插入、删除异常和数据冗余B.提高查询速度C.减少数据操作的复杂性D.保证数据的安全性和完整性答案:A5.规范化过程主要为克服数据库逻辑结构中的插入异常,删除异常以及____的缺陷。
A.数据的不一致性B.结构不合理C.冗余度大D.数据丢失答案:C6.当关系模式R(A,B)已属于3NF,下列说法中____是正确的。
A.它一定消除了插入和删除异常B.仍存在一定的插入和删除异常C.一定属于BCNF D.A和C都是答案:B7.关系模型中的关系模式至少是____。
A.1NF B.2NF C.3NF D.BCNF答案:A8.在关系DB中,任何二元关系模式的最高范式必定是____。
A.1NF B.2NF C.3NF D.BCNF答案:D9.在关系模式R中,若其函数依赖集中所有候选关键宇都是决定因素,则R最高范式是____。
A.2NF B.3NF C.4 NF D.BCNF答案:C10.当B属性函数依赖于A属性时,属性A与B的联系是____。
A.1对多B.多对1 C.多对多D.以上都不是答案:B11.在关系模式中,如果属性A和B存在1对1的联系,则说____。
A.A→B B.B→A C.A↔B D.以上都不是答案:C12.候选码中的属性称为____。
第5章关系模式的规范化设计
第5章关系模式的规范化设计关系模式的规范化设计(Normalization)是数据库设计中的一个重要步骤,目的是消除冗余数据、提高数据的完整性和一致性,减少数据操作的复杂性和数据的存储空间。
下面将介绍关系模式的规范化设计的原则、规范化的各个阶段和规范化的优缺点。
一、规范化设计的原则规范化设计的原则包括:1.消除冗余数据:即通过将数据分散到多个关系中,避免将相同数据重复存储在多个地方,减少了存储空间的浪费。
2.提高数据的完整性:通过将数据分开存储到多个关系中,可以降低数据的重复性,确保数据的一致性和准确性。
3.简化数据操作:通过将数据分解成多个关系,可以简化数据的操作和维护,提高数据查询和更新的效率。
4.减少数据的存储空间:通过消除冗余数据和提高数据的完整性,可以减少数据的存储空间占用,节省存储资源。
二、规范化设计的各个阶段规范化设计通常分为一般化(First Normal Form,1NF)、第二范式(Second Normal Form,2NF)、第三范式(Third Normal Form,3NF)等多个阶段。
1.一般化:将关系模式中的属性分解成原子属性,即每个属性都是不可再分的单元,消除属性中的重复数据。
同时,每个记录是唯一的,并且属性的顺序也无关紧要。
2.第二范式:在达到一般化的基础上,消除非主属性对主键的部分依赖。
即要求每个非主属性完全依赖于主键。
3.第三范式:在达到第二范式的基础上,进一步消除传递依赖。
即要求每个非主属性只依赖于主键,而不依赖于其他非主属性。
三、规范化设计的优缺点规范化设计的优点包括:1.提高数据的完整性和一致性:通过规范化,可以消除数据的冗余,减少数据的重复性,确保数据的一致性和准确性。
2.简化数据操作:通过规范化,可以将数据分解成多个关系,简化了数据的操作和维护,提高了数据查询和更新的效率。
3.节省存储空间:通过规范化,可以消除冗余数据,减少数据的存储空间占用,节省存储资源。
第5章 关系数据库规范化理论
4. 更新异常(Update Anomalies)
由于存在大量数据冗余,系统要付出很大代价来维护数据库的完整性。 否则就带来数据不一致的危险。比如,当某系的系主任更换后,系统必 须修改与该系学生有关的每个元组。
所谓数据依赖(Data Dependency),是指一 个关系内部属性与属性之间的一种约束关系, 这种约束关系是通过关系中属性间值的相等与 否体现出来的数据间的相互关系。这种数据依 赖是现实世界中属性间相互联系的抽象,是数 据内在的性质,是语义的体现。 数据依赖有很多种,其中最重要的是函数依赖 (Functional Dependency,简称FD)和多值依 赖(Multivalued Dependency,简称MVD)。
5.1.1
问题的提出
现假设有如表5-1所示的关系模式XSCJ的一个具体实例。 表5-1 XSCJ表
Sno S1 S2 S3 S1 Sname 张强 王红 周颖 张强 Sdept 计算机系 电子系 计算机系 计算机系 Director 李军 宋鹏 李军 李军 Cno C01 C01 C01 C02 Cname 数据库 数据库 数据库 数据结构 Cscore 85 90 75 80
下面介绍一些术语和记号。
X→Y,但则称X→Y是非平凡的函数依赖。若不 特别声明,总是讨论非平凡的函数依赖。 X→Y,但YX则称X→Y是平凡的函数依赖。 若X→Y,则X叫做决定因素(Determinant)。 若X→Y,Y→X,则X与Y一一对应,记作X← →Y。 若Y函数不依赖于X,则记作 X Y
5.1.2
函数依赖的基本概念
定义5.1 设R(U)是属性集U上的关系模 式。X,Y是U的子集。 若对于R(U)的任意一个可能的关系r,r 中任意两个元组 t1 和 t2 ,如果 t1[X] = t2 [X],则 t1[Y] = t2[Y] ,那么称X函数地 确定Y,或Y函数地依赖于X ,记作: X→Y。
第5章 数据库及其操作
索引类型 (2)
3.唯一索引 唯一索引文件主要是为了向下兼容而设置,和以 前扩展名.IDX的文件相同。 4.普通索引 普通索引没有上面各种索引的限制,允许字段中 存在重复值。普通索引还可以作为一对多永久关 系中的“多方”,在一个表中可以加入多个普通 索引。 只有唯一索引和普通索引可以存放在独立复合索 引文件和独立单项索引文件.IDX中。
删除索引标识
1.删除结构复合索引文件中的索引标识
对于结构复合索引文件中的索引标识, 可以使用“表设计器”来删除 2.删除独立复合索引文件中的索引标识 3.删除独立单项索引文件 删除独立单项索引文件的命令格式为:
DELETE FILE FILENAME
5.4 数据库的关联
5.4.1 工作区的基本概念 1.工作区编号与别名 2.当前工作区 在某个时刻,当前工作区只能有一个 3.工作区的选择与使用
数据库的修改、打开和关闭
1.数据库的修改 数据库一旦被创建,就可以被修改和使用。 2.数据库的打开 可用“OPEN DATABASE”命令来打开一个数 据库 3. 数据库的关闭 可以使用“CLOSE”命令关闭数据库, CLOSE命令的语法格式如下: CLOSE DATABASE [ALL]
5.2 数据库表的操作
5.1 数据库的创建
VFP有3种创建数据库的方法:利用数据库 向导、数据库设计器和命令创建数据库。 5.1.1 利用“数据库向导”创建数据库 5.1.2 使用“数据库设计器”创建数据库 5.1.3 使用命令创建数据库 在VFP主窗口的【命令】窗口内键入命令 “CREATE DATABASE <数据库名>”,即 可创建一个新的数据库
5.2.3 数据库表的打开和关闭
打开: 打开: 数据库表在打开之前,首先要打开它所在的数据库。打开 数据库表的USE命令语法格式如下: USE[ [[DatabaseName!]TableName | ?] [ALIAS cTableAlias]] 关闭: 关闭: 使用命令关闭数据库表除了USE命令外,还有以下命令: (1) CLEAR ALL:关闭所有打开的数据库和数据表,释放 内存变量。 (2) CLOSE ALL:关闭所有打开的数据库和数据表、设计 器、项目管理器。 (3) CLOSE TABLES:关闭当前数据库中的所有数据表。 (4) QUIT:退出VFP的同时,关闭所有的数据库和数据表
数据库系统概论 第5章
当一个关系模式在连接的过程中没有丢掉有用信息的, 称为无损连接分解否则称为有损连接分解。 3NF的优点就是其总可以在满足无损连接并保持依赖的 前提下得到3NF设计。其缺点是,若没有消除所有的传递 依赖,则必须要用空值来表示数据项间的某些可能有意义 的联系。此外,3NF还存在信息重复的问题。 若必须在BCNF和保持依赖的3NF间作选择的话,通常 倾向于选择3NF。因为若不能有效地检验依赖的保持情况, 我们要么牺牲系统性能,要么破坏数据库中的数据的完整 性,这当然都不好。相比之下,3NF中允许传递依赖造成 少量冗余反到是可以容忍的。所以,我们常选择保持依赖 而放弃BCNF。
假定有一个实际问题,有关系模式: 借书人(姓名,地址,书名,日期) 即 BORROW(NAME,ADDR,TITLE,DATE) 其中:NAME和TITLE是整个模式的关键字(主码)。
NAME 张 平 张 平 张 平 张 平 张 平 张 平 李少林 李少林 ADDR A1 A1 A1 A1 A1 A1 A2 A2 TITLE T1 T2 T3 T4 T5 T6 T3 T7 DATE D1 D2 D3 D4 D5 D6 D4 D7
一个低一级范式的系模式的集合,这种 过程就叫规范化。各种范式之间的关系为:
1NF 2NF
3NF BCNF 4NF
5NF
例:以下两例为非1NF关系。借书人
部门名 部门号
经理
正经理 副经理
张 平 李文化
DN1 DN2
D1 D2
M1 M2
5.2.5 3NF
定义:关系模式R(U,F)中若不存在这样的码X,属 性组Y及非主属性Z(Z Y)使得X→Y(Y→X)Y→Z 成立,则称R(U,F) ∈3NF。 简言之,不存在非主属性部分依赖和传递依赖于 码的第一范式称为第三范式。 从定义中还可得出结论:不存在非主属性的模式 为第三范式。
计算机Visual FoxPro第五章 数据库的基本操作
6
Visual FoxPro
5.1.3 为数据库表建立索引 为了建立表之间的永久关联,需要为数据库表建立索
引。为数据库表建立索引的方法是:选定数据库表,单击数
据库设计器工具栏的修改表按钮,弹出表设计器窗口,在表 设计器窗口单击索引选项卡,在索引名、类型、表达式各栏
依次输入有关内容。
7
Visual FoxPro 5.1.4 建立表之间的永久联系 表之间的永久联系是基于索引建立的一种永久 关系,这种联系被作为数据库的一部分而保存在数 据库中。当在“查询设计器”或“视图设计器”中 使用表时,这种永久联系将作为表间的默认连接条 件保持数据库表之间的联系。 表之间的永久联系在数据库设计器中显示为表 索引之间的连接线。操作方法是:在数据库设计器 对话框,首先,用鼠标左键选中父表中的主索引字 段,保持按住鼠标左键,并拖至与其建立联系的子 表中的对应字段处,再松开鼠标左键,数据库中的 两个表间就有了一个连线,其永久关系就已建立完 成。
9
Visual FoxPro 如果需要编辑修改已建立的联系,可首先单击 关系连线,此时连线变粗,然后从“数据库”菜单 项中选择“编辑关系”命令。或者用鼠标右键单击 连线,从弹出的快捷菜单中选择“编辑关系”或
“删除关系”命令。或者双击连线,打开“编辑关
系”对话框,在该对话框中,通过在下拉列表框中
重新选择表或相关表的索引名则可以修改指定的关
23
Visual FoxPro 2.数据库的关闭 格式是: CLOSE [ALL|DATABASE] 其中ALL用于关闭所有对象,如数据库、表、索引等。 DATABASE用于关闭当前数据库和数据库表。
24
Visual FoxPro 5.2.2 数据库的修改 其格式是: MODIFY DATABASE [<数据库文件名> | ?]
第5章 关系数据库设计理论_2
关系模式的好与坏,用什么标准衡量?这个标准就是模式的 范式(Normal Forms,简记为NF)。范式的种类与数据依 赖有着直接的联系,基于FD的范式有1NF、2NF、3NF、 BCNF等多种。 根据满足约束条件的级别不同, 范式由低到高分为1NF,2NF,3NF,BCNF,4NF,5NF等。 1NF是关系模式的基础;2NF已成为历史,一般不再提及; 在数据库设计中最常用的是3NF和BCNF。为了叙述的方便, 我们还是从1NF、2NF、3NF、BCNF顺序来介绍。 关系模式的规范化:把一个低一级的关系模式分解为高一级 关系模式的过程。
5.5.5 规范化
关系数据库的规范化理论是数据库逻辑 设计的工具。 一个关系只要其分量都是不可分的数据 项,它就是规范化的关系,但这只是最 基本的规范化。 规范化程度可以有多个不同的级别
规范化程度过低的关系不一定能够很好地描述
现实世界,可能会存在插入异常、删除异常、
修改复杂、数据冗余等问题
例 :分解算法1例 关系模式CTHRSG,要保 持函数依赖达到3NF。
解:关系模式CTHRSG的最小函数 依赖集F={C→T,CS→G,HR→C, HS→R,TH→R}。该模式可以保 持函数依赖地分解为如下一 组3NF的关系模式:ρ={CT,CSG, CHR,HSR,HRT}。
非规范化表格和规范化表格
5.5.2 第二范式(2NF)
定义 如果A是关系模式R的候选键中属性,那么称A 是R的主属性;否则称A是R的非主属性。
定义4.16 如果关系模式R是1NF,且每个非主属性 完全函数依赖于候选键,那么称R是第二范式(2NF) 的模式。如果数据库模式中每个关系模式都是2NF, 则称数据库模式为2NF的数据库模式。
第5章 数据库的基本操作
3.数据库与表
5.2.2 在数据库中建立表
例6:在已创建的D:\XSCJGL\DB\CJGL.DBC数据库 中建立学生信息表XSXI.DBF(表的结构参见第四 章),要求存储在D:\XSCJGL\DB\TABLES文件夹 下。
5.2.3 向数据库添加自由表
例7:将自由表KCXI.DBF添加到CJGL.DBC数据库 中。
3.以命令方式设置当前数据库
设置当前数据库,可使用下面的SET命令。 如SET DATABASE TO CJGL,表示将 CJGL.DBC设置为当前数据库。 格式:SET DATABASE TO[<数据库名>] 功能:指定已打开的某一数据库为当前数据库。 说明:如果省略数据库名,将取消当前数据库 的设置,即所有打开的数据库均不为当前数据 库。
4.以命令方式关闭数据库
格式:CLOSE DATABASES[ALL] 功能:关闭当前数据库和它包含的表; 若没有当前数据库,将关闭所有工作区中打开 的自由表和索引; 若命令中包含ALL选项,将关闭所有打开的数 据库及其包含的表,并关闭相关的索引文件和 格式文件。
5.以命令方式修改数据库
&&建立索引标识为XBBJ的惟一索引,该索引标识追加到XSXI.CDX文件
3.索引的使用
(1)索引文件的打开与关闭 格式:SET INDEX TO [<索引文件列表 >|?][ADDITIVE] 功能:打开当前表的一个或多个索引文件。这 里的索引文件类型指的是单索引文件或非结构 化复合索引文件。
&&按学号相等建立当前表与成绩信息表的一对多关系
接下来,执行下面的命令: SELECT A BROWSE &&浏览成绩信息表 SELECT B BROWSE &&浏览学生信息表
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
ASSIGN_NUM ASSIGN_DATE PRJ_NUM
EMP_NUM ASSIGN_HOURS
§ 5.1.5 数据表和规范化 — 改进的设计 续
§ 5.2 规范化和数据库设计
为了确解说明规范化在设计过程中的作用,我们从概念 设计的角度说明建筑公司简单业务的数据库设计过程 .
商务规则:
公司管理很多工程。 每一个工程要求很多雇员。 一个雇员可以分配到几个不同的工程。 一些雇员没有分配到工程处,而且执行与工程不是特别相关的任务。 一些雇员是劳动供应源的一部分,所有工程组都需要他们的服务工作。 例如,公司的管理文书不分配到任何一个具体的工程。 每一个雇员具有一个(单个)主要的工作种类。这个工作种类决定 每小时开单率。 很多雇员的工作种类可能相同。例如公司雇用一个以上的电工。
§ 5.1.4 数据表和规范化 — 转换为第三范式 续
PRJ_NUM PRJ_NAME
表名:PROJECT
EMP_NUM EMP_NAMEJOB_CLASS
JOB_CLASS CHG_HOUR
表名:EMPLOYEE
表名:JOB
EMP_NUM PRJ_NUM
ASSIGN_HOURS
表名:ASSIGN
§ 5.1.4 数据表和规范化 — 转换为第三范式 续
术语3NF(第三范式,third normal form): 它属于2NF。 它不包括传递依赖。
§ 5.1.5 数据表和规范化 — 改进的设计
依靠规范化我们消除了数据冗余,但是我们不能仅仅 依赖规范化做出好的设计,现在我们来看看如何在规范化的 基础上提高数据库的操作性能和提供数据的能力。 PK分配 命名约定 属性原子性 添加属性 精制PK
§ 5.1.3 数据表和规范化 — 转换为第二范式
1NF到2NF的转换很简单:从上图所示的1NF格式开始, 完成下面的步骤:
步骤1:标识所有键标组件
PROJ_NUM EMP_NUM PROJ_NUM EMP_NUM 每一个组件将成为新表中的键标。换句话说,原始表现在分成了3个表。我 们把这些表分别叫做PROJECT,EMPLOYEE和ASSIGN。
§ 5.1.2 数据表和规范化 — 转换为第一范式 续
术语1NF(第一范式,first normal form)描述了表格式, 在表格式中:
定义了所有键标属性。 表中没有重复组。换句话说,每一行/列插入仅可以包括一 个值,而不是一组值。 所有属性都依赖于主键标。
所有的关系表都满足1NF,该范式的问题是包括了部分依 赖,也就是说,只基于键标一部分的依赖。
第5章 数据库表的规范化
主要学习内容 - 什么是规范化,以及它在数据库设计中的作用 - 范式1NF、 2NF、 3NF - 范式如何从低范式转换为高范式 - 规范化和ER建模被同时用来生成优秀的数据库设计 - 要求非规范化以有效生成信息的情况
§ 5.1 数据表和规范化
表是数据库设计过程中的基本构件。规范化 (normalization)是估算并校正表结构以使数据冗余最 小化的过程,它可以帮助消除数据异常。 规范化通过叫做“范式”的一组平台进行工作。前3个平 台记述为第一范式(1NF)、第二范式(2NF)、第三范 式(3NF)。 从结构的观点来看,2NF优于1NF,而3NF优于2NF。出 于大多数商务数据库设计目的考虑,在规范化过程中对 3NF的需要最多。 实际应用中会涉及规范化和非规范化的权衡。
依赖图(dependency diagram)
PRJ_NUM PRJ_NAME EMP_NUM EMP_NAMEJOB_CLASSCHG_HOUR
HOURS
传递依赖 部分依赖 部分依赖
部分依赖(partial dependencies):只基于复合主键标的一 部分的依赖。 传递依赖(transitive dependency):一个非主属性对于另 一个非主属性的依赖
步骤2:标识依赖属性
3个新表PROJECT,EMPLOYEE和ASSIGN可以描述如下: PROJECT(PROJ_NUM,PROJ_NAME) EMPLOYEE(EMP_NUM,EMP_NAME,JOB_CLASS,CHG_HOUR) ASSIGN(PROJ_NUM,EMP_NUM,ASSIGN_HOURS)
术语2NF(第二范式,second normal form): 它属于1NF。 它不包括部分依赖;也就是说,没有属性只依赖于主键标 的一部分 由于只有表的主键标由几个属性组成时,部分依赖才存 在,所以主键标只有单个属性组成的表属于1NF,那么他就 自动属于2NF。 属于2NF的表仍可能显示出传递依赖;也就是说,一个 或多个属性可以在功能上依赖于非键标属性。
§ 5.3 非规范化
尽管规范化关系的创建是很重要的数据库设计目标, 但它只是很多这样的目标中的一个。优秀的数据库设计还要考 虑处理要求。当分解表来符合规范化要求时,数据库表的数量 增加。加入更多数量的表占用了额外的磁盘输入/输出(I/O) 操作和处理逻辑,因此减慢了系统速度。为了加快处理速度, 可能有非常偶然的情况允许一定程度上非规范化。 请记住必须仔细权衡更快处理速度的好处与数据异常 的弊端。另一方面,一些异常只是在理论上引起注意。例如, 处于现实世界数据库环境中的人们需要担心在主键标是顾客编 号的CUSTOMER表中,ZIP_CODE决定CITY吗?为了消除 CUSTOMER表中的传递依赖,生成下面的分割表确实实用吗? ZIP(ZIP_CODE, CITY) 我们的建议:在规范化过程中使用一些常识。
表名:PROJECT 表名:JOB
PRJ_NUM PRJ_NAME EMP_NUM
JOB_CODE
JOB_DESCRIPTION
JOB_CHG_HOUR
§ 5.1.5 数据表和规范化 — 改进的设计 续
表名:EMPLOYEE
EMP_NUM EMP_NAMEJOB_CLASS
— 命名的原子性 — 添加属性
§ 5.1.2 数据表和规范化 — 转换为第一范式
步骤1:消除重复组 先从介绍表格式中的数据开始,在表格式中,每个单元格都有单个值, 而且没有重复组。为了消除重复组,通过确保每一个重复组属性包括一个合 适的数据值来消除空值。
步骤2:标识键标 为了保持惟一标识任何属性值的正确的主键标,新键标必须由 PROJ_NUM和EMP_NUM的组合组成
§ 5.1.4 数据表和规范化 — 转换为第三范式
通过完成下面的3个步骤,可以很容易地消除由图5-4中 所示的数据库体系结构引起的数据异常: 步骤1:标识每一个新的行列式(determinant) 对于每一个传递依赖,将它的行列式写为新表的PK(行 列式是它的值确定行中其他值的任何属性) 步骤2:标识依赖属性, 标识依赖于步骤1中所标识的每一个行列式的属性,并标 识依赖。在本例中,写为:JOB_CLASS —>CHG_HOUR, 命名表来反映它的内容和功能。在本例中,JOB似乎是合适 的。 步骤3:从传递依赖中消除依赖属性 从具有这样的传递关系的每一个表中消除传递关系(一 个或多个)中的所有依赖属性。
表名:PROJECT
表名:JOB
PRJ_NUM PRJ_NAME
JOB_CLASS CHG_HOUR
— 添加属性
— PK分配 — 命名约定
表名:PROJECT
表名:JOB
PRJ_NUM PRJ_NAME EMP_NUM
JOB_CODE
JOB_DESCRIPTION
JOB_CHG_HOUR
§ 5.1.5 数据表和规范化 — 改进的设计
§ 5.1 数据表和规范化 — 规范化需要
§ 5.1.1 数据表和规范化 — 规范化需要 续
报表中的总费用为派生值,它没必要存储在数据表中。
§ 5.1.1 数据表和规范化 — 规范化需要 续
但该表与关系数据库要求不符合,而且在数据处理 方面做的不好: 主键标包括空值 表项目引起数据不一致。例如,可以将JOB_CLASS值 “Elect. Engineer”输入为“Elect. Eng”。 表显示了数据冗余。从而生成了下面的异常: — 更新异常 — 插入异常 —删除异常
EMP_NUM
EMP_LNAME EMP_FNAME EMP_INITIAL EMP_HIREDATE
JOB_CODE
§ 5.1.5 数据表和规范化 — 改进的设计 续
§ 5.1.5 数据表和规范化 — 改进的设计 续
表名:ASSIGN
EMP_NUM PRJ_NUM ASSIGN_HOURS
— 精制PK
步骤3:标识所有依赖,步骤2中PK的标识意味着你已经标识了下面的依赖: PROJ_NUM,EMP_NUM —> PROJ_NAME,EMP_NAME, JOB_CLASS,CHG_HOUR,HOURS PROJ_NUM —> PROJ_NAME
§ 5.1.2 数据表和规范化 — 转换为第一范式
§ 5.1.2 数据表和规范化 — 转换为第一范式 续
§ 5.1.3 数据表和规范化M PRJ_NAME
表名:PROJECT
EMP_NUM EMP_NAMEJOB_CLASSCHG_HOUR 表名:EMPLOYEE
传递依赖
EMP_NUM PRJ_NUM
ASSIGN_HOURS
表名:ASSIGN
§ 5.1.3 数据表和规范化 — 转换为第二范式 续