Как я должен структурировать свою таблицу настроек с MySQL? - PullRequest
22 голосов
/ 18 марта 2010

Как лучше всего структурировать таблицу MySQL для хранения настроек администратора?

Как это?

Setting _|_ Value
setting1 |   a
setting2 |   b
setting3 |   c
setting4 |   d
setting5 |   e

Или вот так?

|--------|_setting1_|_setting2_|_setting3_|_setting4_|_setting5_|
Settings |    a     |    b     |    c     |    d     |    e     |

Или, может быть, каким-то другим способом?

Ответы [ 4 ]

23 голосов
/ 18 марта 2010

Имя таблицы = 'настройки'

name  | varchar <-- primary key
value | varchar

Тогда вы можете запросить так:

SELECT * FROM settings WHERE name = 'default_printer';

Эта опция приятна и проста, и она будет хорошо работать с 10 или 10000 настройками. С другой опцией вам нужно будет добавить новый столбец, который будет совершенно бессмысленной тратой времени.

Редактировать

После первого комментария вы можете выбрать несколько значений, таких как:

SELECT * FROM settings WHERE name IN ('default_printer','default_page_size');

: -)

4 голосов
/ 24 декабря 2013

Рассмотрим первый вариант (Setting, Value) как столбцы.Но также подумайте о добавлении дополнительных мета-столбцов, таких как Description (будет полезно, если у вас много неоднозначных настроек), PreviousValue, LastUpdated, UpdatedBy и т. Д.

1 голос
/ 18 марта 2010

Ваш первый пример, пары имя-значение или EAV, обеспечивает большую гибкость.

Посетите вики-страницу о моделировании EAV в базах данных .

0 голосов
/ 18 марта 2010

Как обычно, это зависит. Решение 1 проще. Sol # 2 легко интегрируется с ORM, но может поразить ограничения размера строки БД. Google для OTLT (как в одной проблеме истинной таблицы поиска) Сколько у вас настроек (несколько? Десятков? Сотен?). Как часто они вам нужны?

...