Первым и последним, по крайней мере, является возможное использование следующего синтаксиса:
String.Format("{0,20}", "String goes here");
String.Format("{0,-20}", "String goes here");
Для данных конфигурации я бы использовал структуру ключ / значение со строкой для каждой записи конфигурации. Вы, вероятно, один раз прочитаете эти данные и кешируете их, поэтому производительность не будет проблемой. Как вы указываете, добавление столбцов каждый раз при изменении набора ключей конфигурации требует гораздо большего обслуживания.
SQL отлично справляется с моделированием и манипулированием произвольно большими наборами схожих (если не одинаковых) структурированных данных. Набор информации о конфигурации на самом деле не таковой - у вас есть одна строка данных ИЛИ у вас есть несколько строк совершенно несвязанных данных. Это говорит о том, что вы просто используете это как хранилище данных. Я советую отказаться от модели данных SQL и действовать проще.
Еще одно соображение: с столбцом для каждого параметра конфигурации вы можете легко получить версии. Каждая строка представляет версию.
Первая проблема, которую вы должны принять во внимание, заключается в следующем: перестаньте думать об эффективности получения информации. в первую очередь, выяснить, как эффективно и правильно моделировать данные, а затем (и только потом) выяснить, как это сделать эффективно .
Так что это зависит от характера данных конфигурации, которые вы храните. Если отдельные пары (имя, значение) в основном не связаны, сохраните их как по одной на строку. Если они связаны, вы можете рассмотреть схему с несколькими столбцами.
Что я имею в виду под связанными? Рассмотрим некоторую конфигурацию кеша. Каждый кэш имеет несколько атрибутов:
Предположим, что каждый кэш имеет имя. Вы можете сохранить эти данные в виде трех строк:
<имя> _EVICTION
_EXPIRY
_MAX_SIZE
, но эти данные связаны , и вам часто может потребоваться получить их все сразу. В этом случае имеет смысл иметь таблицу cache_config с пятью столбцами: id, name, eviction, expiry, max_size.
Вот что я имею в виду под связанными данными.
Я думаю, что дизайн из двух столбцов (имя, значение) намного лучше. Как вы сказали, если вам нужно добавить новое свойство, все, что вам нужно сделать, это « вставить
» новую строку. В другом варианте (однорядном) вам нужно будет изменить схему таблицы, чтобы добавить столбец для нового свойства.
Это, однако, зависит от того, будет ли ваш список свойств изменен в будущем. .
Здесь я пишу о том, как мы переместили наши AppSettings в таблицу базы данных. Производительность не является проблемой, потому что она извлекается только один раз при запуске приложения и сохраняется в словаре для удобного поиска.
Не уверен насчет вашего приложения, но важная причина, по которой мы это сделали, - теперь это невозможно. использовать производственные значения, если вы находитесь в Dev, Test и т. д.
CREATE TABLE Configuration (
Name ...,
Value ...,
);
Лучший способ. Добавление столбца в таблицу обычно отстой, а какой смысл в таблице с одной строкой?
Не уверен, что это подходит для SQL, но, увы ... на вопрос дан ответ.
Я использовал оба метода и предпочитаю метод с двумя столбцами. Возврат к новому столбцу для каждой конфигурации заключается в том, что вам нужно изменить код для добавления новых настроек.
Я предпочитаю использовать метод «Один столбец для каждой настройки» (когда я получаю доступ к значению). Это связано с тем, что параметры конфигурации заданы более явно. Но то, что это предпочтение не перевешивает сложность добавления новой конфигурации в таблицу.
Я бы рекомендовал метод двух столбцов. Затем настройте функцию доступа / sproc для получения значений.
Вы можете эффективно сохранить конфигурацию с помощью XML. Некоторые базы данных поддерживают функцию Pure XML, в которой вы можете сохранить значение как тип данных xml и запустить XQUERY для этого конкретного столбца.
Создайте таблицу с двумя именами столбцов и конфигурацией. имя со строковым типом данных и конфигурация с типом данных xml, поэтому не нужно беспокоиться о вставке и удалении новых параметров конфигурации, вы просто создадите новый тег в xml. И если база данных не поддерживает XML, просто сохраните ее как строку, но в формате XML, чтобы вы могли анализировать эту конфигурацию вручную или эффективно с помощью некоторого API.
Я думаю, что это был бы лучший способ вместо сохранения полной конфигурации в виде строки.
зависит.
Если у вас меньше 15 значений, я бы сделал столбец для каждого.
Если вы регулярно меняете количество настроек или часто не делаете не использовать все настройки, я бы подумал о создании строки для каждой настройки.
Кроме того, это, вероятно, подбрасывание. Зависит от ваших шаблонов использования. Если вам всегда нужно получить все настройки, вероятно, быстрее всего разместить их в одной строке.
Добавить столбцы не так уж сложно, и если вы грамотно программируете, вам обычно не нужно обновлять какой-либо другой код .