数据库
首页 > 数据库> > 数据库逻辑设计 完全函数依赖、部分函数依赖、传递函数依赖、码、候选码、主码、范式

数据库逻辑设计 完全函数依赖、部分函数依赖、传递函数依赖、码、候选码、主码、范式

作者:互联网

数据库逻辑设计

R:关系名
U:组成该关系的属性名集合
D∶属性组U中属性所来自的域
DOM:属性
到域的映射
F:属性组U上的一组数据依赖

由于D、DOM对模式设计的关系不大,这里把关系模式简化为一个三元组:
R<U, F>,当且仅当U上的一个关系P满足F时,R称为关系模式R<U,F>的一个关系。

新奥尔良法,数据库设计步骤:

需求分析—〉概念结构设计(E-R图)—〉逻辑结构设计(关系模式设计)—)物理结构设计
数据依赖的类型

如果X→Y,且YSX,则X→Y称为非平凡函数依赖。
若YC X,则称X→Y为平凡函数依赖。由于Y CX时,一定有X→Y,平凡函数依赖必然成立,没有意义,所以一般所说的函数依赖总是指非平凡函数依赖。

在这里插入图片描述

ps:元组理解为一张表的某一行,属性理解为一张表的某一列,属性名就是列的名字(字段)。

1(码):码是可以确定一个元组的所有信息的属性名或属性名组。

例如在 { a, b, c, d } 中,

假设知道 a 的值就能确定 a, b, c, d 的值,

假设知道 c, d 的值就可以确定 a, b, c, d 的值,

那么 { a } 就是码,{ c, d } 就是码。

并且 { a, b }, { a, c }, { a, b, c }, { a, b, c, d } 等也都是码,因为它们也可以确定一个元组的所有值,即使很多余。

2(候选码):候选码的真子集中不存在码,候选码可以有多个。

就上面的例子而言,{ a } 是候选码,{ c, d } 是候选码,因为它们的真子集中不存在码。

而诸如 { a, b } 并不是候选码,因为它的真子集中含有 { a }, 且 { a } 是码。

3(主码):主码就是主键的意思,主码是任意一个候选码。

还是上面的例子,主码是候选码 { a }, { c, d } 中的其中一个。

既可以是 { a }, 也可以是 { c, d }。

更清晰的讲解见博客https://blog.csdn.net/sumaliqinghua/article/details/85872446?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522162709035016780269848416%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=162709035016780269848416&biz_id=0&spm=1018.2226.3001.4187

请添加图片描述

范式这里就不说课本、网上那些晦涩难懂的概念了。

1NF:无重复的列(数据库表中的每一列都是不可分割的基本数据项)

2NF:满足1NF且非主键列都完全函数依赖于主键。

3NF:满足2NF且非主属性列都不传递依赖于主键。

BCNF:满足3NF且不允许主键的一部分被另一部分或其它部分所决定(即满足3范式,并且主属性之间没有依赖关系)。

习题会讲解的非常详细,请一定认真看。

题目:设有关系模式 R(职工名,项目名,工资,部门名,部门经理)
如果规定,每个职工可参加多个项目,各领一份工资;每个项目
只属于一个部门管理;每个部门只有一个经理。
  1. 试写出关系模式 R 的基本函数依赖和主码。
  2. 说明 R 不是 2NF 模式的理由,并把 R 分解成 2NF 。
  3. 进而将 R 分解成 3NF ,并说明理由。

分析

依赖关系我们使用 → 表示,可以理解为指向谁就代表可以推出谁,或者归谁管。

比如在这里,职工名和项目名合在一起可以推出工资是多少就可以表示为:(职工名,项目名)→工资;

再者,项目归部门管,可以表示为:项目名→部门名;部门归部门经理管可以表示为:部门名→部门经理。

好了,到现在为止我们就已经将第一问中的函数依赖写出来了,我们再来捋一下:

部门经理依赖于部门,也就是说要先确定部门才能确定部门经理,所以是依赖关系;
而部门依赖于项目,要先确定项目才能确定部门;
工资依赖于两个属性:职工名和项目名。

所以答案就是:

函数依赖关系: (职工名,项目名)→工资 项目名→部门名 部门名→部门经理 主键为(职工名,项目名)。

R1(项目名,部门名,部门经理)
R2(职工名,项目名,工资)

这样每个关系中就不存在部分依赖了。

来看第三问:进而将 R 分解成 3NF ,并说明理由。

那么 3NF 又是啥

可以把 R1 再分成两个关系:

R11(项目名,部门名)
R12(部门名,部门经理)

最后总结一下 2NF 和 3NF 的关系:在这里插入图片描述更详细例题请见该博客
————————————————

标签:关系,依赖,函数,2NF,课程,主键,逻辑设计
来源: https://blog.csdn.net/weixin_49556407/article/details/119052770