Как мне настроить таблицу настроек MySQL?
Какой лучший способ структурировать таблицу MySQL для хранения настроек администратора?
Как это?
Setting _|_ Value
setting1 | a
setting2 | b
setting3 | c
setting4 | d
setting5 | e
Или как это?
|--------|_setting1_|_setting2_|_setting3_|_setting4_|_setting5_|
Settings | a | b | c | d | e |
Или, может быть, каким-то другим способом?
Ответы
Ответ 1
Название таблицы = 'settings'
name | varchar <-- primary key
value | varchar
Затем вы можете запросить следующее:
SELECT * FROM settings WHERE name = 'default_printer';
Эта опция приятная и простая, и она будет работать с 10 или 10 000 настройками. С другим вариантом вам придется добавить новый столбец, который будет совершенно бессмысленной тратой времени.
Изменить
После 1-го комментария вы можете выбрать несколько таких значений:
SELECT * FROM settings WHERE name IN ('default_printer','default_page_size');
: -)
Ответ 2
Рассмотрим первый вариант (Setting
, Value
) в качестве столбцов. Но также подумайте над добавлением дополнительных мета-столбцов, например Description
(пригодится, если у вас много неоднозначных настроек), PreviousValue
, LastUpdated
, UpdatedBy
и т.д.
Ответ 3
Ваш первый пример, пары имя-значение или EAV, обеспечивает большую гибкость.
Просмотрите страницу wiki о моделировании EAV в базах данных.
Ответ 4
Как обычно, это зависит. Решение 1 проще. Sol # 2 легко интегрируется с ORM, но может поражать ограничения размера строки DB.
Google для OTLT (как в одной проблеме True Lookup Table)
Сколько у вас настроек (несколько? Десятки? Сотни?) Как часто вы будете нуждаться в них?