将列表存储在数据库中的解决方法 - 有啥想法吗?
Posted
技术标签:
【中文标题】将列表存储在数据库中的解决方法 - 有啥想法吗?【英文标题】:Workaround for storing List in DB - any thoughts?将列表存储在数据库中的解决方法 - 有什么想法吗? 【发布时间】:2013-06-26 17:43:19 【问题描述】:我正在为我的曲棍球队创建一个存储各种统计数据的数据库。我的特殊问题是关于尝试存储每个玩家玩过的游戏。
我将深入了解有关统计数据的详细信息,我将能够在其中优化搜索以查看任何玩家玩过的特定游戏(因此,简单地为玩过的总游戏数提供一个通用的 Int 是不可能的问题 - 我需要追溯每场比赛)
我有一个玩家和游戏桌(date_of_game 是桌游的 PK,因为在给定的一天只能玩一场游戏,而 jerseyNum 是桌玩家的 PK,因为即使在玩家离开后也不允许重复使用数字团队),这对我来说很诱人,只是在游戏表中存储在那场特定游戏中出现的人的列表 - 但这是一种不好的做法。
有人对如何存储每个玩家玩的游戏有任何想法吗?
我曾想过制作一个“WhosPresent”表,我可以在其中只使用球员和比赛日期作为列,并为每个球员存储“现在”或“离开”值,但随后出现了人们可能离开球队的问题,否则会在团队中添加新玩家,这会弄乱表格列。
任何想法将不胜感激!
【问题讨论】:
如果您想遵循规范化规则并避免嵌套表(您的列表方法),您确实需要一个 GamePlayers 表(您的 WhosPresent 表)。如果您想跟踪哪些玩家在哪个时段玩游戏,您甚至可以将其扩展到 GamePeriodPlayer。 您的 GamePlayers 表还可以包含 GameID、PlayerID、Period1、Period2、Period3 列,其中周期列可以是真/假或整数,以跟踪每个周期的播放分钟数。 我同意 Tim,这是映射表的经典用例。您可能还需要考虑游戏的 ID,而不仅仅是使用日期。如果您参加锦标赛,您可能在某一天有不止一场比赛。此外,我遇到过必须重新安排比赛的情况,导致一天比赛不止一场。只是一个想法...... 【参考方案1】:在我看来,您应该有一个 GamePlayers 表,它将您的 Players 表与您的 Games 表相关联。您可以存储一个“存在”或“不存在”标志,或者您可以在它们存在时填充 GamePlayers 表,这意味着不会浪费空间。即,如果玩家在 GamePlayers 表中没有条目,那么您已经知道他们不存在。我假设大多数统计数据将基于个人级别和每场比赛,因此它们也可能驻留在 GamePlayers 表中,并且您可能拥有单独保存或通过聚合计算的团队级别统计数据来自 GamePlayers 表的结果。
【讨论】:
感谢大家的意见!这就是我认为我必须做的,只是想看看我是否遗漏了什么。每个人似乎都在同一页面上,所以我选择了这个答案。再次感谢!以上是关于将列表存储在数据库中的解决方法 - 有啥想法吗?的主要内容,如果未能解决你的问题,请参考以下文章