Database design 游戏记分应用程序的数据结构/模型(避免多对多对多)
我正在开发一个简单的记分应用程序,用于玩纸牌游戏拉米,作为一种锻炼。我正在为iOS构建它,但这有点无关,因为它使用SQLite数据存储,所以数据结构适用于任何环境。让我设置一个用例: 要开始记分,首先要安排好球员。我希望它是可能的,以保持球员,所以你可以跟踪统计数据等。因此,您要么创建新玩家,要么选择现有玩家 然后,当你玩的时候,你给每个玩家加上分数 游戏结束后,玩家和分数都会被保存,以便您可以查看过去游戏的日志 我遇到的问题是一个玩家可以玩很多游戏,有很多回合。但是,当观看一场比赛时,它有许多回合,每一轮都有许多玩家(显示他们的分数) 为此构建一个ERD表明我对这个数据结构的看法将多么失控Database design 游戏记分应用程序的数据结构/模型(避免多对多对多),database-design,data-structures,relational-database,entity-relationship,Database Design,Data Structures,Relational Database,Entity Relationship,我正在开发一个简单的记分应用程序,用于玩纸牌游戏拉米,作为一种锻炼。我正在为iOS构建它,但这有点无关,因为它使用SQLite数据存储,所以数据结构适用于任何环境。让我设置一个用例: 要开始记分,首先要安排好球员。我希望它是可能的,以保持球员,所以你可以跟踪统计数据等。因此,您要么创建新玩家,要么选择现有玩家 然后,当你玩的时候,你给每个玩家加上分数 游戏结束后,玩家和分数都会被保存,以便您可以查看过去游戏的日志 我遇到的问题是一个玩家可以玩很多游戏,有很多回合。但是,当观看一场比赛时,它有许多
我好像在绕圈子转。是否有构建此数据的示例,或者任何人可以告诉我我在哪里偏离轨道? 如果你认为<代码>玩家<代码>表是一个可能的玩家的代码<游戏> <代码>,那么你需要一个<代码>游戏玩家< <代码> >介于<代码>游戏>代码>和<代码>玩家< /Cord>表中,以识别那个特定游戏的玩家集合。此表还可以容纳该游戏桌上四名玩家的
位置
对于此表上的PK,您可以使用GameID和PlayerID的组合,或者添加一个自动生成的ID。如果使用后一个选项(这是我更喜欢的),您仍然应该在GameID/PlayerID
组合上有一个唯一的索引GameID/Position
也是PK的有效候选,因为每个游戏的每个位置只能填充一次
我将完全删除圆桌会议,并在其位置添加一个Score
表,以RoundNum
作为一列。该Score
将有一个外键引用返回到GamePlayer
表(因为只有该游戏中的玩家才能实际得分)
同样,您可以在此表上选择PKGamePlayerID/RoundNum
必须是唯一的,并且是PK的候选项,但是我会使用自动生成的ID。再一次,您应该在GamePlayerID/RoundNum
组合上有一个唯一的索引
通过这四个表,您可以解析所有M:M关系
如果你认为<代码>玩家<代码>表是<<代码>游戏的可能玩家池,那么你需要在<<代码>游戏和玩家> /Cord>表之间找出<>代码>游戏玩家< /代码>表,以识别该特定游戏的玩家集。此表还可以容纳该游戏桌上四名玩家的位置
对于此表上的PK,您可以使用GameID和PlayerID的组合,或者添加一个自动生成的ID。如果使用后一个选项(这是我更喜欢的),您仍然应该在GameID/PlayerID
组合上有一个唯一的索引GameID/Position
也是PK的有效候选,因为每个游戏的每个位置只能填充一次
我将完全删除圆桌会议,并在其位置添加一个Score
表,以RoundNum
作为一列。该Score
将有一个外键引用返回到GamePlayer
表(因为只有该游戏中的玩家才能实际得分)
同样,您可以在此表上选择PKGamePlayerID/RoundNum
必须是唯一的,并且是PK的候选项,但是我会使用自动生成的ID。再一次,您应该在GamePlayerID/RoundNum
组合上有一个唯一的索引
通过这四个表,您可以解析所有M:M关系
事实
- 游戏存在
- 游戏有游戏回合
- 玩家存在
- 玩家玩游戏回合
约束条件
有些游戏可能有多个游戏回合
有些玩家可能玩多个游戏回合
对于一些
游戏回合,多个
玩家玩
游戏回合
合乎逻辑
事实
- 游戏存在
- 游戏有游戏回合
- 玩家存在
- 玩家玩游戏回合
约束条件
有些游戏可能有多个游戏回合
有些玩家可能玩多个游戏回合
对于一些
游戏回合,多个
玩家玩
游戏回合
合乎逻辑
非常感谢您的支持。非常清晰和有条理。非常感谢,非常感谢。非常清晰和有条理。非常感谢。