对1NF违规行为的澄清 - DBMS

时间:2017-03-04 16:36:57

标签: database-design normalization

我正在设计一个基本的课程数据库' Semester'作为一个实体。在这里,我有两个属性" Season" (秋季,春季,夏季)和"年份" (2015年,2016年,2017年)。

如果我替换这些属性以形成名为" Semester_Id"使用值FALL16,SPRING16,FALL17等,我是否违反了第1范式?

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分: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

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