Массив или таблица базы данных? - PullRequest
0 голосов
/ 08 сентября 2010

Я мог бы действительно использовать некоторые хорошие отзывы о передовых практиках / взглядах на то, лучше ли помещать вещи в базу данных или создавать массив.Например, у вас есть масти карт:

$suits = array('clubs', 'spades', 'hearts', 'diamonds');

Массив может измениться в будущем, но не очень часто, если вообще будет.Теперь эти масти применяются к картам в колоде.Поэтому, если я создаю таблицу, схема будет выглядеть примерно так:

create table cards {
   id INT(11)
   card_value char(2),
   suit varchar(8)
}

Или лучше построить таблицу suits и ссылаться на ID в таблице cards, например:

create table suits {
   id INT(11),
   name varchar(8)
}

create table cards {
   id INT(11),
   suit_id int(11),
   card_value char(2)
}

Какой путь лучше и почему?

Ответы [ 2 ]

3 голосов
/ 08 сентября 2010

Как правило, я бы сказал, что лучше хранить информацию в базе данных, хотя в примере с картами у меня возникнет соблазн либо получить информацию в коде, либо сохранить «номер карты», рассчитанный из + card_value), или используйте таблицу карточек, которую вы дали во втором фрагменте кода - поскольку карточки вряд ли изменятся (особенно после того, как вы начали использовать их в коде).

В конце дня - если вы собираетесь выполнять запросы, например, к. «руки» карт, или против колоды карт в базе данных, тогда вы захотите использовать любое из ваших представлений SQL - с первым чуть проще запросить (хотя с точки зрения, который присоединяет карту к Подходят, любой вариант легко запросить - хотя я все еще буду склонен придерживаться первой версии SQL).

2 голосов
/ 08 сентября 2010

Прочитав ваши комментарии к ответу Уилла, я знаю, что масти и карты не были вашим первым выбором примера, но я все равно буду следовать примеру:)

Я согласен, что маловероятно, что значения мастей изменятся, если только вам не нужна система, достаточно гибкая для обработки карт Таро (Мечи, Посохи, Кубки и Монеты). Тем не менее, хранение данных в таблице имеет свои преимущества.

Во-первых, Костюм используется в нескольких местах. Карточные игры, такие как Бридж и Вист, должны знать, какой Костюм козырей . Червы (Черная Мария, Чейз Леди) - игра, в которой нужно различать карты определенных мастей, на которых есть штрафы. Итак, есть несколько мест, где ссылка на SUITS.ID будет полезна.

Вторым преимуществом является то, что костюмы имеют больше атрибутов, чем просто имя. В некоторых играх ранжирование подходит, например, в игре «Бридж» ставка Три пики выигрывает над ставкой Три сердца . Если мы создаем приложение для карточной игры, мы могли бы связать файл изображения или символ крыла для представления символа карты.

Оба эти соображения указывают на ваш второй дизайн. Это единственный способ избежать дублирования и позволяет нам применять ограничения целостности.

...