【问题标题】:MySQL - storing an array of references in each rowMySQL - 在每一行中存储一个引用数组
【发布时间】:2011-03-31 22:40:35
【问题描述】:

如何将一组引用存储在一行中?例如,如果我要制作一个在线集换式卡牌游戏,我将有一个包含所有卡牌的桌子,每个玩家都有一个套牌,由 ID 引用列表表示。

【问题讨论】:

  • 当您想在数据库的单个列中存储一组值时,闪烁的红灯和喇叭应该在您的脑海中响起,警告您您的数据库设计需要更好标准化。
  • @Christopher - 您确实意识到问题出在数据库设计中,而不是实际将语言结构存储在关系数据库系统中?
  • @Mickael,我相信我读这个问题的速度太快了,而且我的大脑突然偏离了方向;我的错。

标签: php mysql


【解决方案1】:

我会为此制作一个单独的关系表,以 card_owner_idcard_id 作为字段。相应地设置外键,以便在删除卡或用户时自动删除关系。

【讨论】:

  • 那么我会使用SELECT * FROM cards WHERE card_id = (SELECT card_id FROM user_cards WHERE card_owner_id = $user_id) 之类的东西来获取用户的卡片吗?
  • 您可以使用连接来获取它们:SELECT c.* FROM cards AS c LEFT JOIN user_cards AS uc ON (uc.card_id = c.id AND uc.card_owner_id = $user_id)
【解决方案2】:

两种解决方案:

  1. 序列化您的 php 数组并将其存储到表的二进制字段中。
  2. 设计您的数据库,以便您可以表示这样的关系:“一个玩家有几张牌”:Player(player_id);卡片(card_id, player_id)

【讨论】:

    【解决方案3】:

    给玩家一张桌子,一张给卡片,一张给卡片组(链接 playerId 和 cardId)怎么样?

    【讨论】:

      【解决方案4】:

      每个玩家可能在“玩家”表中有一行;并且这些行中的每一行都可能为所有可能的卡片中的每一个提供一个字段;并且每个单元格都可能被标记为真或假,以表示玩家拥有或不拥有相关卡片。

      你觉得这样行吗?

      --皮特

      【讨论】:

      • 请不要在 SO 上签名。
      • 我想过有一个固定的牌组大小,并在用户表中有那么多字段,但这似乎效率很低。
      猜你喜欢
      • 2012-12-02
      • 2014-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-07
      • 2018-08-13
      相关资源
      最近更新 更多