您如何确定功能依赖性和主键?

时间:2014-12-09 06:22:22

标签: database-design functional-dependencies database-diagramming database-programming oracle11gr1

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

  • 确定当前显示的表的主键
  • 查找我们获得使用的表的所有功能依赖项。
  • 绘制表格的依赖关系图

表格以1NF开头。

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

我理解功能依赖性构成R,X-> Y中的Y,其中Y不是由其他任何X生成的,并且应该使您能够通过此依赖关系确定表中的每个其他值。

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

这是否意味着我需要提供所有功能完全依赖,部分依赖和传递依赖?只是想到这一点是压倒性的。

我的表由当前状态为1NF的10列组成 - 因此,A-J将成为我的属性标识符。我发现R(AD)构成了一个强大的主键,但是我不确定是否需要从布局所有FD中获得PK,或者我是否可以选择PK并查找我的FD从这一刻开始。如果是这样的话 - 我是否还会列出每个FD,因为我的PK确实会确定模型中关系的映射?

对于文字墙感到抱歉,我感到压力,困惑和疲惫。任何帮助都会很好理解这一点,如果我能提供更多信息,请告诉我。

编辑:我无法在此处显示表格,因为它是10列宽,而我通过Dropbox提供了一个共享链接供其他人查看以便提供帮助:
https://www.dropbox.com/s/3vwo1axe7a1i20s/final%20lab%20instructions.pdf?dl=0

非常感谢。

1 个答案:

答案 0 :(得分: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)

表(aka关系)包含使标准(也称谓词)为真的行。该标准可以表示为一系列单独标准的AND,并将其分解为它们是设计和规范化的关键。从ANDing开始,你可以说你的应用程序就像这样的表被称为“通用关系”。

现在使用该标准意味着什么以及规则意味着你必须为列的每个子集找出 当它的给定值总是出现另一列的一个值时,即什么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,当然也不确定si。

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

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

(您的作业使用E-R,因此您需要找到有关实体的条件/谓词,然后找到有关识别实体的列集的相应部分,这些列将获得表格。)