這是一個非常探索性的問題。假設我們正在爲大學設計一個數據庫;這個地方有學期作爲基本的教育時間單位。一年有兩個學期,一個半學期在夏季。他們被稱爲術語來描述他們。如果我們想在某個時間點(例如2012年秋季或2013年春季或2013年夏季)指定一個術語的整數,那麼您認爲最好的複合整數是多少?爲數據庫中的列定義值的最佳方法
例如,對於2012年春季,最後一位數字是否爲20121?
謝謝!
這是一個非常探索性的問題。假設我們正在爲大學設計一個數據庫;這個地方有學期作爲基本的教育時間單位。一年有兩個學期,一個半學期在夏季。他們被稱爲術語來描述他們。如果我們想在某個時間點(例如2012年秋季或2013年春季或2013年夏季)指定一個術語的整數,那麼您認爲最好的複合整數是多少?爲數據庫中的列定義值的最佳方法
例如,對於2012年春季,最後一位數字是否爲20121?
謝謝!
嗯,正如我看到你把這個問題標記爲database-design
我不得不爭論將一個整數分配給兩個值:Year和Season。如果您有多字段字段,則無法在First Normal Form中使用表格。
當您嘗試爲其中一個字段運行查詢時,這會帶來複雜情況。你將無法輕鬆回答簡單的問題,比如「你有多少年?」而不分析數據。所以我的建議是將你正在談論的整數分成Year
和Season
。現在
,如果你堅持使用整數來存儲值......那麼你的解決方案似乎是完美的:)
不知道這是否將適用100%到你的情況,但我的工作大學已經遇到了這個問題。如果你的大學的學年開始於秋季,那麼你很幸運,因爲如果順序遞增,秋季,春季和夏季已經是時間上的,並且按字母順序排列。如果我需要一個可排序的組合,我使用計算的字段將年份和學期連接在一起。
這是我建議的:
YearSemester:
-------------
YearSemesterID (PK and autonumbering)
Year
Semester
YearSemester (formula Year + Semester, possibly indexed if your DB supports that)
如果你真的需要一個號碼,那麼你可以擺脫YearSemester領域,增加一個序列字段,併成立了一個觸發器,會做年+學期連接並在每次插入/更新/刪除時相應地分配序列號。
該術語非規範化的主要原因是因爲簡單的查詢,如「給我這個教授自2006年夏以來教過的課程」。由於該術語是一個整數,因此您可以對其進行數學計算以獲得結果。 – sunbomb 2012-02-29 03:45:31
您可以對標準化表格執行相同的操作,但您也可以擁有更多的靈活性。我的意思是你可以對非規範化解決方案做任何事情,但要以一種更簡單的方式進行。當你不需要時,你爲什麼要「進行數學計算」?這是不必要的處理,應該(必須)避免 – 2012-02-29 04:05:50
@sunbomb:「自2006年夏季以來」可以在一些DBMS中用簡單的WHERE(yearColumn,semesterColumn)> =(2006,2)' – 2012-02-29 08:06:10