coisini002 2023-03-28 20:51 采纳率: 51.6%
浏览 96
已结题

若关系R的候选码都是由单属性构成的,则R的最高范式必定是

若关系R的候选码都是由单属性构成的,则R的最高范式必定是( B  )。
A. 1NF            
B. 2NF
C. 3NF           
D.无法确定
为什么是2NF的

  • 写回答

2条回答 默认 最新

  • 星拱北辰 Python领域优质创作者 2023-03-28 22:36
    关注

    先温习基础知识:
    若关系中的一个属性或属性组的值能够唯一地标识一个元组,且他的真子集不能唯一的标识一个元组,则称这个属性或属性组做候选码。
    若一个关系有多个候选码,则选定其中一个为主码。
    1NF:确保每个属性都是原子性的,即不可再分。一个属性中不能包含另一个属性的集合,例如一个地址属性中不能包含街道、城市、国家等属性。
    2NF:在满足1NF的基础上,每个非主属性完全依赖于主键,而不是只依赖于主键的一部分。如果主键是由多个属性组成的复合键,那么非主属性就要依赖于所有的主键属性,而不是只依赖于其中一部分。
    3NF:在满足2NF的基础上,每个非主属性不依赖于其他非主属性。换句话说,每个非主属性都必须直接依赖于主键。如果存在非主属性之间的依赖关系,就要把它们拆分成单独的表,每个表都应该有自己的主键。
    下面分析选项:
    R是一个关系,关系型数据库的关系必然满足1NF,即每个属性都是原子的,而不是复合的。
    在R满足1NF的基础上,由于关系R的候选码都是由单属性构成的,因此即便存在非主码属性依赖于主码属性,那也只能完全依赖于主码,而不能部分依赖于主码,因此R满足2NF。
    “关系R的候选码都是由单属性构成的”不能保证关系R的每个非主属性不依赖于其他非主属性。如果R的非主属性之间存在传递依赖关系,即存在一个非主属性A,它依赖于R的主属性,而另一个非主属性B又依赖于A,则R就不满足3NF。这时候就需要对R进行分解,使得新关系集合能够保持函数依赖关系,同时保持数据的一致性和完整性。因此,关系R不满足3NF。
    因此,关系R最高必然满足2NF,不一定满足3NF,所以选B。
    如果我的回答对你有帮助,还望采纳。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
  • CSDN-Ada助手 CSDN-AI 官方账号 2023-03-28 23:03
    关注
    • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7458053
    • 这篇博客你也可以参考下:数据库系统概论 第六章 关系数据库理论(2)关系范式的概念,第一范式1NF 第二范式2NF 第三范式3NF BC范式(BCNF投影分解法,删除异常,数据冗余毒大,修改复杂,规范化小结
    • 除此之外, 这篇博客: 数据库范式详细介绍(1NF,2NF,3NF,BCNF,4NF)中的 我们考虑一个小学的教务管理系统,学生上课指定一个老师,一本教材,一个教室,一个时间,大家都上课去吧,没有问题。那么数据库怎么设计?(学生上课表) 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
    • 学生    课程      老师  老师职称   教材      教室   上课时间
      小明  一年级语文(上)   大宝  副教授  《小学语文1》   101    14:30

      一个学生上一门课,一定在特定某个教室。所以有(学生,课程)->教室

      一个学生上一门课,一定是特定某个老师教。所以有(学生,课程)->老师

      一个学生上一门课,他老师的职称可以确定。所以有(学生,课程)->老师职称

      一个学生上一门课,一定是特定某个教材。所以有(学生,课程)->教材

      一个学生上一门课,一定在特定时间。所以有(学生,课程)->上课时间

      因此(学生,课程)是一个码。

      然而,一个课程,一定指定了某个教材,一年级语文肯定用的是《小学语文1》,那么就有课程->教材。(学生,课程)是个码,

      课程却决定了教材,这就叫做不完全依赖,或者说部分依赖。出现这样的情况,就不满足第二范式 !有什么不好吗?你可以想想:

      在这里插入图片描述

      • 校长要新增加一门课程叫“微积分”,教材是《大学数学》,怎么办?学生还没选课,而学生又是主属性,主属性不能空,课程怎么记录呢,教材记到哪呢? ……郁闷了吧?(插入异常)

      • 下学期没学生学一年级语文(上)了,学一年级语文(下)去了,那么表中将不存在一年级语文(上),也就没了《小学语文1》。这时候,校长问:一年级语文(上)用的什么教材啊?……郁闷了吧?(删除异常)

      • 校长说:一年级语文(上)换教材,换成《大学语文》。有10000个学生选了这么课,改动好大啊!改累死了……郁闷了吧?(修改异常)

      那应该怎么解决呢?们必须消除这些部分函数依赖,只有一个办法,就是将大数据表拆分成两个或者更多个更小的数据表,在拆分的过程中,要达到更高一级范式的要求,这个过程叫做”模式分解“。模式分解的方法不是唯一的,以下是其中一种方法:将一个表分解成两个或若干个表。

      在这里插入图片描述

      学生表

      学生   课程       老师     老师职称    教室     上课时间
      小明   一年级语文(上)   大宝      副教授     101       14:30

      课程表

      课程            教材
      一年级语文(上)   《小学语文1》

      (这里还涉及到一个如何进行模式分解才是正确的知识点,先不介绍了)
      现在我们来看一下,进行同样的操作,是否还存在着之前的那些问题?

      1. 一年级语文(上)换教材,换成《大学语文》
        只需要修改一次一年级语文(上)对应的教材的值即可。——有改进
      2. 下学期没学生学一年级语文(上)了,学一年级语文(下)去了,那么表中将不存在一年级语文(上),也就没了《小学语文1》。
        该教材尚在。——有改进
      3. 删除老师中所有的学生记录
        该老师的信息仍然全部丢失。——无改进
      4. 插入一个尚无学生的新老师的信息。
        因为学生表的码是学生和课程,不能为空,所以此操作不被允许。——无改进

      所以说,仅仅符合2NF的要求,很多情况下还是不够的,而出现问题的原因,在于仍然存在非主属性系主任对于码学号的传递函数依赖。为了能进一步解决这些问题,我们还需要将符合2NF要求的数据表改进为符合3NF的要求。


      第三范式(3NF):符合2NF,并且消除了非主属性对于候选码的传递函数依赖。

      • 如果存在非主属性对于码的传递函数依赖,则不符合3NF的要求。

      接下来我们看看上面2NF图中的设计,是否符合3NF的要求。
      对于课程表,主码为课程,主属性为课程,非主属性只有一个,为教材,不可能存在传递函数依赖,所以表2的设计,符合3NF的要求。
      对于学生表,主码为(学生,课程),主属性为学生和课程,非主属性为老师、老师职称和教室。
      因为(学生,课程) → 老师,同时老师 → 老师职称,所以存在非主属性系老师对于码(学生,课程)的传递函数依赖,所以表1的设计,不符合3NF的要求。
      为了让数据表设计达到3NF,我们必须进一步进行模式分解为以下形式:
      学生表(学生,课程,老师,教室,上课时间)
      课程表(课程,教材)
      老师表(老师,老师职称)
      对于课程表,符合3NF的要求,之前已经分析过了。
      对于学生表,码为(学生,课程),主属性为学生和课程,非主属性为老师、教室和上课时间,不可能存在非主属性对于码的传递函数依赖,所以符合3NF的要求。
      对于老师表,码为老师,主属性老师,非主属性为老师职称,不可能存在非主属性对于码的传递函数依赖(至少要有三个属性才可能存在传递函数依赖关系),所以符合3NF的要求。

      在这里插入图片描述

      学生表

      学生   课程       老师        教室       上课时间
      小明   一年级语文(上)   大宝         101         14:30

      课程表

      课程            教材
      一年级语文(上)   《小学语文1》

      老师表

      老师            老师职称
      大宝           副教授

      现在我们来看一下,进行同样的操作,是否还存在着之前的那些问题?

      1. 删除某个老师中所有的学生记录
        该老师的信息不会丢失。——有改进
      2. 插入一个尚无学生的新老师的信息。
        因为老师表与学生表目前是独立的两张表,所以不影响。——有改进

      BCNF:符合3NF,并且消除主属性对于码的部分与传递函数依赖

      • 满足3NF,消除每一属性对候选码的部分与传递依赖

      在这里插入图片描述
      存在关系:

      书号→书名

      (书名、作者)→书号

      其中,每一个属性都为主属性,但是上述关系存在传递依赖,不能是BCNF。即:

      (书名、作者)→书号→书名

      (书名、作者)→书名

      即出现主属性书号对(书名,作者)码的传递依赖

      我们可以通过分解为两张表,实现BCNF。

      在这里插入图片描述

      答:已知函数依赖集:
      仓库名 → 管理员,管理员 → 仓库名,(仓库名,物品名)→ 数量
      码:(管理员,物品名),(仓库名,物品名)
      主属性:仓库名、管理员、物品名非主属性:数量

      在这里插入图片描述

      ∵ 不存在非主属性对码的部分函数依赖和传递函数依赖。
      ∴ 此关系模式属于3NF。
      基于此关系模式的关系(具体的数据)可能如图所示:
      在这里插入图片描述
      好,既然此关系模式已经属于了 3NF,那么这个关系模式是否存在问题呢?我们来看以下几种操作:

    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 4月12日
  • 已采纳回答 4月4日
  • 请采纳用户回复 3月29日
  • 创建了问题 3月28日

悬赏问题

  • ¥15 Java环境配了,但启用不成功。
  • ¥15 求一个智能家居控制的代码
  • ¥15 ad软件 pcb布线pcb规则约束编辑器where the object matpcb布线pcb规则约束编辑器where the object matchs怎么没有+15v只有no net
  • ¥15 虚拟机vmnet8 nat模式可以ping通主机,主机也能ping通虚拟机,但是vmnet8一直未识别怎么解决,其次诊断结果就是默认网关不可用
  • ¥20 求各位能用我能理解的话回答超级简单的一些问题
  • ¥15 yolov5双目识别输出坐标代码报错
  • ¥15 这个代码有什么语法错误
  • ¥15 给予STM32按键中断与串口通信
  • ¥15 使用QT实现can通信
  • ¥15 关于sp验证的一些东西,求告知如何解决,