1

在我的 Oracle 数据库编程课程中,我们最终实验室评估的第一部分要求我们:

  • 识别当前显示的表的主键
  • 找到我们要使用的表的所有功能依赖项。
  • 绘制表的依赖关系图

该表以 1NF 开头。

从我所做的研究来看,我似乎需要基本上组合所有可能的 FD,这不仅会消耗大量时间,而且考虑到他希望我们在依赖关系图中映射这些关系,这似乎很奇怪。这基本上会导致一切都链接到一切 - 这就是为什么我相信我不了解功能依赖关系。

我知道函数依赖在 R 中构成 X-> Y,其中 Y 不是由任何其他 X 产生的,并且应该使您能够通过此依赖确定表中的所有其他值。

我也明白“X”和“Y”可以包含多个属性。这是我不明白的,因为如果我将我的属性映射到代数变量(这似乎是这样做的方法?),我有字母 AJ;我想出的依赖项的数量似乎令人震惊,我不想浪费时间做错事。

这是否意味着我需要提供所有全功能依赖、部分依赖和传递依赖?

我的表由当前状态为 1NF 的 10 列组成 - 因此,AJ 将是我在此过程中的属性标识符。我发现 R(AD) 构成了一个强大的主键,但我不确定我是否需要从布置所有 FD 中导出 PK,或者我是否可以选择一个 PK 并从这一点找到我的 FD。如果是这样的话——考虑到我的 PK 将真正决定模型内关系的映射,我是否仍然布置每个 FD?

https://www.dropbox.com/s/3vwo1axe7a1i20s/final%20lab%20instructions.pdf?dl=0

4

1 回答 1

1

您必须首先了解表格和规则的含义。显然,该表的含义类似于:

/*
student with id [si] has name [sn] and address [sa] and major [sm]
    and takes course [ci] with title [ct]
        from instructor with id [ii] and name [in] and office [io]
        with grade [scg]
*/
t(si,sn,sa,sm,ci,ct,ii,in,io,scg)

表(又名关系)包含使标准(又名谓词)为真的行。该标准可以表示为一堆单独标准的 AND 并将其分解为它们就是设计和规范化的内容。像这样的表格将您可以对您的应用程序说的所有内容进行“与”运算,称为“通用关系”。

现在使用该标准的含义和规则的含义,您必须弄清楚每个列子集的给定值总是与另一列的一个值一起出现时,即 FD 持有什么。请注意,如果一个子集确定一列,则该列的所有超集都确定该列。当您知道一个给定的子集可能出现一个列的多个值时,您也可以排除 FD。了解一组 FD 的“传递闭包”和“最小覆盖”,以简洁地表达所有 FD。你必须证明你已经考虑了每一个可能的决定因素,即每一个列的子集。

每次分解时,您都必须决定是否希望给定组件仅保留原始行在其列上的投影,或者它是否也可以保留其他行。例如,教授可以在不教授课程的情况下存在吗?如果是这样,则意味着您的原始标准/表格实际上不足以说出您想要对您的应用程序进行的所有内容,并且您需要一个额外的表格,该表格不是它的投影但具有相同的列。这通常被描述为规范化的一部分,但事实并非如此。在规范化时注意到您的设计是错误的。

您可能不得不假设,因为您不知道会出现什么情况。我们通常假设 X_ids 与 Xs 是 1:1;是这样吗?一个学生可以有多个名字吗?如果不是,那么 {si} -> sn。即使他们这样做了,表会只记录一个吗?如果是这样,则标准变为“......并且有名字 [sn] 已被选择记录......”并且您所有涉及学生姓名的查询都将涉及那些“已被选择记录”和上述FD成立。

  • 每个课程 ID 只教授一门课程。
  • 学生最多可修读 4 门课程。
  • 每门课程最多可容纳 25 名学生。
  • 每门课程仅由一名讲师教授。
  • 每个学生可能只有一个专业。

什么是班级?是否存在与类 1:1 的值的子行,因此类的内容适用于这些子行吗?

ci 决定 ct 吗?ii 确定在吗?根据规则,给定的 ci 仅与一个 ii 一起出现。FD。从规则来看,一个给定的 si 只与一个 sm 一起出现。FD。从规则上看,si 不决定 ci, course 不决定 si。

未回答的问题必须在您和您的客户(教授)之间解决。

您只能确定 FD 上的候选键(其中一个您可以调用主键)。

(您的作业使用 ER,因此您需要找到关于实体的条件/谓词,然后找到关于标识实体的列集的对应项,这些列集获取表。)

于 2014-12-11T03:19:30.200 回答