Хранить список расширяемых опций в таблице MySQL? Лучшая практика?

0

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

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

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

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

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

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

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

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

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

Спасибо.

Теги:
data-structures

1 ответ

0
Лучший ответ

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

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

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

  • 0
    Между прочим, другой вариант Практики № 3 - поместить значения по умолчанию в строки с site_id=0 . Таким образом, мы всегда можем получить текущие параметры по array_merge(get_options(site_id=0), get_options(site_id=12345)) Что вы думаете?
  • 0
    Я просто думал об использовании site_id = null в качестве значения по умолчанию.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню