2013-02-28 53 views
0

其實我正在爲學術機構建立一個軟件,所以我只是想知道幾個問題的答案:更多表或更多行更好的SQL?

如你所知,一些新的數據將每年產生(對於新入學),有些將被升級。因此,我應該將所有數據存儲在一個學年分開的單一表格中(像ac_year這樣的列),或者我應該爲每年製作單獨的表格。此外,還有不同的表格來存儲學生的信息,例如課程,商標,費用,宿舍等。因此,每個信息,像費將被存儲在像 費2010 費2011 費-2012不同的表...

還是以1個換單費表一年爲列。

還有一點是,1-2年後不久,數據庫會變得更重,因此可以在單一表中備份一年的數據(比如年費爲列的費用)?

而且 請回答心靈的SQL Server 2005保持

感謝

+0

請詳細說明。你需要表明你做了什麼努力。請編輯你的問題,否則恐怕沒有人能夠幫助你 – DevelopmentIsMyPassion 2013-02-28 14:14:36

+0

請在所有這些表上添加'ac_year'列。每年一張桌子的不同版本是一個維護噩夢,而且會極大地複雜化後查詢您的數據 – Lamak 2013-02-28 14:14:50

+0

yup,但還有一件事是,如果我將所有信息存儲在單個表中,那麼在數年後數據庫將會獲得重。那麼我將如何從表中備份1年的數據。我也可以稍後從表中分離(備份和刪除)數據。 – user2106652 2013-02-28 14:22:49

回答

1

這不是典型的存儲在基於時間約束的多個表中的數據。我寧願將它全部存儲在一張表中。將來,您可能會考慮歸檔舊數據,但在性能成爲問題之前它仍然是一段重要的時間。

+1

通常,如果確實需要按時間分解結果,則需要創建分區表(儘管真正的分區只適用於SQL 2005中的Enterprise)。分區可以顯着提高性能,但除非需要處理大量行,否則不是真正需要的。對於入學的學生來說,這可能並不需要(除非你可能一次爲德克薩斯州的每所學校招生)。 – 2013-02-28 14:17:47

+0

:)是的,但實際上我會將學生的圖像存儲在數據庫中,以便它可以用於其他網絡客戶端。 – user2106652 2013-02-28 14:25:11

1

向實體添加新屬性總是比爲每個不同屬性創建新實體更好的選擇。這樣維護和查詢將會更容易。 在查詢的性能部分,您不必擔心數據和數據庫的內部事務。如果出現真正的性能問題,像您的情況一樣,有許多解決方案像創建索引一樣。

2

就這個問題而言,答案顯然是將數據存儲在一張表中,並將年份(或日期或其他信息)作爲列存儲。這只是正確的做法。隨着時間的推移,你正在處理同一個實體。

有一個例外情況是,當這些字段從一年到下一年顯着變化時。我懷疑你的桌子是這種情況。

如果您的數據庫真的變大了,那麼您可以考慮按時間對錶進行分區。每個分區將是一年的數據。這將加速只需訪問一年的查詢。它也有助於備份和恢復數據。這可能是您最終尋找的解決方案。

「真正變大」意味着表中至少有數百萬行。即使在表中有幾百萬行,大多數查詢也可能在具有適當索引的體面硬件上運行良好。