数据库范式与关系模式示例
- 格式:doc
- 大小:288.00 KB
- 文档页数:21
数据库范式1NF2NF3NFBCNF(实例)通俗易懂的讲解本⽂对⼤多数初学数据库原理的同学绝对是个⼤福利,哈哈,完完整整的看完此篇博⽂⼀定能够清晰地理解数据库的四⼤范式。
不懂者留⾔相互讨论。
设计范式(范式,数据库设计范式,数据库的设计范式)是符合某⼀种级别的关系模式的集合。
构造数据库必须遵循⼀定的规则。
在关系数据库中,这种规则就是范式。
关系数据库中的关系必须满⾜⼀定的要求,即满⾜不同的范式。
⽬前关系数据库有六种范式:第⼀范式(1NF)、第⼆范式(2NF)、第三范式(3NF)、第四范式(4NF)、第五范式(5NF)和第六范式(6NF)。
满⾜最低要求的范式是第⼀范式(1NF)。
在第⼀范式的基础上进⼀步满⾜更多要求的称为第⼆范式(2NF),其余范式以次类推。
⼀般说来,数据库只需满⾜第三范式(3NF)就⾏了。
下⾯我们举例介绍第⼀范式(1NF)、第⼆范式(2NF)和第三范式(3NF)。
在创建⼀个数据库的过程中,范化是将其转化为⼀些表的过程,这种⽅法可以使从数据库得到的结果更加明确。
这样可能使数据库产⽣重复数据,从⽽导致创建多余的表。
范化是在识别数据库中的数据元素、关系,以及定义所需的表和各表中的项⽬这些初始⼯作之后的⼀个细化的过程。
下⾯是范化的⼀个例⼦ Customer Item purchased Purchase price Thomas Shirt $40 Maria Tennis shoes $35 Evelyn Shirt $40 Pajaro Trousers $25如果上⾯这个表⽤于保存物品的价格,⽽你想要删除其中的⼀个顾客,这时你就必须同时删除⼀个价格。
范化就是要解决这个问题,你可以将这个表化为两个表,⼀个⽤于存储每个顾客和他所买物品的信息,另⼀个⽤于存储每件产品和其价格的信息,这样对其中⼀个表做添加或删除操作就不会影响另⼀个表。
关系数据库的⼏种设计范式介绍1 第⼀范式(1NF)在任何⼀个关系数据库中,第⼀范式(1NF)是对关系模式的基本要求,不满⾜第⼀范式(1NF)的数据库就不是关系数据库。
数据库范式分解例题及解析数据库范式是一种设计数据库表结构的理论,旨在减少数据冗余并确保数据的一致性和完整性。
数据库范式分解是指将一个不符合范式要求的关系模式分解成若干个符合范式要求的关系模式的过程。
下面我将以一个简单的例题来解析数据库范式分解的过程。
假设有一个学生信息管理系统,其中有一个包含学生姓名、年龄、性别和所在班级的关系模式(表)StuInfo。
现在我们来分解这个关系模式,使其符合第三范式(3NF)的要求。
首先,我们观察到StuInfo表中存在部分数据冗余。
比如,一个班级内可能有多个学生,如果将班级信息也包含在StuInfo表中,就会导致班级信息的重复。
因此,我们需要将班级信息从StuInfo表中分离出来,创建一个新的班级信息表ClassInfo,包含班级ID和班级名称两个字段。
接下来,我们需要考虑学生信息之间的函数依赖关系。
假设学生姓名和年龄之间存在函数依赖关系,即一个学生的姓名唯一确定其年龄,那么我们需要将这部分数据分离出来,创建一个新的学生信息表Student,包含学生ID、姓名和年龄三个字段。
最后,我们再来看性别字段。
由于性别是一个固定的取值范围(男或女),不会因为其他属性的变化而改变,因此性别并不依赖于其他属性。
所以,性别字段可以留在StuInfo表中,不需要再进行分解。
通过以上分解过程,我们将原来的StuInfo表分解为了三个符合3NF的表,Student表、ClassInfo表和经过部分分解的StuInfo 表。
这样的设计能够减少数据冗余,确保数据的一致性和完整性,提高数据库的性能和可维护性。
总的来说,数据库范式分解是一个重要的数据库设计过程,通过合理的分解可以使数据库表结构更加规范化,减少数据冗余,确保数据的一致性和完整性。
在实际应用中,需要根据具体的业务需求和数据特点来进行范式分解,以达到最佳的数据库设计效果。
3nf关系模式例子
假设我们有一个关于公司员工的数据库。
我们希望设计一个符合第三范式(3NF)的关系模式。
以下是一个例子:
员工(员工号,姓名,出生日期,性别,电话号码,邮件地址)部门(部门号,部门名称,部门经理)
岗位(岗位ID,岗位名称,薪水)
员工部门(员工号,部门号,开始日期,结束日期)
员工岗位(员工号,岗位ID,开始日期,结束日期)
通过上述关系模式,我们可以分解数据,将其存储在多个表中,以减少数据冗余和提高数据一致性。
每个表都有一个主键,确保数据的唯一性。
员工表包含有关员工的基本信息,部门表包含有关部门的信息,岗位表包含有关岗位的信息。
员工部门表和员工岗位表则用于表示员工与部门以及员工与岗位之间的关系,同时还包含了关联的时间信息。
这就是一个符合第三范式的关系模式的例子。
通过这种设计,我们可以更好地组织和管理数据,并确保数据的准确性和一致性。
设有一教学管理数据库,其属性有:学号(Sno),课程号(Cno),成绩(G),任课教师(TN),教师所在系(D),已知每门课程只有一位任课教师,但每位
教师可以教多门课程,所有系都有教师,没有哪个系没有教师;教师中没有重名,每个教师只属于一个系。
(1)若将以上属性全部放在同一个关系表中,请确定此关系的主码。
(2)找出其中的所有函数依赖。
(3)判断此关系属于第几范式。
(4)对此关系进行规范化分解达到3NF。
有关系模式STUDENT(s_id ,s_name ,d_id , d_name ,c_id ,score),s_id 是学号,s_name是姓名,d_id是学生所在的部门号,d_name是部门名,c_id是课程号,score是课程成绩。
1.其中主码是?
2.找出所有的函数依赖关系。
3.该关系模式是属于第几范式?为什么?
4.如果将STUDENT分解为:
SC(s_id , c_id , score) 和 S_SD(s_id , s_name , d_id , d_name) 问S_SD这个关系模式属于第几范式?为什么?。
关系模式的范式
1. 第⼀范式
第⼀范式是最基本的规范形式,即关系中每个属性都是不可再分的简单项。
定义如果关系模式R所有的属性均为简单属性,即每个属性都是不可再分的,则称R属于第⼀范式,简称1NF,记住R属于1NF。
把满⾜1NF的关系称为规范化。
在关系数据库系统中只讨论规范化的关系,凡是⾮规范化的关系模式必须转化成规范化的关系。
因此,1NF是关系模式应具备的最起码的条件。
在⾮规范化的关系中去掉组合项就能转化成规范化的关系。
⼀个关系模式仅仅属于第⼀范式是不适⽤的。
它可能具有⼤量的数据冗余,存在插⼊异常、删除异常和更新异常等弊端。
2. 第⼆范式
定义如果关系模式R属于1NF,且每个⾮主属性都完全函数依赖于R的主关系键,则R属于第⼆范式,简称2NF,记作R属于2NF。
两个结论:
(1)从1NF关系中消除⾮主属性对关系键的部分函数依赖,则可得到2NF关系;
(2)如果R的关系键为单属性,或R的全体属性均为主属性,则R属于2NF。
仍然存在着下⾯⼀些问题:
(1)数据冗余
(2)插⼊异常
(3)删除异常
(4)更新异常
3. 第三范式
定义如果关系模式R属于2NF,且每个⾮主属性都不传递函数依赖于R的主关系键,则称R属于第三范式,简称3NF,记作R属于3NF。
数据库三大范式举例理解
数据库三大范式是指在数据库设计中,通过规范化设计,确保数据库表结构的合理性
和一致性。
三大范式是从第一范式(1NF)开始逐步优化实现的,每一级范式的约束条件都是在前一级基础上建立的。
第一范式(1NF):原子性
第一范式要求每一列都具有原子性,即每一列的数据都是不可拆分的最小单元。
如果
一列数据可以细分成更小的数据单元,就需要将其拆分成不同的列。
例如,一个订单表中
的“商品名称”列如果包含多个商品名字,就应该把它拆分成多个单独的“商品名称”列。
这样可以保证数据的精确性和可用性。
第二范式要求每个非主键列完全依赖于主键,而不是部分依赖于主键。
即,一个表中
的每个非主键列只与主键有关,而不受其他非主键列影响。
例如,一个订单表中,包含商
品ID、商品名称、商品价格、订单数量等信息。
这时候,商品名称和商品价格这两个属性只与商品ID有关,与订单数量无关,因此需要把它们拆分成另一张表,以确保表中的数据不重复,避免出现数据冗余和不一致的情况。
第三范式(3NF):消除传递依赖
综上所述,数据库三大范式是数据库设计过程中的基本原则,依次达到三大范式可以
提高数据库表结构的合理性和一致性,使数据查询和管理更加方便和高效。
数据库范式例题范式是一种关系型数据库设计的规范,它是通过对表结构进行优化来消除冗余数据、提高数据存储和操作的效率的。
常见的数据库范式有1NF、2NF、3NF等。
以下是一个例题:假设我们有一个学生信息表,包含以下字段:- 学生编号(Student_ID)- 姓名(Name)- 性别(Gender)- 年龄(Age)- 班级编号(Class_ID)- 班级名称(Class_Name)- 班主任姓名(Teacher_Name)这个表中存在冗余数据,比如班级编号、班级名称和班主任姓名都与班级相关,而不是与学生本身相关。
因此,可以使用范式将这个表优化为更好的结构。
首先,我们可以使用第一范式(1NF)来消除重复的数据,把表分成两个表:学生表和班级表。
学生表包含以下字段:- 学生编号(Student_ID)- 姓名(Name)- 性别(Gender)- 年龄(Age)- 班级编号(Class_ID)班级表包含以下字段:- 班级编号(Class_ID)- 班级名称(Class_Name)- 班主任姓名(Teacher_Name)接下来,我们可以使用第二范式(2NF)来消除部分依赖,即确保每个非主键字段完全依赖于主键。
在学生表中,班级名称和班主任姓名都只与班级相关,因此我们可以把它们从学生表中移除,放到班级表中。
最后,我们使用第三范式(3NF)来消除传递依赖,即确保每个非主键字段都不依赖于其他非主键字段。
在班级表中,班主任姓名只与班级编号相关,而不是与班级名称相关,因此我们可以把班主任姓名从班级表中移到另一个表中。
最终,我们将这个结构优化为三个表:学生表包含以下字段:- 学生编号(Student_ID)- 姓名(Name)- 性别(Gender)- 年龄(Age)- 班级编号(Class_ID)班级表包含以下字段:- 班级编号(Class_ID)- 班级名称(Class_Name)教师表包含以下字段:- 班级编号(Class_ID)- 班主任姓名(Teacher_Name)通过以上的优化,我们消除了冗余数据、提高了存储和操作的效率,并且让数据库结构更加清晰和规范。
补充讲义一、范式举例BCNF.如:课程号与学号)例4:R(X,Y,Z),F={XY->Z},R为几范式?BCNF。
例5:R(X,Y,Z),F={Y->Z,XZ->Y},R为几范式?3NF。
R的候选码为{XZ,XY},(R中所有属性都是主属性,无传递依赖)二、求闭包数据库设计人员在对实际应用问题调查中,得到的结论往往是零散的、不规范的(直观问题好办,复杂问题难办了),所以,这对分析数据模型,达到规范化设计要求,还有差距,为此,从规范数据依赖集合的角度入手,找到正确分析数据模型的方法,以确定关系模式的规范化程度。
例1.已知关系模式R(U、F),其中,U={A,B,C,D,E}; F={AB→ C, B→ D, EC → B , AC→B} ,求(AB)+F.解:设X(0)=AB○1计算X(1),在F中找出左边为AB子集的FD,其结果是:AB→C,B→D∴X(1)=X(0)UB=ABUCD=ABCD 显然,X(1)≠X(0)○2计算X(2),在F中找出左边为ABCD子集的FD,其结果是:C→E,AC→B∴X(2)=X(1)UB=ABCDUBE=ABCDE 显然,X(2)=U所以,(AB)+ F=ABCDE.(等于U,所以AB是唯一候选关键字)例2.设有关系模式R(U、F),其中U={A,B,C,D,E,I};F={A→D,AB→E,B→E,CD→I,E→C},计算(AE)+解:令X={AE},X(0)=AE○1在F中找出左边是AE子集的FD,其结果是:A→D,E→C∴X(1)=X(0)UB=X(0)UDC=ACDE 显然,X(1)≠X(0)○2在F中找出左边是ACDE子集的FD,其结果是:CD→I∴X(2)=X(1)UI=ACDEI显然,X(2)≠X(1),但F中未用过的函数依赖的左边属性已含有X(2)的子集,所以不必再计算下去,即(AE)+=ACDEI.因为,X(3)=X(2),所以,算法结束。
三、求最小依赖集最小依赖集是对函数依赖集合进行规范的结果,这样才能对一般关系模式进行准确分析。
例1.设函数依赖集F={AB→CE,A→C,GP→B,EP→A,CDE→P,HB→P,D→HG,ABC→PG},求与F等价的最小函数依赖集。
解:○1将F中依赖右部属性单一化:F1= AB AB→EHB→P A→CD→H GP→BD→G EP→AABC→P CDE→PABC→G○2由于有A→C,所以AB→C为多余成份:所以F2= AB→E HB→PA→C D→HGP→B D→GEP→A ABC→PCDE→P ABC→G○3经过分析认为F2中无多余依赖,则:Fmin=F2为最小函数依赖集。
即Fmin={ AB→E ,HB→P, A→C ,D→H, GP→B ,D→G, EP→A , ABC→P,CDE→P,ABC→G}.例2.已知F={A→B,B→A,B→C,A→C,C→A},求Fmin.解:○1F1= A→B A→CB A B→CC A○2Fmin1= A→B A→CB→A C→AFmin2= A→B C→AB→C例3.已知F={A→C,C→A,B→AC,D→AC},求Fmin。
解:○1将F中依赖的右部属性单一化:F1= A→C C→AB→A B→CD→A D→C○2由于B→A,A→C,所以B→C是多余成份。
又由于D→A,A→C,所以D→C是多余成份。
所以F2= A→C C→AB→A D→A因为F2中所有依赖的左部都是单属性,所以不存在依赖左部的有多余属性。
所以Fmin=A→C C→AB→A D→A即Fmin={A→C,C→A,B→A ,D→A}.例4.设有关系模式R(U,F),其中:U={E,F,G,H},F={E→G,G→E,F→EG,H→EG,FH→E},求F 的最小依赖集。
解:○1将F中依赖右部属性单一化:F1= E→G HG→E HF→E FHF→G○2由于有F→E,FH→E为多余成份:(不是因为有H→E,而是,F后面加一个H和不加一样)所以F2= E→G H→EG→E H→GF→E F→G○3由于F2中,F→E和F→G以及H→E和H→G之一为多余,则:Fmin1={E→G,G→E,F→G,H→G}Fmin2={E→G,G→E,F→E,H→E} Fmin3,Fmin4同理。
四、求候选码1. 候选关键字求解理论对于给定的关系R(A1,A2,…,An)和函数依赖集F,可将其属性分为四类:●L类:仅出现在F的函数依赖左部的属性●R类:仅出现在F的函数依赖右部的属性●N类:在F的函数依赖左右两边均未出现的属性●LR类:在F的函数依赖左右两边均出现的属性定理1:对于给定的关系模式R及其函数依赖集F,若X(X∈R)是L类属性,则X必为R 的任一候选关键字成员。
推论1:对于给定的关系模式R及其函数依赖集F,若X(X∈R)是L类属性,且X包含了R 的全部属性,则X必为R的唯一候选关键字。
定理2:对于给定的关系模式R及其函数依赖集F,若X(X∈R)是R类属性,则X不在任何候选关键字中。
定理3:设有关系模式R及其函数依赖集F,若X是R的N类属性,则X必包含在R的任一候选关键字中。
推论2:对于给定的关系模式R及其函数依赖集F,若X是R的N类和L类组成的属性集,且X+包含了R的全部属性,则X必为R的唯一候选关键字。
2. 单属性依赖集图论求解法(多属性不行)I:关系模式R,R的单属性函数依赖集F。
O:R的所有候选关键字。
算法:○1求F的最小依赖集Fmin。
○2构造FDG(函数依赖图)。
○3从图中找出关键属性集X(X可为空)。
○4查看G中有无独立回路,若无则输出X即为R的唯一候选关键字,转○6,若有,则转○5。
○5从各独立回路中各取一结点对应的属性与X组合成一候选关键字,并重复这一过程取尽所有可解的组合,即为R的全部候选关键字。
○6结束。
3.多属性依赖集候选关键字求解法I:关系模式R及其函数依赖集F。
O:R的所有候选关键字。
算法:○1将R的所有属性分为L,R,N和LR四类,并令X代表L,N两类,Y代表LR类。
○2求X+,若X包含了R的全部属性,则X即为R的唯一候选关键字,转○5,否则,转○3。
○3在Y中取一属性A,求(XA)+.若它包含了R的全部属性,则转○4,否则,调换一属性反复进行这一过程,直到试完所有Y中的属性。
○4若已找出所有候选关键字,则转○5,否则在Y中依次取2个,3个…,求它们的属性闭包,直到其闭包包含R的全部属性。
○5停止,输出结果。
例1.设R=(O,B,I,S,Q,D),F={S→D,D→S,I→B,B→I,B→O,O→B},求R的所有候选关键字。
解:○1Fmin={ S→D,D→S,I→B,B→I,B→O,O→B}.○2构造FDG.○3关键属性集{Q}. (原始点和孤立点统称关键点。
)○4有两个独立回路,SDS,IBOBI.所以R的所有候选关键字为:QSI,QSB, QSO,QDI,QDB,QDO.例2. 设R={X,Y,Z},F={X→Y,Y→X},求R的所有候选关键字。
解:○1Fmin={X→Y,Y→X}。
○2构造FDG○3关键属性{Z}.○4有1个独立回路,1).候选关键字个数=各独立回路中结点个数乘积=2 (1个回路,2个结点)。
2).候选关键字所含属性个数=关键属性个数+独立回路个数=1+1=2。
所以R的所有候选关键字为:ZX,ZY.例3.设有关系模式R(A,B,C,D),其函数依赖集F={D→B,B→D,AD→B,AC→D},求R的所有候选关键字。
解:经考虑F发现,A,C两属性是L类属性,由定理知,AC必是R的一候选关键字字成员。
又因(AC)+=ABCD,所以AC是R的唯一候选关键字。
例4.设有关系模式R(A,B,C,D,E,P),F={A→D,E→D,D→B,BC→D,DC→A},求R的所有候选关键字。
解:经考察发现,C,E两属性是L类属性,故C,E必在R的任何候选关键字中,又P 是N类属性,故P也必在R的任何候选关键字中。
又因(CEP)+=ABCDEP 所以CEP是R的唯一候选关键字。
五、模式分解对存在数据冗余、插入异常、删除异常问题的关系模式,应采取将一个关系模式分解为多个关系模式的方法进行处理。
在分解处理中会涉及一些新问题,为使分解后的模式保持原模式所满足的特性,要求分解处理具有无损联接性和保持函数依赖性。
即分解后的关系模式子集,应能通过自然连接运算恢复原状。
1、关系模式规范化时一般应遵循以下原则:(1)关系模式进行无损连接分解。
关系模式分解过程中数据不能丢失或增加,必须把全局关系模式中的所有数据无损地分解到各个子关系模式中,以保证数据的完整性。
(2)保持原来模型的函数依赖关系。
因为这些函数依赖关系是数据模型反映的客观事物的固有属性,一般是不能舍弃的。
(3)合理选择规范化程度。
考虑到存取效率,低级模式造成的冗余度很大,既浪费了存储空间,又影响了数据的一致性,因此希望一个子模式的属性越少越好,即取高级范式;若考虑到查询效率,低级范式又比高级范式好,此时连接运算的代价较小,这是一对矛盾,所以应根据情况,合理选择规范化程度。
2、对模式分解的两个基本要求:模式分解可以提高关系模式的规范化程度,但是必须考虑如下问题:○1避免信息丢失:简单的说,就是模式R分解为R1,R2,…,Rn后,将R1,R2,…Rn自然连接还应该等于模式R。
这就是“无损失联接”准则。
○2避免数据关系丢失:简单地说,就是模式R分解为R1,R2,…,Rn后,函数依赖集合F也被对应分解为F1,F2,…,Fn,应满足F与各Fi(i=1,2,…n)的并集等价,即满足F+=(UFi )+ 。
这就是“保持函数依赖”准则。
关系模式的规范化过程是通过对关系模式的分解来实现的,但是把低一级的关系模式分解为若干个高一级关系模式的方法并不是唯一的。
在这些分解方法中,只有能够保证分解后的关系模式与原关系模式等价的方法才有意义。
3、关系模式分解的三个定义:(1)分解具有“无损联接性”。
(2)分解要“保持函数依赖”。
(3)分解既要“保持函数依赖性”,又要具有“无损连接性”。
规范化理论提供了一套完整的模式分解算法,按照这套算法可以做到:●若要求分解具有无损联接性,那么模式分解一定能够达到4NF。
●若要求分解保持函数依赖,那么模式分解一定能够达到3NF,但不一定能达到BCNF。
●若要求分解具有无损联接性又保持函数依赖,则模式分解一定能够达到3NF,但不一定能达到BCNF。
我们希望最好能够既要“保持函数依赖”,又要具有“无损联接性”,从上面结论可以看到只能达到3NF,至于能否达到BCNF或更高,要看具体情况。
这就是在数据库设计中一般采用“基于3NF的数据设计方法”的根本原因。
4、模式设计方法的原则:关系模式R相对于函数依赖集F分解成ρ={R1,R2,…Rk},应具有以下特性:(1) ρ中每个关系模式Ri上应有某种范式性质(3NF或BCNF)(2) 无损联接(3) 保持函数依赖集(4) 最小性(ρ中模式个数应最少和模式中属性总数应最少)一个好的设计方法应符合下列3个原则:表达性,分离性,最小冗余性。