澄清 1NF 违规 - DBMS

Clarification on 1NF Violation - DBMS

我正在设计一个以 'Semester' 作为实体的基础课程数据库。这里我有两个属性 "Season" (Fall, Spring, Summer) 和 "Year" (2015, 2016, 2017).

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

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

通常,您希望值是 2016Fall、2016Spring 和 2016Summer,这样它们就会按正确的分组排序——假设年份是学年。

无需替换现有属性。 year 和 semester/season 的组合按照它们的方式构成了一个非常好的复合键。不要害怕在有意义的地方使用复合键。

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

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

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