我正在设计一门基础课程数据库,并将'学期'作为一个实体。在这里,我有两个属性“季节”(秋季,春季,夏季)和“年”(2015年,2016年,2017年)。关于1NF违规的澄清 - DBMS
如果我将这些属性替换为一个名为“Semester_Id”的键值为FALL16,SPRING16,FALL17等,我违反了第一范式吗?
我正在设计一门基础课程数据库,并将'学期'作为一个实体。在这里,我有两个属性“季节”(秋季,春季,夏季)和“年”(2015年,2016年,2017年)。关于1NF违规的澄清 - DBMS
如果我将这些属性替换为一个名为“Semester_Id”的键值为FALL16,SPRING16,FALL17等,我违反了第一范式吗?
一般而言,您希望值为2016Fall,2016Spring和2016Summer,因此他们会按正确的分组顺序 - 假定年份为学年。
没有必要替换现有的属性。学年和学期/季节的组合使他们成为完美的组合键。不要害怕在有意义的地方使用组合键。
实际上,您可能会考虑将学期推到自己的查找表中,并将学期属性设置为FK。使季节成为自己的实体会给你潜在的有用的扩展。查找表中的数据可能如下所示:
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
可能有许多关于您可能想要维护的季节或学期的信息。
如果我们将Semester_id视为复合属性,那么它将两个域合并到一个列中,从而违反了1NF。但是,如果它仅用作标识符而没有解释,则它表示在标准化关系中有效的单个域。