关系型数据库的几点笔记

本文详细介绍了关系型数据库设计中的各种范式,包括第一范式至第五范式,强调了原子性、函数依赖、非传递依赖、多值依赖和连接依赖的概念,并通过实例说明如何应用这些规则以减少数据冗余和保证数据完整性。
摘要由CSDN通过智能技术生成

关系型数据库中表的设计规则

提到关系型数据库,常常能听到xx范式的说法,首先我打算尽量用简短的词句描述它们。

1、第一范式(1NF):原子性。数据库的表中的每一列都是不可再分的。

2、第二范式(2NF):完全函数依赖。满足1NF,数据表中的每一列(主键除外)都完全依赖于整个主键。

3、第三范式(3NF):非传递依赖。满足2NF,数据表中的非主键之间无任何依赖关系。

4、巴科斯范式(BCNF):无冗余。满足3NF,数据表中的所有决定因素都包含候选键1

5、第四范式(4NF):多值依赖。满足BCNF,数据表中的所有非平凡2且非函数依赖的多值依赖的决定因素都包含候选键。

6、第五范式(5NF):连接依赖3。满足4NF,关系模式中的每一个连接依赖都必须由关系的候选键所隐含。

下面具体的解释一下上述内容所表示的含义,同时附带一下易于理解的例子。

1、1NF:第一范式要求确保数据表中的每一列都是不可分割的基本数据项,同一列不能有多个值,同一属性也不能重复,如有重复,则需要为重复的属性新建实体,新实体与原实体为一对多的关系。每一行只能包含一个实例。

2、2NF:确保数据表中的每列与完整的主键相关,例如一个订单明细表(OrderDetail),属性如下:(OrderID,ProductID,Price,Discount,Quantity,ProductName),一个OrderID(订单号)往往对应多个商品,单一的它并不足以作为主键,需要将(OrderID,ProdectID)设为主键。从表中可知,Discount(折扣),Quantity(数量)完全依赖于主键(OrderID,ProdectID),而PriceProductName只依赖于ProductID,而不是整个复合主键,所以OrderDetail表不符合2NF,易产生冗余数据,即重复储存商品的单价和名称。为了避免这种情况,可将表进行拆分,将ProductID,PriceProductName移到一个新的表中,主键为ProductID,这样两个表都符合2NF,并减少了数据冗余的可能性。避免冗余的一个宗旨是尽量保证每个表只说一件事。

3、3NF:在满足第二范式的基础上,非主键列必须直接依赖于主键,不能存在传递依赖,即非主键列A依赖于非主键列B,B又依赖于主键。继续以2NF中的表举例,拆分后的两个表均满足非传递依赖,即非主键列直接依赖于主键。

4、BCNF:例如StudentGrade表为例,包含以下字段(学号(StudentID),姓名(StudentName),课程号(CourseID),课程名称(CourseName)和成绩(Grade)),按照BCNF,需要将该表拆分为以下三张表。

                1、Student:包含学号(StudentID),姓名(StudentName),学号是候选键;

                2、Course:包含课程号(CourseID),课程名称(CourseName),课程号是候选键;

                3、Grade:包含学号(StudentID),课程号(CourseID),成绩(Grade),学号和课程号的组合是候选键。

这种设计方式保证每张表都满足BCNF的要求,每个决定因素都包含候选键,每个非主属性都依赖于整个候选键,有助于减少数据冗余。但是实际设计过程中,为了查询性能和其他考虑,有时会故意违反BCNF。

5、4NF:例如有关系R(系名,教师名,学生名),在该关系中,一个系名教师名学生名之间存在“一对多”,即多值依赖。如果系名是候选键,应让教师名和学生名直接依赖于系名,而不是存在多值依赖,为了满足4NF,可将上述关系分解。

                1、R1(系名,教师名);

                2、R2(系名,学生名)。

这样,每个关系都有一个明确的候选键,并且非主属性都直接依赖于候选键,这样有助于提高数据的完整性并减少数据的冗余。

6、5NF:关系模式中的每一个连接依赖都必须由关系的候选键所隐含,换种说法就是如果一个关系模式中存在连接依赖,那么这个依赖必须能够通过该关系的候选键来推导出来。任何非主属性(不在任何候选键中的属性)都不能仅依赖于其他非主属性。如果非主属性之间存在依赖关系,并且这种依赖关系不能通过候选键来推导,则关系模式不满足第五范式。例如:假设有一个关系模式CourseAssingment,它包含属性Professor(教授)、Course(课程)、Assistant(助教)。在这个关系中,Professor和Course的组合是候选键,因为它们唯一地标识了一个课程分配。然而,如果Assistant属性仅依赖于Course属性(即每个课程都有一个固定的助教),而不是依赖于候选键(教授和课程),那么这个关系模式就不满足第五范式。因为Assistant和Course之间的连接依赖不是通过候选键推导的。

为了满足第五范式,可能需要将CourseAssingment关系分解为两个关系:一个是ProfessorCourse,其中Professor和Course是候选键;另一个是CourseAssistant,其中Course是主键,并且Assistant依赖于Course。这样,每个关系都满足第五范式的要求,且消除了不必要的连接依赖。

1.候选键:是一个或多个属性的组合,这些属性的值在关系中的每个元组(行)中都是唯一的。一个关系可以有多个候选键,但只能有一个主键。关系定义了表的结构,包括属性(列)之间的关系。

2.非平凡:如果属性集A能决定属性集B,并且B不是A的子集,则称A与B为非平凡的函数依赖。

3.连接依赖:当两个或多个关系通过某些属性连接起来时,这些属性之间的依赖关系就是连接依赖。例如,关系A中的某个属性依赖于关系B中的某个属性,则称A与B之间村咋存在连接依赖。

 

 

ps:如果有错误请指出,我也是在学习。

pps:看到这儿,说明你很闲。实际设计数据库的时候很少考虑这些玩意儿。

 

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值