Лучший дизайн таблицы для конфигурации приложения или настройки параметра приложения?

Первым и последним, по крайней мере, является возможное использование следующего синтаксиса:

String.Format("{0,20}", "String goes here");
String.Format("{0,-20}", "String goes here");
45
задан Kenny Evitt 15 March 2011 в 19:40
поделиться

9 ответов

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

SQL отлично справляется с моделированием и манипулированием произвольно большими наборами схожих (если не одинаковых) структурированных данных. Набор информации о конфигурации на самом деле не таковой - у вас есть одна строка данных ИЛИ у вас есть несколько строк совершенно несвязанных данных. Это говорит о том, что вы просто используете это как хранилище данных. Я советую отказаться от модели данных SQL и действовать проще.

26
ответ дан 26 November 2019 в 21:16
поделиться

Еще одно соображение: с столбцом для каждого параметра конфигурации вы можете легко получить версии. Каждая строка представляет версию.

14
ответ дан 26 November 2019 в 21:16
поделиться

Первая проблема, которую вы должны принять во внимание, заключается в следующем: перестаньте думать об эффективности получения информации. в первую очередь, выяснить, как эффективно и правильно моделировать данные, а затем (и только потом) выяснить, как это сделать эффективно .

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

Что я имею в виду под связанными? Рассмотрим некоторую конфигурацию кеша. Каждый кэш имеет несколько атрибутов:

  • политика удаления;
  • время истечения срока действия;
  • максимальный размер.

Предположим, что каждый кэш имеет имя. Вы можете сохранить эти данные в виде трех строк:

  • <имя> _EVICTION
  • _EXPIRY
  • _MAX_SIZE

, но эти данные связаны , и вам часто может потребоваться получить их все сразу. В этом случае имеет смысл иметь таблицу cache_config с пятью столбцами: id, name, eviction, expiry, max_size.

Вот что я имею в виду под связанными данными.

13
ответ дан 26 November 2019 в 21:16
поделиться

Я думаю, что дизайн из двух столбцов (имя, значение) намного лучше. Как вы сказали, если вам нужно добавить новое свойство, все, что вам нужно сделать, это « вставить » новую строку. В другом варианте (однорядном) вам нужно будет изменить схему таблицы, чтобы добавить столбец для нового свойства.

Это, однако, зависит от того, будет ли ваш список свойств изменен в будущем. .

5
ответ дан 26 November 2019 в 21:16
поделиться

Здесь я пишу о том, как мы переместили наши AppSettings в таблицу базы данных. Производительность не является проблемой, потому что она извлекается только один раз при запуске приложения и сохраняется в словаре для удобного поиска.

Не уверен насчет вашего приложения, но важная причина, по которой мы это сделали, - теперь это невозможно. использовать производственные значения, если вы находитесь в Dev, Test и т. д.

4
ответ дан 26 November 2019 в 21:16
поделиться
CREATE TABLE Configuration (
    Name ...,
    Value ...,
);

Лучший способ. Добавление столбца в таблицу обычно отстой, а какой смысл в таблице с одной строкой?

Не уверен, что это подходит для SQL, но, увы ... на вопрос дан ответ.

1
ответ дан 26 November 2019 в 21:16
поделиться

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

Я предпочитаю использовать метод «Один столбец для каждой настройки» (когда я получаю доступ к значению). Это связано с тем, что параметры конфигурации заданы более явно. Но то, что это предпочтение не перевешивает сложность добавления новой конфигурации в таблицу.

Я бы рекомендовал метод двух столбцов. Затем настройте функцию доступа / sproc для получения значений.

0
ответ дан 26 November 2019 в 21:16
поделиться

Вы можете эффективно сохранить конфигурацию с помощью XML. Некоторые базы данных поддерживают функцию Pure XML, в которой вы можете сохранить значение как тип данных xml и запустить XQUERY для этого конкретного столбца.

Создайте таблицу с двумя именами столбцов и конфигурацией. имя со строковым типом данных и конфигурация с типом данных xml, поэтому не нужно беспокоиться о вставке и удалении новых параметров конфигурации, вы просто создадите новый тег в xml. И если база данных не поддерживает XML, просто сохраните ее как строку, но в формате XML, чтобы вы могли анализировать эту конфигурацию вручную или эффективно с помощью некоторого API.

Я думаю, что это был бы лучший способ вместо сохранения полной конфигурации в виде строки.

2
ответ дан 26 November 2019 в 21:16
поделиться

зависит.

Если у вас меньше 15 значений, я бы сделал столбец для каждого.

Если вы регулярно меняете количество настроек или часто не делаете не использовать все настройки, я бы подумал о создании строки для каждой настройки.

Кроме того, это, вероятно, подбрасывание. Зависит от ваших шаблонов использования. Если вам всегда нужно получить все настройки, вероятно, быстрее всего разместить их в одной строке.

Добавить столбцы не так уж сложно, и если вы грамотно программируете, вам обычно не нужно обновлять какой-либо другой код .

0
ответ дан 26 November 2019 в 21:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: