Таблица базы данных для глобальных настроек

Я создаю базу данных для веб-приложения и хотел бы иметь таблицу для настраиваемых глобальных настроек. Существует ли какая-либо установленная передовая практика для разработки этой таблицы? Я могу представить два возможных решения, и я уверен, что должны быть другие.

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

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

Как это обрабатывается в большинстве случаев с кем-либо из вас?

Ответ 1

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

Мне нравится использовать БД, потому что мы можем делать корректировки в реальном времени, которые влияют на приложения. Например, мы имеем значение, которое мы устанавливаем, когда система недоступна для обслуживания, поэтому пользователи не могут получить доступ к веб-приложению. Мы можем в любое время отключить или отключить без необходимости развертывания каких-либо приложений.

Ответ 2

Настройки способа сохраняются в merb (и, вероятно, рельсы), являются парами ключ/значение, но не в таблице базы данных, скорее в файле YAML, который имеет то преимущество, что он доступен для чтения и легко анализируется.

Ответ 3

Способ, которым я хотел бы сделать это, если я должен сделать это в базе данных, - хранить атрибуты. Атрибут имеет пару ключ/значение. Но он также имеет тип атрибута (который указывает на таблицу attributeTypes), такую ​​как logging, siteConfig, externalReferences,... что когда-либо. Затем вы также можете иметь таблицу на уровне AttributeType, которая указывает тип данных, который должен храниться в таблице атрибутов. DataTypeID будет храниться с атрибутами AttributeTypes. Затем это указывает на таблицу DataTypes для поиска. Это позволяет вам знать, что вы работаете с числами, датами, строками, xml и т.д. Я считаю, что это обеспечивает максимальную гибкость... если вам это нужно.

Ответ 4

В ASP.Net вы можете хранить глобальные значения конфигурации в файле Web.Config в парах Name/Value.

Ответ 5

Zend Framework использует config.ini и имеет большой парсер, который разбивает и разворачивает ключи в массивы и подмассивы в зависимости от точечной нотации. Config.ini можно загрузить как экземпляр и сохранить в реестре.

Пример:

db.name 'myname'

db.host 'myhost'

db.user 'myuser'

db.password 'mypassword'

Теперь я могу получить следующие значения:

$config- > db- > имя; или полный массив $config- > db;

Ответ 6

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

  • Используйте строки для добавления настроек, а не столбцов. Очень легко подумать: "Мне никогда не понадобится больше настроек, чем эти", но вы это сделаете, и это станет гигантским, ужасным беспорядком. Я видел это.
  • Ваши Colums должны быть примерно такими:

    • id - int
    • name - varchar (50)
    • значение - текст
    • data_type - varchar (50)
    • описание - текст
  • Идентификатор будет полезен для отображения ваших настроек в цикле приложения и является просто хорошей практикой.

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

  • Тип данных "text" соответствует вашим данным, поэтому, когда varchar (50) выделяет 50 символов для каждой строки, независимо от того, какой текст будет корректироваться в зависимости от того, сколько данных существует. Если ваши данные - это что-то простое, как включение или выключение, это может быть один байт, если он длинный кусок копии, он может облегчить это, не заставляя меньшие данные иметь одинаковый размер. (Я думаю, что так оно и работает, хотя минимальный размер может быть больше одного байта - в любом случае, то, что адаптируется, а не соответствует заранее определенной сумме, безусловно, плюс).

  • data_type: это не требуется, но похоже, что вы хотите ограничить тип данных для каждого параметра. Это один из недостатков парадигмы строк: тип данных - всего лишь предложение. Это более полезно, если вы планируете использовать инструмент администрирования, в котором администраторы бывают случайными и могут вводить плохие данные, поэтому вы можете использовать это, чтобы проверить предлагаемое значение перед отправкой его в таблицу и, возможно, сбой вашего приложения. Конечно, это ничего не сделает, если у каждого есть прямой доступ к таблице, но это может быть полезным ориентиром для этого.

  • description: это комментарии. Используйте это, чтобы сообщить тем, кто придет после вас. ПОЧЕМУ вы сделали то, что сделали, и как избежать сбоя приложения.

Ответ 7

Если в таблице будет только одна строка, зачем использовать базу данных? Сохраните конфигурацию в формате XML в файле.

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

Ответ 8

Мне нравится подход YAML, который защищает STAii.

Если это приложение .NET или Java, вы также можете рассмотреть XML и использовать сериализацию, чтобы удобно использовать экземпляры ваших пользовательских настроек.