【问题标题】:Clarification on 1NF Violation - DBMS澄清 1NF 违规 - DBMS
【发布时间】:2017-07-24 17:14:32
【问题描述】:

我正在设计一个以“学期”为实体的基本课程数据库。这里我有两个属性“Season”(秋季、春季、夏季)和“Year”(2015、2016、2017)。

如果我用值 FALL16、SPRING16、FALL17 等替换这些属性以形成一个名为“Semester_Id”的键,我是否违反了第一范式?

【问题讨论】:

    标签: database-design normalization


    【解决方案1】:

    通常,您希望这些值分别为 2016Fall、2016Spring 和 2016Summer,以便它们按正确的分组排序 - 假设年份是学年。

    无需替换现有属性。年份和学期/季节的组合就像它们一样是一个非常好的复合键。不要害怕在有意义的地方使用复合键。

    实际上,您可以考虑将学期推入他们自己的查找表中,并将学期属性设为它的 FK。让 Season 成为一个独立的实体将为您提供潜在有用的扩展。查找表中的数据可能如下所示:

    ID   Name   Starts
     0   Fall   Last week of August
     1   Spring First week after the first Saturday of January
     2   Summer First week of May
    

    可能有很多关于您可能想要维护的季节或学期的信息。

    【讨论】:

      【解决方案2】:

      如果我们将 Semester_id 视为一个复合属性,那么它将两个域组合成一列违反了 1NF。但是,如果它仅用作没有解释的标识符,则它表示在规范化关系中有效的单个域。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-10-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-25
        • 1970-01-01
        相关资源
        最近更新 更多