Использование таблицы конфигурации с одной строкой в ​​базе данных SQL Server. Плохая идея? - PullRequest
137 голосов
/ 20 февраля 2010

При разработке приложения для корзины покупок я обнаружил, что мне нужно сохранять настройки и конфигурации на основе предпочтений и требований администратора. Эта информация может быть любой: информация о компании, идентификаторы транспортных счетов, ключи API PayPal, настройки уведомлений и т. Д.

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

Как правильно хранить эту информацию?

Примечание: моя СУБД - это SQL Server 2008, а уровень программирования реализован на ASP.NET (в C #).

Ответы [ 12 ]

0 голосов
/ 16 января 2015

Вы можете сделать пару ключ / значение без преобразований, добавив столбец для каждого основного типа и один столбец, указывающий, в каком столбце находятся данные.

Итак, ваш стол будет выглядеть примерно так:

id, column_num, property_name, intValue, floatValue, charValue, dateValue
1, 1, weeks, 51, , ,
2, 2, pi, , 3.14159, , 
3, 4, FiscYearEnd, , , , 1/31/2015
4, 3, CompanyName, , , ACME, 

Он использует немного больше места, но в большинстве случаев вы используете несколько десятков атрибутов. Вы можете использовать оператор case из значения column_num, чтобы вытащить / присоединить правильное поле.

0 голосов
/ 20 февраля 2010

Я не уверен, что единственная строка - лучшая реализация для конфигурации. Возможно, лучше иметь строку для каждого элемента конфигурации с двумя столбцами (configName, configValue), хотя для этого потребуется привести все ваши значения к строкам и обратно.

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

...