如何确定函数依赖关系和主键?

2023-12-08

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

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

该表一开始就是 1NF。

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

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

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

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

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

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


您必须知道表格的含义以及业务规则是什么。

从你的问题来看,显然是相同的设计,识别功能依赖性 (FD):

括号标识主键属性:

(Student ID), Student Name, Student Address, Student Major, (Course ID), Course Title, Instructor ID, Instructor Name, Instructor Office, Student_course_grade

显然,该表(使用缩短的列名)的含义如下:

/*
student with id [si] and name [sn] and address [sa] and major [sm]
    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。类似地,对于超级键、CK(候选键)、PK(主键)和其他约束。 FD 保存在变量/模式中,当且仅当/当它保存在给定业务规则的情况下该变量/模式可能出现的每个可能值/状态时。

请注意,如果子集确定一列,则该列的所有超集也确定该列。当您知道给定子集可能会出现多个列值时,您还可以排除 FD。示例数据可能表明 FD 成立或不成立。了解一组 FD 的“传递闭包”和“最小覆盖”,以简洁地表达所有 FD。您必须表明您已经考虑了每个可能的决定因素,即对于列的每个子集,以及对于每个属性,FD 是否拥有确定该属性的集合。

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

您可能必须进行假设,因为您不知道会出现什么情况。我们通常假设 ids 与已识别的实体是 1:1;是这样吗?一名学生可以有多个名字吗?如果不是,则 {si} -> sn。即使他们这样做了,表只会记录一个吗?如果是这样,谓词将变为“...并且具有已选择要记录的姓名 [sn]...”,并且涉及学生姓名的所有查询都将涉及“已选择要记录”的查询,并且上述FD成立。

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

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

ci 决定 ct 吗? ii 确定吗?根据规则,“每门课程仅由一名讲师教授”,并且该表包含“...从 ID 为 [ii] ... 的讲师那里学习课程 [ci] ...”的行。因此,给定的 ci 只能与一个 ii 一起出现。 FD。根据规则,“每个学生只能有一个专业”,表中包含“学生 ID [si] ... 和专业 [sm] ...” 的行。因此,给定的 si 仅与单个 sm 一起出现。 FD。根据规则,“学生最多可以选修 4 门课程”和“每门课程最多可以有 25 名学生”,并且该表包含“id [si] ... 的学生选修课程 [ci] ..”的行。 .”。所以si不能决定ci,当然也不能决定si。

未解答的问题必须由您和您的客户(教授)共同解决。

您只能从 FD 确定 CK(其中之一可以称为 PK)和其他超级键(唯一的列集)。如果给您 CK、PK 和/或其他超级键,根据定义,它们在功能上确定每一列。

(您的作业使用 E-R,因此您需要查找有关实体的谓词,然后查找有关标识实体的列集的相应谓词,从而获取表。)

From 我对你另一个问题的回答:

For 列的每个子集您需要决定哪些其他列对于这些列的给定子行值只能有一个值。当它只能有一个时,我们说列的子集在功能上决定了该列。我们说存在FD(功能依赖)columns->column。这时我们可以将某个函数 F 的表谓词表示为“... AND column=F(columns)”。(F 由表在列和列上的投影表示。)但是该子集的每个超集还将对其进行功能性确定,从而减少案例。相反,如果给定的集合不能确定列,则该集合的任何子集都不能确定列。正在申请阿姆斯特朗公理当给定 FD 成立时,给出所有成立的 FD。 (算法和软件可用于应用它们并确定 FD 闭合和覆盖。)此外,您可能会认为列集是唯一的;那么所有其他列在功能上都依赖于该集。这样的集合称为超级密钥。

之所以只需要对确定单个属性的 FD 应用业务规则和表谓词来查找 FD 是否成立,是因为阿姆斯特朗公理随后会查找哪些 FD 成立确定多个属性。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何确定函数依赖关系和主键? 的相关文章

  • 调整添加的绘制组件的大小和奇怪的摆动行为

    这个问题困扰了我好几天 我正在制作一个特殊的绘画程序 我制作了一个 JPanel 并添加了使用 Paint 方法绘制的自定义 jComponent 问题是 每当我调整窗口大小时 所有添加的组件都会 消失 或者只是不绘制 因此我最终会得到一个
  • 在 RESTful Web 服务中实现注销

    我正在开发一个需要注销服务的移动应用程序 登录服务是通过数据库验证来完成的 现在我陷入了注销状态 退一步 您没有提供有关如何在应用程序中执行身份验证的详细信息 并且很难猜测您在做什么 但是 需要注意的是 在 REST 应用程序中 不能有会话
  • 仅当显式选择行时才关闭 ui-bootstrap typeahead

    我创建了这个jsBin http jsbin com livuqafe 2 edit来证明我遇到的问题 如果您转到此处 请尝试输入 五 并继续 你的自然反应是输入 五 然后按 Tab 如果你想要 五百 你可以向下箭头一次 但是 在这种情况下
  • 如何通过索引访问 JSON 对象中的字段

    我知道这不是最好的方法 但我别无选择 我必须通过索引访问 JSONObject 中的项目 访问对象的标准方法是只写this objectName or this objectName 我还找到了一种获取 json 对象内所有字段的方法 fo
  • MySQL 查询计算上个月

    我想计算上个月的订单总额 我收到了从当前日期获取当月数据的查询 SELECT SUM goods total AS Total Amount FROM orders WHERE order placed date gt date sub c
  • 没有输入的 jQuery 日期选择器

    我有一个相当复杂的网络应用程序 我想向其中添加一些日期选择 UI 我遇到的问题是我无法从文档中弄清楚如何真正控制日期选择器的出现方式和时间 不涉及任何表单元素 不 我不会添加秘密表单字段 因此简单的开箱即用方法根本行不通 我希望有人可以提供
  • PrimeFaces 对话框参考父级

    我有一个 xhtml 页面 显示带有条目的数据表 我还有一个用于插入新条目的按钮 该按钮显示一个包含表单的对话框 插入表格用作
  • 类型或命名空间“MyNamespace”不存在等

    我有通常的类型或命名空间名称不存在错误 除了我引用了程序集 using 语句没有显示为不正确 并且我引用的类是公共的 事实上 我在不同的解决方案中引用并使用相同的程序集来执行相同的操作 并且效果很好 顺便说一句 这是VS2010 有人有什么
  • Pandas 与 Numpy 数据帧

    看这几行代码 df2 df copy df2 1 df 1 df 1 values 1 df2 ix 0 0 我们的教练说我们需要使用 values属性来访问底层的 numpy 数组 否则我们的代码将无法工作 我知道 pandas Data
  • Mono 应用程序在非阻塞套接字发送时冻结

    我在 debian 9 上的 mono 下运行一个服务器应用程序 大约有 1000 2000 个客户端连接 并且应用程序经常冻结 CPU 使用率达到 100 我执行 kill QUIT pid 来获取线程堆栈转储 但它总是卡在这个位置
  • 将第三个表链接到多对多关联中的桥接表

    设计这个数据库的正确方法是什么 这是我设置表格的方式 我在名为 教师 的表和名为 仪器 的表之间存在多对多关系 然后我有一个连接两者的桥接表 我想将另一个表与 BRIDGE 表关联起来 意思是乐器 老师的组合 该表有 3 行 指定老师可以教
  • NSArrayController 无需将大型数据集加载到数组中

    我想使用 NSArrayController 向 NSTableView 提供数据 我面临的问题是我不想将所有数据预先加载到数组中 然后使用数组控制器setContent 方法 我的数据模型是一个管理数百万条记录的大型现有代码库 它包含有效
  • 一种无需 JavaScript 即可在 PHP 中确定浏览器宽度的方法?

    首先有吗 或者我必须使用javascript 我希望能够更改使用的 CSS 因此 frex 我可以为移动设备或其他设备加载较小的字体 不幸的是 仅使用 PHP 无法检测用户分辨率 如果您使用 Javascript 则可以在 cookie 中
  • 使用velocity.js制作可拖动元素的动画

    我正在使用velocity js 为用户拖动的可拖动 SVG 元素设置动画 然而 velocity js 将先前的 mousemove 坐标排队并通过所有后续的 mousemove 坐标进行动画处理 我想要的是velocity js 不要对
  • 如何修复:“无法解析类型 java.lang.CharSequence。它是从所需的 .class 文件间接引用的”消息? [复制]

    这个问题在这里已经有答案了 我正在尝试使用这个字符串 amountStr amountStr replace replace replace 但我收到一条错误消息 我知道我收到的错误消息是因为我刚刚发布的字符串已过时 所以我想知道该字符串的
  • 如何在 JFreeChart 中设置多个系列的线条粗细?

    我创建了很多图表 在他们每个人中我都需要打电话 renderer setSeriesStroke i new BasicStroke 2 0f 对于每个系列 renderer is chart getXYPlot getRenderer 我
  • 如何在 OSX 上安装 LaTeX .sty 文件?

    我设置了一个 LaTeX 项目 tex documents some file tex support todonotes sty where some file tex uses todonotes usepackage colorinl
  • Android 材料芯片组件崩溃应用程序。无法膨胀 xml

    Tried Chip来自两个支持库的组件 com google android support design 28 0 0 rc01和材料 com google android material material 1 0 0 rc01 堆栈
  • 禁用允许文本选择的

    残疾人可以吗
  • PyAudio ErrNo 输入溢出 -9981

    我遇到了与用户相同的错误 Python 使用 Pyaudio 以 16000Hz 录制音频时出错 https stackoverflow com questions 12994981 python error audio recording

随机推荐

  • 用汇编语言定义“变量”

    我知道这是一个非常愚蠢的问题 但我有一段时间无法找到答案如何在 GAS AT T 汇编语言中正确声明和定义 变量 例如 我想要 5 个字节的缓冲区 两个 1 字节变量 最初值为 0 2 字节变量为 0 和 2 字节变量为 10 这段代码不能
  • 通过Java访问谷歌照片API

    我对 google API 很陌生 并且遇到了麻烦 我红色文档适用于 Java 的 Google 照片 API 然后我在 google API 控制台中创建了 OAuth 凭据并下载了它 credentials json 文件 之后我尝试访
  • 链接 .so 文件中的旧符号版本

    在 x86 64 linux 上使用 gcc 和 ld 我需要链接到较新版本的库 glibc 2 14 但可执行文件需要在旧版本 2 5 的系统上运行 由于唯一不兼容的符号是 memcpy 需要 memcpy GLIBC 2 2 5 但提供
  • Meteor 的 标签建议

    各位流星用户 在搜索教程和示例应用程序时 我发现了一个使用独特头部结构的教程和示例应用程序 这个特定的示例应用程序甚至没有标记任何地方 只是一个名为head html其中包含上述代码 我还了解到
  • C#同时更新两个文本框?

    假设我有两个文本框 一个包含二进制数据 另一个包含 ASCII 等效数据 如果用户更改其中任何一个 我如何同时更新另一个文本框 而无需按按钮 你必须防止无限循环 asciiTextBox变化binaryTextBox Text这改变了asc
  • 获取或插入 PostgreSQL

    我有一个对象表 其中包含多个属性的列和一个具有唯一 SERIAL 标识符的列 例如 CREATE TABLE person id SERIAL NOT NULL name VARCHAR 16 NOT NULL age INT NOT NU
  • 如何防止Android中移动网站的深度链接?

    我已经为我的所有活动添加了这样的深层链接
  • Android 字符串比较不起作用

    我很难使用 Java 比较 Android 中的两个字符串 我所做的是运行 HTTP get 请求 该请求返回 yes 或 no 并根据该请求决定是否启动新活动 我正在 Async onPostExecute 方法中执行字符串比较 尽管 H
  • 如何检查iframe是否加载失败? jquery?

    我现在有这个 jquery 代码并且工作正常 当用户单击提交按钮时 它会隐藏表单 显示加载器 然后将数据提交到链接并在 iframe 中加载输出 document ready function xxx form validate submi
  • 如何在html代码中使用json文件

    我有 json 文件mydata json 这个文件中是一些 json 编码的数据 我想在文件中获取这些数据index html并在 JavaScript 中处理这些数据 但不知道如何在 html 文件中连接 json 文件 请告诉我 这是
  • Android 自定义按钮状态选择器 XML 文件导致 Resource$NotFoundException

    由于 Resource NotFoundException 我的活动随机崩溃 并且总是由于我的自定义按钮的状态选择器文件之一而导致 而且崩溃是完全随机的 我将多次检查整个应用程序而不会发生崩溃 然后第 n 次转到 Activity 然后它会
  • 使用 jQuery 自定义下拉面板

    我正在尝试为以下问题找到 jQuery 解决方案 通用下拉控件 折叠时看起来像一个普通的选择框 下拉一个自定义面板 您可以在其中放置任何内容 I m not寻找菜单控件 或者可设置样式的选择或列表控件 我需要一个下拉面板可以容纳任何内容的控
  • Group by 模糊字符串与 fuzzywuzzy 和 groupby 匹配

    我有一个随机单词和名称的数据集 我正在尝试对所有相似的单词和名称进行分组 因此给出下面的数据框 Name ID Value 0 James 1 10 1 James 2 2 142 2 Bike 3 1 3 Bicycle 4 1197 4
  • Android中的调用方法

    我正在尝试调用我编写的方法 它编译除了一行 public class http extends Activity httpMethod will not compile public void httpMethod HttpClient h
  • 表中的 ZEND 表单元素还包含数据库中的数据

    你好 我有一个装饰器和表单的问题 它会在表中 并且在这个表中还希望有来自数据库的数据 我不知道如何做到这一点以获得如下所示的结构 可以说 table tr td and here input from zend form td td td
  • 未排序的值计算(也称为序列点)

    抱歉再次打开这个主题 但是思考这个主题本身已经开始给我一种未定义的行为 想要进入行为明确的区域 Given int i 0 int v 10 i i Expr1 i i Expr2 i Expr3 i v i Expr4 我认为上述表达式
  • AOSP 6.0 为锤头鲨构建 - 专有二进制文件

    我刚刚为锤头构建了 AOSP 6 0 并尝试刷新它 我的手机在看到 Google 徽标时就卡住了 无法启动 我假设我需要使用此处找到的专有二进制文件https developers google com android nexus driv
  • Symfony2 Doctrine 自定义存储库类 [语义错误] 第 0 行,第 14 列“项目 p”附近:错误:类“项目”未定义

    我对 Symfony 2 和 Doctrine 很陌生 有一个简单的问题 我的存储库中有一个非常简单的代码
  • 使用 WebGL API 进行数学计算

    标题说明了一切 但我的问题是 是否可以在浏览器 例如 Google Chrome 中使用 WebGL API 来解决一些数学问题 假设我想使用 WebGL API 将两个数字相乘 这通常可行吗 如果可以 我该怎么做 请原谅我没有分享任何代码
  • 如何确定函数依赖关系和主键?

    在我的 Oracle 数据库编程课程中 最终实验室评估的第一部分要求我们 识别当前显示的表的主键 找到我们要使用的表的所有函数依赖关系 绘制表的依赖关系图 该表一开始就是 1NF 从我所做的研究来看 我似乎需要基本上组合所有可能的 FD 这