将关系 R 分解为 1NF 后最少存在多少张表?

2024-04-24

考虑具有以下属性类型的关系 R(A, B, C, D, E, F, G):-

键总数 = 1 = {A}

一组简单(或)原子(或)单值属性 = {B, C}

多值属性集 = {D, E}

复合属性集 = { F, G}

将关系 R 分解为 1NF 后,存在的表的最小数量是多少?

(A) 3 (B) 2 (C) 4 (D) 5


我的尝试:

对于具有给定键(A)的每个多值属性,我们需要不同的表,总计 = 2

同样,我们需要为每个复合属性使用不同的表,总计 = 2。

这样的属性一共有4个。我给出了 4 个表,每个(4)个表中都有给定的键(A)。我可以将原子属性(B,C)插入给定的 4 个表中的任何一个。因此,我得出的结论是,4 个表足以表示第一范式的关系。

您能用正式的方式解释一下吗?


  • 如果关系的所有候选键都包含多值属性:
    为至少一个多值属性引入代理属性。

  • 对于您认为“复合”的每​​个属性(具有异构组件,如元组):

    • 对于每个可能缺失的属性组件:
      添加与某些无多值候选键的属性和该组件的属性的关系。对于具有该组件的原始关系的每一行,新关系中都有一行,其候选键属性值是原始行的属性值,其新属性值是该组件的值。然后从复合属性值中删除该组件。这会为每个组件添加一个可能缺失的关系。

    • 对于每个剩余组件:
      向原始关系添加一个属性,该属性在每一行中的值都是组件的值。然后删除复合属性。这不会增加任何关系。

  • 对于您认为“多值”的每个属性(具有同质元素,如关系):

    • 对于可以有零个元素的类型的属性:
      添加与某些无多值候选键的属性和该属性的关系。对于原始关系的每一行,新关系中都有一组行,其候选键属性值是原始行的属性值,其新属性值是多值属性的元素。然后删除多值属性。这会为每个多值属性添加一个关系。

    • 对于始终具有元素的类型的每个属性:
      将原始关系的每一行替换为一组行,这些行的多值属性值是多值属性的元素,其其他属性值是原始行的属性值。这不会增加任何关系。

所以这里的最终关系是 {A,B,C,F1,...,G1,...}, {A,D} 和 {A,E},总共 1 (对于原始和合成) + 2 (对于多值)。

当然,在实践中你应该规范化新表,这可能会生成新表。但那是为了改进设计。在这里,我们想要一个添加表格尽可能少的设计。

(不存在将关系“分解”为 1NF 的情况。“规范化”的原始含义意味着摆脱关系值属性。后来的规范化理论认为每个关系都在 1NF 中。参见this https://stackoverflow.com/a/24038895/3404097关于 1NF 和原子性。 我们可以用一个或多个具有部分属性的关系来替换我们认为具有同质部分(多值)或异质部分(复合)的属性的关系。我们可以将非关系设计转换为关系设计。但这种非关系设计不会有候选键/主键,因为它仅为关系定义。)

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

将关系 R 分解为 1NF 后最少存在多少张表? 的相关文章

  • 如何将 Pandas Dataframe 中的字符串转换为字符列表或数组?

    我有一个名为的数据框data 其中一列包含字符串 我想从字符串中提取字符 因为我的目标是对它们进行一次性编码并使之可用于分类 包含字符串的列存储在预测因子如下 predictors pd DataFrame data columns Seq
  • 如何在 Swift 中解析蓝牙设备发送的浮点数?

    在我的 iOS 应用程序上 我需要解码蓝牙接收到的 Float 值 并从不同的设备 不是 iOS 获取 4 个字节 因此我需要一个 便携式 4 字节 Float 格式 目前发件人正在使用以下格式 数据编码 0xCCBBAAAEE 0xEE
  • Python 中的迭代器 (iter()) 函数。 [关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 对于字典 我可以使用iter 用于迭代字典的键 y x 10 y 20 for val in iter y print val 当
  • 是否可以使用环境变量来为基于 log4net 的日志系统指定所需的日志级别?

    我们使用 log4net 进行日志记录 我想知道在指定日志级别时是否可以使用环境变量 动机很简单 我们的 QA 人员不必编辑配置文件 他们只需设置一次特定的环境变量 简而言之 我们不想将配置文件中的日志级别设置为某个恒定值 因为相同的构建由
  • 从 Android 中的过渡动画中排除 BottomNavigation

    我一直在四处寻找 但找不到有助于解决这个特定问题的答案 我的应用程序有一个自定义滑入 滑出效果 如下所示 Intent intent new Intent getApplicationContext MyActivity class sta
  • linux下无法安装Cairo包

    我在本地下载该软件包并尝试安装它 但出现此错误 R CMD INSTALL l usr local lib64 R library Cairo 1 5 1 tar gz 我得到他的错误 checking for PNG support in
  • 将隐藏(生物识别)数据附加到 pdf 上的数字签名

    我想知道是否可以使用 iText 我用于签名 或 Java 中的其他工具在 pdf 上添加生物识别数据 我会更好地解释一下 在手写板上签名时 我会收集签名信息 例如笔压 签名速度等 我想将这些信息 java中的变量 与pdf上的签名一起存储
  • 在地图上使用 find

    如何使用 find 和 aconst iterator如果你有一个地图定义为 typedef std pair
  • shell脚本“x$VARIABLE”中x的用途[重复]

    这个问题在这里已经有答案了 我正在查看一些 shell 脚本 comarison shcu 中 x 的用途是什么 if x USER x RUN AS USER then su RUN AS USER c CATALINA HOME bin
  • 如何抑制 Pandas Future 警告?

    当我运行该程序时 Pandas 每次都会给出如下所示的 未来警告 D Python lib site packages pandas core frame py 3581 FutureWarning rename with inplace
  • Python - 打印漂亮的 XML 为空标签文本创建开始和结束标签

    我正在编写一个 python 应用程序 它创建一个 ElementTree XML 然后使用 minidom 的 toprettyxml 将其写入文件 final tree minidom parseString ET tostring r
  • 如果列表在初始化之前为空,则 jQuery 可排序无法与水平列表正常工作

    如果我在初始化后将元素添加到列表中 sortable它无法正常工作 参见示例jsFiddle http jsfiddle net NQMPr 1 示例 HTML div class container div br
  • 使用 Getopt::Long 解析参数的最简洁方法

    我使用 GetOpt 来解析命令行参数 我想添加一个新选项 multi 它应该得到一个如下所示的字符串 key1 abc key2 123 key3 xwz 我不知道用户想要提供多少个自定义密钥 但他可以提供 minimax5键 另外 我想
  • 将 Zurb Foundation v5 升级到 v6.2 所需的工作

    将 Foundation 5 升级到 6 2 需要做什么工作以及需要做多少工作 我们的开发工作室正在接管现有 F5 项目的开发 看起来前端布局已经完成了 80 尽管我们可能会过渡到 JSX 但几乎没有什么会保持不变 我需要帮助来权衡 F6
  • 从最大到最小的3个整数

    我是 C 初学者 我使用 编程 使用 C 的原理与实践 第二版 问题如下 编写一个程序 提示用户输入三个整数值 然后以逗号分隔的数字顺序输出这些值 如果两个值相同 则应将它们排列在一起 include
  • 使用 lpSolve 优化 R 团队名单

    我是 R 新手 有一个想要解决的特定幻想运动队优化问题 我见过其他帖子使用 lpSolve 来解决类似的问题 但我似乎无法理解代码 下面的示例数据表 每个球员都在一个球队中 扮演着特定的角色 有薪水 并且每场比赛都有平均得分 我需要的限制是
  • C#“var”关键字在 VB.NET 中的等价物是什么?

    例如 我如何获得 VB NET静态类型局部变量是static赋值右侧的表达式的类型 像这样 Dim http msdn microsoft com en us library 7ee5a7s1 aspx我的变量 3 你还需要 选项推断 ht
  • 滑动时向 PageView 添加新页面

    我目前正在制作一个日历应用程序 我想向右或向左滑动以转到下个月或上个月 我使用 PageView 时首先设置了一个包含 3 个项目的数组 第一个页面是第二个项目 我想向右滑动并在末尾添加一个页面 我想向左滑动并在开头添加一个页面 目前 如果
  • 从 Flask 中的 S3 返回 PDF

    我正在尝试在 Flask 应用程序的浏览器中返回 PDF 我使用 AWS S3 来存储文件 并使用 boto3 作为与 S3 交互的 SDK 到目前为止我的代码是 s3 boto3 resource s3 aws access key id
  • Golang 优雅地关闭 HTTP 服务器并进行错误处理

    我正在让我的 HTTP 服务器正常关闭 我从帖子中获取了提示here https stackoverflow com questions 39320025 how to stop http listenandserve 并且到目前为止已经像

随机推荐

  • 如何使用 Amazon API 轻松恢复购买?

    我正在尝试像 iOS 一样恢复购买 但我不知道如何使用 Amazon API 轻松恢复 IAP 权利购买 如果我向PurchasingManager 它返回一个PurchaseResponse 但是那个PurchaseResponse如果已
  • ar.js 中的事件监听器

    我正在开发一个涉及 ar js 的项目 该项目显示 3D 对象和文本 以在移动设备和笔记本电脑上教孩子们字母表 我试图添加一个事件侦听器作为额外的内容 以使孩子们进行更多互动 我的目标是单击 触摸显示的模型 它将放大或改变颜色或旋转 附件中
  • 如何在 django 模型字段上存储多个值

    我有一个模型 将重复的训练存储在我的健身房中 DAYS OF WEEK 0 Monday 1 Tuesday 2 Wednesday 3 Thursday 4 Friday 5 Saturday 6 Sunday class Recurri
  • 如何使用Python图像库(PIL)突出显示图像的一部分?

    如何突出显示图像的一部分 位置定义为 4 个数字的元组 你可以想象它就像我有电脑主板的图像 我需要突出显示例如CPU插槽所在的部分 请注意 对于 Python 3 您需要使用pillow https pypi org project Pil
  • 反转唯一的通用外键(并返回一个对象而不是相关管理器)

    我有一个具有独特通用外键关系的模型 class Contact models Model content type models ForeignKey ContentType object id models PositiveInteger
  • Discord.js 中的用户和 GuildMember 有什么区别?

    我的代码中出现了很多错误 我认为这些错误是由于两者之间的混淆造成的GuildMembers and Users 有人可以解释其中的区别吗 const user message mentions users first TypeError u
  • 解释 proxy.config.json 特性 Angular 5

    api target https localhost 8000 api secure false logLevel debug pathRewrite api changeOrigin true 请提供此代码片段中每个功能的详细使用 谢谢你
  • 是否使用 PHP 框架? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我已经开始用 PHP 编写一些应用程序 并且我对这门语言越来越熟悉 有人告诉我有关 CakePHP 和 CodeIgniter 的信息 我想更好
  • 将 pandas 数据框中的数字和字母字符串转换为 int/float

    我觉得必须有一个快速的解决方案来解决我的问题 我使用多个列表理解破解了一个实施不佳的解决方案 这无论如何都不理想 也许有人可以在这里帮忙 我有一组字符串值 例如 3 2B 1 5M 1 1T 其中最后一个字符自然表示百万 十亿 万亿 该集合
  • Ecto - 验证关联模型的存在

    如何验证 Ecto 中是否存在关联模型 schema foo do has many bar Bar timestamps end required fields w bar invalid 有办法这样做吗 并验证这些字段的最小 最大数量
  • Pandas:无法导入名称邻接

    来自韦斯 def side by side objs kwds from pandas core common import adjoin space kwds get space 4 reprs repr obj split n for
  • 通过引用传递变量并构造新对象

    你好 我有像下面这样的代码 但我不知道为什么它不起作用 class Clazz2 class Clazz public void smth Clazz2 c void smth2 const Clazz2 c class Clazz2 in
  • 升级到 webpack 4 后,Angular 应用程序中的 InjectionToken 配置没有

    我最近从 Webpack 2 升级到 4 Webpack 可以编译 并且大多数应用程序都可以正常工作 看来应用程序的一部分已损坏 我收到错误 NullInjectorError No provider for InjectionToken
  • 为什么 getView 在分离列表适配器上返回错误的 ConvertView 对象?

    我根据自己的需要改编了 Jeff Sharkey 的分离列表适配器 SeparatedListAdapter 得到了如下结果 public class SeparatedListAdapter
  • 如何在CSS中使div背景颜色透明

    我没有使用CSS3 所以我不能使用opacity or filter属性 如果不使用这些属性 我怎样才能使background color透明的一个div 它应该是这样的文本框示例link http www w3schools com cs
  • 在 Django 中创建员工用户

    我正在尝试在 Django 中创建一个员工用户 UserModel objects create user username A email email protected cdn cgi l email protection passwo
  • Android appcompat-v7:21.0.0 更改材质复选框颜色

    我已经更新了我的项目以使用最新的 appcompat 支持库 新版本使用材料设计复选框和单选按钮 我的应用程序是深色主题 复选框是黑色的 很难看到 我正在尝试根据以下内容更改它们的颜色保持兼容性 https developer androi
  • 存储过程中的条件 WHERE 子句

    这个问题可能归结为更简单的问题 但我仍然很好奇 SQL Server TSQL 能有多接近条件WHERE条款 以及为什么它们不存在背后的推理也很有趣 我有一个存储过程 对于一些参数 它接受一个枚举数组 它已相应地转换为用户定义的表类型 它本
  • 如果值包含逗号字符,如何使用 QSetting 读取值[重复]

    这个问题在这里已经有答案了 在我的 QT 项目中 我使用 QSettings 从 ini 文件读取值 如果该值包含逗号字符 QSettings 无法读取它 我应该如何读取这些值 逗号字符被视为列表分隔符QSettings 带逗号的 INI
  • 将关系 R 分解为 1NF 后最少存在多少张表?

    考虑具有以下属性类型的关系 R A B C D E F G 键总数 1 A 一组简单 或 原子 或 单值属性 B C 多值属性集 D E 复合属性集 F G 将关系 R 分解为 1NF 后 存在的表的最小数量是多少 A 3 B 2 C 4