【问题标题】:Player's Card Collection MySQL玩家卡片收藏 MySQL
【发布时间】:2015-04-18 02:52:24
【问题描述】:

我正在使用 C# 编写在线 TCG,但无法找到有效的解决方案来存储和检索玩家的卡牌收藏。基本上我想要的是数据库中的每个玩家都有一个“卡片集合”,我认为这将是某种类型的字典,其中包含表单条目(卡片 ID、拥有的金额)。我将非常频繁地添加、删除和编辑此集合中的每个条目。我正在研究 XML 序列化,但对于大量卡片来说似乎会很慢。我也想过只做一串

"id1,金额1

id2,amount2"

只是在','和换行符处拆分,但我觉得编辑字符串会很麻烦。其他人建议做一个新表,其中包含以下字段:userid、cardid、amount。我正在使用 MySQL,但对这些数据库解决方案并不十分熟悉。有没有最佳解决方案?

【问题讨论】:

  • 记住要小心远程服务器之类的东西。 Unity 引擎是单线程的,在这种情况下可能会导致问题。
  • 我不太清楚你的意思。我想我应该提到我正在使用 Photon Server 并且服务器是访问数据库的服务器。

标签: c# mysql sql dictionary unity3d


【解决方案1】:
[Users  ]
|UserID_|
|....   | 
|_______]

[Cards   ](all cards in the TCG)
|CardID_ |
|....    |
|________|

[Decks      ]
|DeckID_    |
|DeckUserID | -> Users.UserID 1..n
|....       |
|___________|

[DeckCards] 
|DeckID_  | -> Decks.DeckID 1..n
|CardID_  | -> Cards.CardID (1..n||1..1) to fit your needs
[_________|

[Collection   ]
|CollectionID_|
|UserID       | -> Users.UserID 1..1 to bound only one collection per user
|....         |
|_____________|

[CollectionCards] 
|CollectionID_  | -> Collection.CollectionID 1..n
|CardID_        | -> Cards.CardID (1..n||1..1) to fit your needs
[_______________|

您只显示:Users->Collection->CollectionCards->Cards 以显示用户集合中的卡片。

你只显示:Users->Deck->DeckCards->Cards to show card in deck

我希望是可以理解的......

【讨论】:

    【解决方案2】:

    一定要在数据库中使用连接表。如果您设置了正确的索引和引擎,那么读取集合会非常有效。操作集合也将更加高效 - 序列化并不便宜!

    如果您想要生成有关平均玩家收藏构成的统计数据,它也会为您提供很好的服务。

    【讨论】:

    • 因此,拥有一张自有卡的每个实例——这可能意味着同一卡 ID 的多个实例——用户的 ID,以及所拥有的金额是解决这个问题的好方法吗?全部在一个单独的表中。
    • 是的,完全正确。表的键可能是(UserId, CardId)。理想情况下,CardId 也是您的CardTypes 表的键,您可以在查询时将所有三个连接在一起。
    猜你喜欢
    • 2013-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多