Подтвердить что ты не робот

Перечисления в базе данных SQL Server

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

4b9b3361

Ответ 1

  • Лично мне нравится определять одну таблицу поиска для каждого перечисления, потому что это своего рода документация. Если кто-то хочет знать, что означает id, он легко найдет его в таблице. Поиск этой информации в ограничении столбца не является очевидным.

  • Также гораздо проще добавлять новые значения в таблицу, чем в ограничение.

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

  • Вы можете добавить дополнительную информацию в отдельные таблицы поиска, если это необходимо (например, комментарий, столбец сортировки, какой-то флаг и т.д.).

  • И, как вы сказали, лучше для ссылочной целостности

Ответ 2

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

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

"Одна истинная таблица поиска" не даст вам никаких преимуществ.

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

Ответ 3

Использование одной и той же таблицы для нескольких поисков может вернуться, чтобы преследовать вас. Одним из примеров является создание индексированного представления. Это может помочь в производительности, если у вас есть несколько полей, в которых вы хотите отобразить значение поиска, но SQL Server (не менее 2005) не позволит вам ссылаться на одну и ту же таблицу более одного раза (если это было исправлено, я бы действительно хотел бы знать, как это сделать, потому что я действительно могу использовать его в текущем приложении с одной таблицей поиска.).

В одном из ваших запросов может потребоваться дополнительное поле, и, используя одну таблицу, у вас будет много ненужных значений. Индексирование может быть более гибким с отдельными таблицами. Что делать, если требуется новое поле для одного вида поиска? SQL Server будет преуспевать с ограничением, но при броске в той же таблице потребуется немного больше сложности.

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