Предположим, что у нас есть многосайтовый CMS и каждый сайт в этой CMS, имеющий 2 варианта: preview_width и preview_height. Мы знаем, что каждый параметр должен иметь значение по умолчанию, если оно не определено пользователем. Также мы знаем, что список вариантов будет представлен в ближайшем будущем. Какова наилучшая практика хранения таких параметров в таблице MySQL?
Я знаю три практики, и у обоих из них есть недостатки (или, может быть, я не знаю, как правильно использовать эту практику)...
Практика № 1: каждый вариант
представленный как столбец в options
Таблица.
Недостаток: мы должны
изменять таблицу options
каждый раз
мы добавляем новый вариант.
Практика № 2: сохранены все параметры как сериализованный объект/массив в столбец параметров таблицы.
Недостатки: добавить новую опцию со значением по умолчанию - нам нужно зацикливать через все строки и изменить сериализованные параметры; или мы можем добавить этот вариант, когда он запрашивается, и не найдено.
Практика № 3: все параметры хранятся в таблице опций со структурой: id, site_id, option_name, option_value.
Недостатки: при добавлении новой опции мы должны обновить эту таблицу по умолчанию для каждого веб-сайта.
Каков ваш выбор? Какую практику выбрать, когда новые опции добавляются очень часто? Любые другие методы?
Спасибо.
Я бы использовал 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)
, который должен искать некоторые значения по умолчанию в файле конфигурации или что-то еще.
site_id=0
. Таким образом, мы всегда можем получить текущие параметры поarray_merge(get_options(site_id=0), get_options(site_id=12345))
Что вы думаете?site_id = null
в качестве значения по умолчанию.