我正在設計一門基礎課程數據庫,並將'學期'作爲一個實體。在這裏,我有兩個屬性「季節」(秋季,春季,夏季)和「年」(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。但是,如果它僅用作標識符而沒有解釋,則它表示在標準化關係中有效的單個域。