我需要为我拥有的一些数据创建一个数据库,所以我对它进行了一次破解(正如你所希望的那样),现在我需要帮助对它进行最后的修改!你能帮我正常化吗?
我使用假数据:
拍摄了我在Excel中创建的设计图片
你应该知道的是,有些游戏将播放5v5,有些将播放3v3。而不是为Team1P1,Team1P2,Team1P3等添加列,我想让专家帮我做这个。
问题:根据我的文件解析器,我的应用程序会知道游戏是否有6个玩家(3v3)或10个玩家(5v5)。如何构建数据库以将这些玩家映射回游戏?我应该在Player
中添加指向Games
的列吗?
Players
数据放入Game ID
表格中
球员:
id | player_id | game_id |等...
编辑以澄清
Picture Starcraft 2,或在线玩的任何其他RTS游戏。当游戏开始时,它是一个全新的平板。一定数量的球员加入比赛(3v3或5v5)并相互比赛。在游戏结束时,每个人都有一定的统计值(他们输了还是输了?他们有多少金牌?他们有多少杀人,死亡,助攻?)
这些统计数据中的每一个都特定于该游戏中的该玩家。
如果我那天玩2场比赛,我会是这样的:
id | player_id | stat1 | stat2 | stat3 |
1 | 100 | 500 | 600 | 700个
2 | 100 | 300 | 999 | 2000
答案 0 :(得分:2)
我会制作另一张桌子来映射玩家和游戏。
我还注意到你在播放器表中有统计数据。
为玩家统计数据创建另一个表可能是更好的选择。这样,如果您希望将来添加其他一些统计信息,则无需更改表格。
表game_players:
game id // PK
player id // PK
表格统计数据:
id
player id
type (e.g. stat1)
stat
答案 1 :(得分:2)
我大多同意PeeHaa的回答,尽管我有一些改变。首先,我同意您提出的两个表格中的id
字段(pr0tocol)令人困惑,因为您还有game_id
和player_id
字段。只需使用它们。
我也同意您应该有一个单独的game_players
表格,该表格仅包含game_id
和player_id
,并且这两个字段合并为表格的主键。
我觉得你的stats
表应该与game_players
表的键相同。这样,您不仅可以跟踪每个玩家的统计数据,而且还可以报告各个游戏的统计数据。
编辑:
游戏:
key
game_id | game_length | game_mode | game_type | ranked
玩家:
key
player_id | other player data - no stats in here
Game_Players
key | key
game_id | player_id
统计
key | key
game_id | player_id | stat1 | stat2 | stat3 | etc...
使用这四个表格,您可以跟踪所有统计数据,并能够根据您选择的任何报告,根据玩家或游戏将其分开。现在分配单个玩家的游戏数量并不重要,因为它只是相关表格中关键字的一部分。
答案 2 :(得分:0)
Game
----
GameId
Length
Mode
Type
Ranked
PRIMARY KEY (GameId)
Team
----
TeamId
TeamName (only if you need it)
... other stuff about team
PRIMARY KEY (TeamId)
Player
------
PlayerId
PlayerName
... other stuff about player
PRIMARY KEY (PlayerId)
哪位球员参加哪支球队:
TeamPlayer
----------
TeamId
PlayerId
PRIMARY KEY (TeamId, PlayerId)
FOREIGN KEY (TeamId)
REFERENCES Team(TeamId)
FOREIGN KEY (PlayerId)
REFERENCES Player(PlayerId)
哪支队伍参加哪场比赛:
GameTeam
--------
GameId
TeamId
PRIMARY KEY (GameId, TeamId)
FOREIGN KEY (GameId)
REFERENCES Game(GameId)
FOREIGN KEY (TeamId)
REFERENCES Team(TeamId)
和统计数据:
GamePlayerStatistics
--------
GameId
TeamId
PlayerId
... statistics columns per player per game
PRIMARY KEY (GameId, PlayerId)
FOREIGN KEY (GameId, TeamId)
REFERENCES GameTeam(GameId, TeamId)
FOREIGN KEY (TeamId, PlayerId)
REFERENCES TeamPlayer(TeamId, PlayerId)
如果您的所有游戏都有两个游戏,那么可以删除GameTeam
表。然后,您需要Game
中的两列,例如Team1Id
和Team2Id
作为Team
的外键,以及对Statistics
表的一些修改。