【问题标题】:C# Storing player cards Database DesignC# 存储玩家卡片数据库设计
【发布时间】:2015-06-16 10:45:35
【问题描述】:

我很难弄清楚如何将每个玩家拥有的卡片存储在 SQL 数据库中。到目前为止,我的赌注是有一张带卡片的桌子:

[id], [cardName]

把它和这样的玩家联系起来:

[id], [playeName], [cardId], [quantity]

只需将新卡插入卡表,我就可以轻松地将新卡添加到数据库(当有新卡时)。

但是我担心玩家表,因为它可能会很快变得非常大(大约有 250 张牌),它看起来像这样:

1 Bravd fireball 4; 2 Bravd Soldier 2; 3 Bravd PoisonSword 1, 4 John Soldier 3;  .... etc

最多允许玩家输入 250 个条目。我真的很高兴有 1000 名玩家作为第一个里程碑,但这最多可以提供 250*1000 个可能的条目,而未来数据库大小会大大增加会有更多玩家或新集合

这个解决方案是否可以接受,或者有人可以推荐更好的解决方案吗?

【问题讨论】:

  • 100万行不算大....
  • imo cardId 应该是在名称字段中存储 fireball 的表中的 int PK,playerName 同上
  • 我不会担心最大 250,000 条记录的大小,这对于表大小来说并不是很多。你甚至可以将你的表减少到(PlayerID INT, CardID SMALLINT UNSIGNED, Quantity SMALLINT UNSIGNED),这意味着你的行大小只有 8 个字节,你仍然可以拥有 65535 个不同的卡,最大数量限制相同。因此,您的 250k 行表将占用 1.9MB,这根本不是很大!
  • 我认为 OP 需要的是在不影响性能的情况下进一步规范化
  • @MitchWheat 当然是。它可能不是巨大的,或大规模的,或全球规模的,但它肯定很大。

标签: c# mysql sql database database-design


【解决方案1】:

您可以添加另一个表来减少玩家姓名的重复数据:

card_table -> [card_id], [cardName]
player_table -> [player_id] , [playerName]  
player_card_table -> [player_id],[card_id],[qty] 

【讨论】:

    猜你喜欢
    • 2014-06-29
    • 2017-05-14
    • 2023-03-22
    • 1970-01-01
    • 2012-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多