2017-03-04 93 views
1

我正在设计一门基础课程数据库,并将'学期'作为一个实体。在这里,我有两个属性“季节”(秋季,春季,夏季)和“年”(2015年,2016年,2017年)。关于1NF违规的澄清 - DBMS

如果我将这些属性替换为一个名为“Semester_Id”的键值为FALL16,SPRING16,FALL17等,我违反了第一范式吗?

回答

1

一般而言,您希望值为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 

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

2

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