我正在设计一个基本的课程数据库' Semester'作为一个实体。在这里,我有两个属性" Season" (秋季,春季,夏季)和"年份" (2015年,2016年,2017年)。
如果我替换这些属性以形成名为" Semester_Id"使用值FALL16,SPRING16,FALL17等,我是否违反了第1范式?
答案 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
可能有很多关于你可能想要维持的季节或学期的信息。