0

我有一個非常基本的問題。我正在設計一個數據庫來跟蹤某些人羣中正在玩的國際象棋比賽。我正在考慮創建一個球員表,這個球員表將包含每個球員的細節。主鍵是玩家ID。設計一個數據庫 - 玩過的遊戲表

我的問題是關於遊戲與玩家的關聯。 我最初的想法是創建一個遊戲桌。其中的每一條記錄都是一個遊戲,它將有2列玩家(玩家ID)玩過它,第三列將成爲贏家(或抽獎)。

什麼是最好的設計方法?如果第三列值爲玩家ID,或者我可以指定1,如果第一列中的玩家贏了遊戲,否則爲0。我該如何處理繪畫案例?我是否插入一些關鍵字?

我也想知道是否有一些完全的其他方式來設計這個數據庫。

回答

0

崇高,有幾種方法可以定義這個數據庫的結構。您最終選擇哪種設計取決於性能預期和數據庫的最終維護要求。我會建議閱讀正常化,這將讓您瞭解以各種方式設計表格的優缺點。

爲了回答您的具體問題,我想:

請即由該領域的遊戲表:

  • 遊戲ID(主鍵)
  • 播放器1個ID(外鍵,您的球員表)
  • 玩家2 ID(外鍵,你的球員表)
  • 比賽結果

要點這裏要注意:

  • 我包括遊戲ID主鍵來唯一標識,從另一個遊戲。如果沒有這些,你將無法區分同一玩家玩過的多個遊戲。您可能會或可能不會在您的實施中要求這一點。

  • 遊戲結果可能包含基於您將數據提取到一些有意義的表示方法的不同值集合。例如,一些可能性是:

    • 讓遊戲結果等於玩家ID或0或-1來指示平局。在我看來,最不喜歡的是,因爲這導致了該領域所代表的數據的一致性問題。

    • 使遊戲結果等於預定義的可能值列表(1 =玩家1贏了,2 =玩家2贏了,3 =繪製,4 =仍在進行中等)。可能的值可能是它自己的表。這種方法需要更廣泛的查詢計劃。

你也可以組織你的數據,包括:

  • 一個球員表 - 球員資料
  • 的比賽用表 - 遊戲信息
  • 結果表格 - 遊戲結果信息

在此設置中,您R遊戲桌只包括遊戲ID和玩家ID。結果表將包括遊戲ID和使用上述解決方案之一識別勝利者的遊戲結果。

0

這裏是我的觀點:

  • 我不喜歡的兩列「玩家1」和「玩家2」的想法。當試圖獲得「傑夫」所玩的所有遊戲的列表時,您必須檢查「玩家1」和「玩家2」列中的他的ID。
  • 你可以通過實現一個'GamePlay'類型的表格來修正上述問題,該表格對每個玩家都有不同的行。這樣每個玩家都有自己的結果,並被保存在一個列中以便查詢。
  • 一個可能的結果單獨的表將是整潔。

我已經起草了一個例子如下

GameResult - 參考表,比賽結果

GameResultId | Desc 
01   | Won 
02   | Lost 
03   | Drew 

遊戲 - 這是遊戲表,列出了遊戲。可以有位置,日期,時間等詳細信息。

GameId | StartTime | Location | Ect 
01  | 13:00  | Park | ect.. 

遊戲 - 對每個成員遊戲互動一行。

GamePlayId | GameId | PlayerId | GameResultId 
01   | 01  | 01  | 01 
02   | 01  | 02  | 02 

這樣,您可以通過您的玩家查詢更容易。 (如讓所有玩家誰贏得了比賽名單)

SELECT 
     p.PlayerName 
FROM 
     Player p 
     INNER JOIN GapePlay gp 
     ON p.PlayerId = gp.PlayerId 
WHERE gp.GameresultId = 1 

,你可以通過遊戲仍然很容易查詢過

SELECT 
    gp.GameId 
, p.Name 
, gr.Desc 
FROM 
    GamePlay gp 
    INNER JOIN Player p 
    ON gp.PlayerId = p.PlayerId 
    INNER JOIN GameResult gr 
    ON gp.GameresultId = gr.GameResultId 
WHERE 
    GamePlayId = 01