2012-03-09 68 views
1

我想創建一個足球比分數據庫。如何設計我的數據庫?

顯然,我們有:

  • 國家(荷蘭,德國,(但也是歐洲))
  • 比賽(荷甲,德甲聯賽,歐洲聯賽)
  • (特溫特,拜仁慕尼黑,馬德里競技隊)
  • 球員(Luuk de J翁,諾伊爾,蒂亞戈·門德斯)
  • 匹配(特溫特 - 埃因霍溫,拜仁 - 勒沃庫森等)
  • 活動(目標由盧克·德容第40分鐘)

我進球「M使用在我創建下面的方案Dezign:

enter image description here

顯然,競爭勢必一個國家,一個球員到隊,E tc。

但是後來出現了一些問題。一個事件屬於一個匹配和一個玩家。所以該事件可以得到match_idplayer_id。但是,任何球隊的任何球員都可以在他不屬於的比賽中「得分」(C隊的球員可以在A隊和B隊的比賽中得分)。我怎樣才能限制這個例子?

此外,一支球隊可以在其「正常」比賽中競爭,也可以參加歐冠聯賽。因此,Team實體中的一個簡單的competition_id是不夠的。

你有什麼建議嗎?

編輯迴應菲利普 enter image description here

回答

1

你缺乏表達​​與LineupPosition (lineup, player)沿實體。

然後,您可以關聯與LineupPosition(在特定的匹配特定玩家)的Event,從而將您的Event正確Match,通過LineupPosition - >Lineup - >Match

+0

查看已添加圖片的問題,你的意思是這樣的?我可以看到它確實會對比賽得分問題之外的球員起作用。但是我怎麼能限制兩個以上''陣容'具有相同的'match_id'? – nhaarman 2012-03-09 14:59:22

+0

陣容中沒有'match_id',而是Match中的'home_lineup_id'和'away_lineup_id'。這樣,每場比賽只能有兩個陣容,而且不會丟失主/主信息。 – 2012-03-09 20:23:54

+0

我再次編輯了圖像。非常感謝,我認爲我還有最後一個問題。當我在'LineupPosition'中創建條目時,我可以將來自多個團隊的玩家添加到同一個'lineup_id'。這可以派上用場(例如國家隊),但對於'正常'比賽來說,這是不可能的。對此有何想法? – nhaarman 2012-03-09 21:22:01