2011-03-01 45 views
2

我正在開發一個數據庫來存儲體育聯盟的統計數據。 我想顯示幾個表:體育聯盟數據庫設計

  • 名次表,表示在當前和以前的燈具球隊的位置
  • 表,顯示了球隊的每一個燈具在積分榜上的位置

我有一個匹配表:

  • 匹配(IdMatch,IdTeam1,IdTeam2,GoalsTeam1,GoalsTeam2)

有了這個表格,我可以根據球隊的比賽數據計算出每個球隊的總積分。但每次我想要顯示聯盟表時,我都必須計算積分。

另外我有一個問題,以計算在哪個位置歸類在過去10個燈具組中的一個球隊,因爲我必須做10個查詢。

要保存排名表在一個數據庫表中的每個夾具是另一種方法,但每次我改變比賽已經發揮我不得不重新計算從那裏每個燈具...

是否有更好的方法解決這個問題?

謝謝

回答

0

我假設遊戲每天或每週發生一次。

如果是這樣,您可以在更新匹配之後運行觸發器或批處理操作,並將這些結果存儲在彙總表中。

這樣計算每場比賽只發生一次。

+0

那麼,沒關係。比賽可以隨時更新。從比賽表計算聯賽表不是問題。問題是我想要計算一個球隊的位置,例如,最近的10個裝置。這就是我在桌子上爲每個燈具儲存聯賽表的原因 – John 2011-03-01 07:40:41

3

問題在於(例如)球隊在過去10場比賽中的位置或排​​名是派生數據。因此,將它存儲在表中並且完全沒有必要,它會創建一個更新異常,在那裏沒有。當然,像往常一樣,無論何時創建重複記錄,您都會遇到相應的問題,使它們保持最新並且彼此保持同步,解決這些問題的方法永遠不會合理。因此,不要在第一時間創建重複副本,而且您不會在第二個地方產生結果,也不會在第三個地方編寫半副本。

只需爲源自真實源表的所有結果集(即您認爲是「表」)創建視圖。這包括任何排名或職位名單;在任何情況下(夾具,冠軍,聯賽,國家)。

在SQL中獲取排名或位置很容易。但代碼取決於你擁有哪種SQL(或非SQL)風格。有些風格不能處理子查詢,而是提供一個RANK()函數。如果你指定你有哪些SQL,我可以提供細節。