Хранить список расширяемых опций в таблице MySQL? Лучшая практика? - PullRequest
0 голосов
/ 29 сентября 2010

Давайте предположим, что у нас есть многосайтовая CMS и каждый веб-сайт в этой CMS имеет 2 варианта: preview_width и preview_height.Мы знаем, что каждая опция должна иметь значение по умолчанию, если оно не определено пользователем.Также мы знаем, что список опций будет расширен в ближайшее время.Как лучше хранить такие параметры в таблице MySQL?

Я знаю три метода, и у обоих есть недостатки (или, может быть, я не знаю, как правильно использовать эти методы) ...

  1. Практика № 1: каждый параметр представлен в виде столбца в таблице options.

    Недостаток: мы должны изменять таблицу options каждый раз, когда добавляем новую опцию.

  2. Практика № 2: Все опции хранятся в виде сериализованного объекта / массива вСтолбец опций таблицы сайтов.

    Недостатки: чтобы добавить новую опцию со значением по умолчанию - нам нужно перебрать все строки и изменить сериализованные опции;или мы можем добавить эту опцию, когда она запрошена и найдена отсутствующей.

  3. Практика № 3: Все опции хранятся в таблице опций со структурой: id, site_id, option_name, option_value.

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

Какой у вас выбор?Какую практику выбирать, когда новые опции добавляются очень часто?Любые другие практики?

Спасибо.

1 Ответ

0 голосов
/ 29 сентября 2010

Я бы использовал практику № 3.Чтобы сохранить значение по умолчанию, вы можете попробовать написать метод для получения опций:

get_value(option) {
  value = read_from_db(option);
  if value == not_present_in_db {
    value = default_value(option);
  }
  return value;
}

Вам также нужно написать метод default_value(option), который должен искать некоторые значения по умолчанию в файле конфигурации или что-то подобное.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...