Sql 比赛、球员和比赛关系

Sql 比赛、球员和比赛关系,sql,database-design,Sql,Database Design,我在多个赛季的多场比赛中有多个球员(表:球员、锦标赛、赛季)。因此,两名球员之间的比赛必须参考特定的锦标赛和特定的赛季 table match id season_id tournament_id player_home player_away 比如说,为了明显的好处,让球员参加比赛可能是很自然的。我能在赛季和锦标赛之间做一个一对多的表格(称为表格比赛),然后为比赛和球员做一个多对多的表格吗 table competition id sea

我在多个赛季的多场比赛中有多个球员(表:球员、锦标赛、赛季)。因此,两名球员之间的比赛必须参考特定的锦标赛和特定的赛季

table match
    id
    season_id
    tournament_id
    player_home
    player_away
比如说,为了明显的好处,让球员参加比赛可能是很自然的。我能在赛季和锦标赛之间做一个一对多的表格(称为表格比赛),然后为比赛和球员做一个多对多的表格吗

table competition
    id
    season_id
    tournament_id

table competition_player
    id
    competition_id
    player_id

table match
    id
    competition_id
    player_home
    player_away
还是有更简单/更好的方法来实现这一点

谢谢你的建议。

SqlFiddle 非常基本,但你仍然可以看到这种关系

结构 表格

--------------------------
|Id | Name | OtherInfo   |
--------------------------
| 1 | John | Player Info |
--------------------------
| 2 |  Tom | Player Info |
--------------------------
-----------------------------------
|Id | SeasonName    | SeasonInfo  |
-----------------------------------
|01 | MyFirstSeason | Season Info |
-----------------------------------
---------------------------------------
| Id | FirstPlayerId | SecondPlayerId |
---------------------------------------
| A  |       1       |       2        |  
---------------------------------------
-----------------------------------------------
| Id | TournamentId | EncounterId | MatchInfo |
-----------------------------------------------
|0001|     001      |      A      | Some Info |
-----------------------------------------------
  • 玩家

    --------------------------
    |Id | Name | OtherInfo   |
    --------------------------
    | 1 | John | Player Info |
    --------------------------
    | 2 |  Tom | Player Info |
    --------------------------
    
    -----------------------------------
    |Id | SeasonName    | SeasonInfo  |
    -----------------------------------
    |01 | MyFirstSeason | Season Info |
    -----------------------------------
    
    ---------------------------------------
    | Id | FirstPlayerId | SecondPlayerId |
    ---------------------------------------
    | A  |       1       |       2        |  
    ---------------------------------------
    
    -----------------------------------------------
    | Id | TournamentId | EncounterId | MatchInfo |
    -----------------------------------------------
    |0001|     001      |      A      | Some Info |
    -----------------------------------------------
    
  • 季节

    --------------------------
    |Id | Name | OtherInfo   |
    --------------------------
    | 1 | John | Player Info |
    --------------------------
    | 2 |  Tom | Player Info |
    --------------------------
    
    -----------------------------------
    |Id | SeasonName    | SeasonInfo  |
    -----------------------------------
    |01 | MyFirstSeason | Season Info |
    -----------------------------------
    
    ---------------------------------------
    | Id | FirstPlayerId | SecondPlayerId |
    ---------------------------------------
    | A  |       1       |       2        |  
    ---------------------------------------
    
    -----------------------------------------------
    | Id | TournamentId | EncounterId | MatchInfo |
    -----------------------------------------------
    |0001|     001      |      A      | Some Info |
    -----------------------------------------------
    
  • Tournements

    ------------------------------------
    | Id | SeasonId | TournamentName   |
    ------------------------------------
    |001 |    01    | MyFirstTournament|
    ------------------------------------
    
  • 遭遇战

    --------------------------
    |Id | Name | OtherInfo   |
    --------------------------
    | 1 | John | Player Info |
    --------------------------
    | 2 |  Tom | Player Info |
    --------------------------
    
    -----------------------------------
    |Id | SeasonName    | SeasonInfo  |
    -----------------------------------
    |01 | MyFirstSeason | Season Info |
    -----------------------------------
    
    ---------------------------------------
    | Id | FirstPlayerId | SecondPlayerId |
    ---------------------------------------
    | A  |       1       |       2        |  
    ---------------------------------------
    
    -----------------------------------------------
    | Id | TournamentId | EncounterId | MatchInfo |
    -----------------------------------------------
    |0001|     001      |      A      | Some Info |
    -----------------------------------------------
    
  • 匹配

    --------------------------
    |Id | Name | OtherInfo   |
    --------------------------
    | 1 | John | Player Info |
    --------------------------
    | 2 |  Tom | Player Info |
    --------------------------
    
    -----------------------------------
    |Id | SeasonName    | SeasonInfo  |
    -----------------------------------
    |01 | MyFirstSeason | Season Info |
    -----------------------------------
    
    ---------------------------------------
    | Id | FirstPlayerId | SecondPlayerId |
    ---------------------------------------
    | A  |       1       |       2        |  
    ---------------------------------------
    
    -----------------------------------------------
    | Id | TournamentId | EncounterId | MatchInfo |
    -----------------------------------------------
    |0001|     001      |      A      | Some Info |
    -----------------------------------------------
    
问题是你用了很多钥匙却一无所获。你只需要退一步思考一下设计。我知道我删掉了一些专栏,但这只是为了示例。我相信你知道该把它们放回哪里。我只是想展示这些表之间的关系

查询 让我们暗示您只需要基本信息(再一次仅用于示例)


连接是关系数据库的核心。您想对系统做什么?您是在构建OLAP系统(例如:分析球员表现)还是OLTP系统(例如:在线比赛构建和评分服务)?OLTP。比赛结果会被放入每项比赛的排名表中。@freddieoff我用小提琴更新了我的答案。只是为了显示关系。我并不在乎是否显示链接表的名称或Id。我只是想测试我的查询。希望你喜欢:)@PhaDaPhunk谢谢你抽出时间。也许是一个正常化的问题,相同的锦标赛名称在多个赛季重复出现。而且,如果没有比赛和球员之间的多对多关系,很难看出谁属于谁。