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

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

先温习基础知识:
若关系中的一个属性或属性组的值能够唯一地标识一个元组,且他的真子集不能唯一的标识一个元组,则称这个属性或属性组做候选码。
若一个关系有多个候选码,则选定其中一个为主码。
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。
如果我的回答对你有帮助,还望采纳。

  • 这个问题的回答你可以参考下: 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,那么这个关系模式是否存在问题呢?我们来看以下几种操作: