2011-03-31 2 views
0

Как я могу хранить массив ссылок в строке? Например, если бы я сделал онлайн-карточную игру, у меня был бы стол со всеми картами, и у каждого игрока была бы колода, представленная списком идентификационных ссылок.MySQL - хранение массива ссылок в каждой строке

+1

Каждый раз, когда вы склонны хранить массив значений в одном столбце базы данных, мигающие красные огни и клаксоны должны уйти в вашей голове, предупреждая вас, что ваш дизайн БД должен лучше нормализуется. –

+0

@ Кристофер - вы понимаете, что проблема в дизайне базы данных, а не в хранении языковых конструкций в реляционной системе баз данных? –

+0

@ Микаэль, я действительно верю, что слишком быстро прочитал вопрос, и мой мозг ушел по касательной; моя вина. – Christopher

ответ

2

Я бы сделал отдельную таблицу отношений для этого, с card_owner_id и card_id как поля. Установите внешние ключи, чтобы автоматически удалить отношения, когда карта или пользователь удалены.

+0

, так что бы я использовал что-то вроде 'SELECT * FROM cards WHERE card_id = (SELECT card_id FROM user_cards WHERE card_owner_id = $ user_id)' для получения пользовательских карточек? – nkorth

+0

Вы можете использовать соединение, чтобы получить их: '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)'. – Kaivosukeltaja

0

Как насчет одного стола для игроков, один для карт и один для колод (который связывает playerId и cardId)?

1

Два решения:

  1. сериализовать массив PHP и сохранить его в бинарном поле вашей таблицы.
  2. Создайте свою базу данных так, чтобы вы могли представить такое отношение: «у игрока несколько карт»: Player (player_id); Карточка (card_id, player_id)
-1

Каждый игрок может иметь строку в таблице «игроков»; и каждая из этих строк может иметь поле для каждой из возможных карт; и каждая из этих ячеек может быть помечена как истинная или ложная, чтобы обозначить принадлежность игрока или не иметь соответствующую карточку.

Будет ли это работать, как вы думаете?

- Pete

+0

Пожалуйста, не подписывайте сообщения на SO. –

+0

Я думал о том, что размер фиксированной колоды и количество полей в таблице пользователя, но это действительно показалось неэффективным. – nkorth

Смежные вопросы