关系数据库设计理论

关系数据库设计理论

函数依赖

记 A->B 表示 A 函数决定 B,也可以说 B 函数依赖于 A。

如果 {A1,A2,... ,An} 是关系的一个或多个属性的集合,该集合函数决定了关系的其它所有属性并且是最小的,那么该集合就称为键码。

对于 A->B,如果能找到 A 的真子集 A‘,使得 A‘-> B,那么 A->B 就是部分函数依赖,否则就是完全函数依赖。

对于 A->B,B->C,则 A->C 是一个传递函数依赖。

异常

以下的学生课程关系的函数依赖为 {Sno, Cname} -> {Sname, Sdept, Mname, Grade},键码为 {Sno, Cname}。也就是说,确定学生和课程之后,就能确定其它信息。


Sno


Sname


Sdept


Mname


Cname


Grade


1


学生-1


学院-1


院长-1


课程-1


90


2


学生-2


学院-2


院长-2


课程-2


80


2


学生-2


学院-2


院长-2


课程-1


100


3


学生-3


学院-2


院长-2


课程-2


95

不符合范式的关系,会产生很多异常,主要有以下四种异常:

  • 冗余数据:例如 学生-2 出现了两次。
  • 修改异常:修改了一个记录中的信息,但是另一个记录中相同的信息却没有被修改。
  • 删除异常:删除一个信息,那么也会丢失其它信息。例如删除了 课程-1 需要删除第一行和第三行,那么 学生-1 的信息就会丢失。
  • 插入异常:例如想要插入一个学生的信息,如果这个学生还没选课,那么就无法插入。

范式

范式理论是为了解决以上提到四种异常。

高级别范式的依赖于低级别的范式,1NF 是最低级别的范式。

1. 第一范式 (1NF)

属性不可分。

2. 第二范式 (2NF)

每个非主属性完全函数依赖于键码。

可以通过分解来满足。

分解前


Sno


Sname


Sdept


Mname


Cname


Grade


1


学生-1


学院-1


院长-1


课程-1


90


2


学生-2


学院-2


院长-2


课程-2


80


2


学生-2


学院-2


院长-2


课程-1


100


3


学生-3


学院-2


院长-2


课程-2


95

以上学生课程关系中,{Sno, Cname} 为键码,有如下函数依赖:

  • Sno -> Sname, Sdept
  • Sdept -> Mname
  • Sno, Cname-> Grade

Grade 完全函数依赖于键码,它没有任何冗余数据,每个学生的每门课都有特定的成绩。

Sname, Sdept 和 Mname 都部分依赖于键码,当一个学生选修了多门课时,这些数据就会出现多次,造成大量冗余数据。

分解后

关系-1


Sno


Sname


Sdept


Mname


1


学生-1


学院-1


院长-1


2


学生-2


学院-2


院长-2


3


学生-3


学院-2


院长-2

有以下函数依赖:

  • Sno -> Sname, Sdept
  • Sdept -> Mname

关系-2


Sno


Cname


Grade


1


课程-1


90


2


课程-2


80


2


课程-1


100


3


课程-2


95

有以下函数依赖:

  • Sno, Cname -> Grade

3. 第三范式 (3NF)

非主属性不传递函数依赖于键码。

上面的 关系-1 中存在以下传递函数依赖:

  • Sno -> Sdept -> Mname

可以进行以下分解:

关系-11


Sno


Sname


Sdept


1


学生-1


学院-1


2


学生-2


学院-2


3


学生-3


学院-2

关系-12


Sdept


Mname


学院-1


院长-1


学院-2


院长-2

原文地址:https://www.cnblogs.com/kexinxin/p/11537889.html

时间: 2024-08-06 09:12:40

关系数据库设计理论的相关文章

关系模式设计理论 - 数据库系统原理

模式设计理论主要包括三方面的内容:数据依赖.范式.模式设计方法.数据依赖研究数据之间的联系,起着核心的作用:范式是关系模式的标准:模式设计方法是自动化设计的基础. 关系模式的设计准则 关系模式的冗余和异常 关系模式的冗余指数据冗余.数据冗余 指同一个数据在系统中多次重复出现,这一直是影响系统性能的大问题.在文件系统中由于文件之间没有联系,一个数据会在多个文件中出现.数据库系统克服了文件系统的这种缺陷. 由于数据冗余,对数据操作时就会引起各种异常:修改异常.插入异常.删除异常.例如,关系模式 R(

关系数据库设计

一.基本概念 1关系模型 表:和数学上的关系这个概念密切相关,关系数据库是表的集合.表中的一行代 表了一系列值之间的联系. 属性:表的列首被称为属性. 域:属性所允许的值. 数学上的描述 关系:可以代替"表"这个概念的数学名词.关系是元组的集合. 元组:可以代替"行"这个概念的数学名词. 元组变量:代表元组的变量,以所有元组集为域的变量. 原子的域:域的元素被看做是不可再分的单元. 超码:一个或多个属性的集合.这些属性的组合可以在一个关系中唯一标识一个元组. 候选码

迈向大数据架构师 - 架构师转型方法与架构设计理论

迈向大数据架构师 - 架构师转型方法与架构设计理论课程学习地址:http://www.xuetuwuyou.com/course/233课程出自学途无忧网:http://www.xuetuwuyou.com课程摘自<大数据系统架构分析师成长之路>:http://www.xuetuwuyou.com/course/200 1.课程目标通过本课程的学习,让学员了解到什么是系统架构师,什么大数据系统架构师,两者的区别与联系,程序员与架构师的不同,程序员如何向架构师转型,一个架构师工作日常及必须修炼的

数字资产交易平台开发的架构设计理论架构

数字资产交易平台开发的架构设计理论架构架构和设计,这是整个系统的灵魂步骤.一个架构不过关,到后面的问题可能是毁灭性的(相同业务量,相近的硬件,你的系统只跑两年就很卡,人家跑五年没事,很可能就是架构没做好);系统设计不过关,必定走不久,未来业务变化,可能又要换系统...所以想要稳定的系统就要找靠谱的开发商,138.2311-8291源中瑞科技. 1)业务流程设计(可能涉及到业务流程重组,最费事又可能最反复,也是风险最高的地方); 2)系统架构设计(cs还是bs?有没有app?私有部署还是公有云部署

关系模式设计理论

规范化: 一个低级范式,通过模式分解可以转化为若干个高级范式的关系模式,即为规范化. 范式: 目前关系数据库有六种范式,咱们最常用的是第一到第三范式.各范式呈递次规范,越高的范式数据冗余越小. 第一范式:(不再分) 范式的基础,所有范式都必须满足第一范式,其他范式都以第一范式为基础. 第二范式: 第一范式基础上消除部分依赖,要求实体的属性完全依赖于主键. 若存在局部依赖,需将这个属性和候选键的那一部分分离出来形成新的实体. 例 (学号,姓名,系别,住址,课程,成绩): 存在(学号,课程)-->(

MySQL性能管理及架构设计 --- 理论篇

              MySQL性能管理及架构设计  一丶IO,内存,吞吐量理解 IO     是指设备与设备之间操作次数,比如mysql与php互插内存   是程序运行都在里面执行吞吐量 是单位时间内处理的请求数量 二丶究竟是myisa还是innodb ? 业界争论不休的情况下,低版本默认引擎是myisam,高版本mysql默认引擎是innodb,也是innodb高版本一个梗吧,尽量使用innodb引擎,不要混合使用myisam这两种引擎,因为在事物中,如果回滚的话 ,表连接 myisa

关系数据库设计三大范式【转】

原文:http://www.cnblogs.com/linjiqin/archive/2012/04/01/2428695.html 为了建立冗余较小.结构合理的数据库,设计数据库时必须遵循一定的规则.在关系型数据库中这种规则就称为范式.范式是符合某一种设计要求的总结.要想设计一个结构合理的关系型数据库,必须满足一定的范式. 在实际开发中最为常见的设计范式有三个: 1.第一范式(确保每列保持原子性) 第一范式是最基本的范式.如果数据库表中的所有字段值都是不可分解的原子值,就说明该数据库表满足了第

数据库设计理论与实践&#183;&lt;二&gt;概念设计与逻辑设计

2一.概念设计 1.1 概念设计关键知识 1.2 辨析 实体与属性的区别: ①实体能进一步用多个属性来描述,属性却不能,属性是不可再细分/分割的原子项. ②实体内部或者多个实体之间存在联系,而属性无. 实体与联系的区别: ①联系不能单独存在,必须由它联系的双方或者多方共同决定,而实体不需要. ②联系的码由它关联的实体的主码决定,而实体的码和其它实体或联系无关. 一般很多人容易将三元联系和三个二元联系混淆. 1.3 附属图 图1.1 三元联系(三个实体的关系) 图1.2 一元联系 图1.3 各类属

数据库设计理论与实践&#183;&lt;三&gt;物理设计

一.物理设计核心任务与关键细节 二.物理设计经验之谈 1.数据类型的设计:建议字段数据类型定义时结合以下几点(以MYSQL为例) 1)不适用image,而使用varbinary等 2)不使用text和ntext,而使用varchar或者nvarchar 3)不使用money和small,而使用decimal 4)使用bit而非char(1) 来表示男/女,或者是/否的布尔值 5)自增主键根据预期范围选择int或者bigint,GUID使用unique identifier而非varchar(N)