2010-01-13 67 views
1

我需要跟蹤得分和得分。此前,我這樣做是使用平面文件數據庫(這是一個爛攤子),看起來是這樣的:如何構建關係數據庫?數據

03611100025 
00001000000 
21011000000 
00003000000 
00021000000 
10001050000 
00001402000 
00001000100 
00001013050 
00001000100 
00001000000 

每個小組有一個行和列,我想整個事情變成了不大不小的圖形。現在我可以做到這一點是MySQL,但它會臃腫,並會強迫每行有一個荒謬的列數。

我覺得我一定會錯過一些其他極其簡單的方法。任何人都可以伸出援手嗎?

+0

0123在你的樣本分數數據庫中,你有第五支球隊打出自己瓦特/得分1 – cdeszaq 2010-01-13 17:56:13

+0

我想要一個改進方法的幾個原因之一。 – 2010-01-13 18:11:23

回答

5

有2個表格,團隊和遊戲,其中團隊有團隊名稱和團隊ID,遊戲有2個團隊ID(團隊1和團隊2)以及遊戲的得分。然後,在遊戲和團隊表之間有外鍵(用於完整性)。這將反映誰以最小的模式和非常簡單的結構來扮演誰和誰的得分。

Team 
|-------------------------| 
| Primary (int)| id  | 
|   (chr)| name  | 
|-------------------------| 

Game 
|-------------------------| 
| Primary (int)| team1 | 
| Primary (int)| team2 | 
|   (int)| score1 | 
|   (int)| score2 | 
|-------------------------| 

所以,有些樣本數據將如下所示:

Team 
|------------------| 
| id | name  | 
|------------------| 
| 1 | Blue Devils | 
| 2 | Cardinals | 
| 3 | Fish  | 
| 4 | Lemmings | 
|------------------| 

Game 
|---------------------------------| 
| team1 | team2 | score1 | score2 | 
|---------------------------------| 
|  1 |  2 |  7 |  8 | 
|  1 |  4 |  2 |  25 | 
|  2 |  3 |  8 |  2 | 
|  3 |  4 |  17 |  18 | 
|---------------------------------| 

該數據表明,球隊1(藍魔)播放隊2(紅雀)的得分爲7〜8的其餘部分數據是相似的。

如果你不需要跟蹤團隊名稱,你可以離開這個領域,但這往往是有用的信息。

所以,用這個模式,你會得到一個特定的團隊分數與像

SELECT * FROM Game g 
INNER JOIN Team t on t.team1 = g.id 

查詢,如果你需要,喜歡當比賽發生(日期然後,您可以還添加其他信息)以及其他任何信息,例如關於遊戲或團隊的其他統計信息。

+0

我覺得這很有幫助,但我恐怕還是很困惑。 : - /你能解釋一下嗎? – 2010-01-13 17:37:17

+1

請記住,您需要確保只存儲一對數據,即如果您將數據存儲在team1-team2的遊戲表中,則不要存儲team2-team1。通過簡單地將隊列中的最低ID放在第一列或類似的地方來做到這一點。 – villintehaspam 2010-01-13 17:39:23

+0

我正在努力解決這個問題。第一個表似乎什麼都不做,只是分配了一個ID(我有點困惑,爲什麼這是必要的,但我會繼續)。那麼第二張桌子有兩個初選(這是否意味着他們共享一排?)以及他們之間的分數。團隊表還會有一個您省略的分數列?關於在遊戲中分享排名的初選是否正確? 再次感謝 – 2010-01-13 17:48:29

1

第一個響應是正確的。如果您將數據組織到關係中,併爲每個關係創建一個表格,則數據將更容易處理。您需要在關係數據庫設計中進行的背景學習將向您介紹更多相關信息。

如果您使用響應中的團隊和遊戲結構,仍然可以將該結構轉換爲您在問題中想象的結構類型。這個過程被稱爲「交叉製造」或「旋轉」,並在教程中詳細記錄。

雖然從關係結構轉移到交叉結構很容易,但以其他方式很困難。將其他查詢編寫爲交叉製表數據也很困難。一個例子可能是找到對每個團隊評分最高的分數。如果你把你的數據放在數據庫中,遲早你會想要做更多的事情。