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

Переменные базы данных - плюсы и минусы

Например, у меня есть таблица "users", которая имеет столбец "type" с перечислением с двумя возможными значениями: "индивидуальный" и "организация". Они являются взаимоисключающими и обязательными (каждая строка должна иметь ровно одно значение из возможных двух. Будет ли это хорошим примером использования перечислений? Почему так/нет?

Каковы некоторые плюсы и минусы использования типов ENUM (set) для полей базы данных?

4b9b3361

Ответ 1

Да, это похоже на хороший кандидат на перечисление.

Плюсы:

  • Маленькое (дисковое пространство)
  • Быстрое (целочисленное сравнение)
  • Легко понять (в основном)

Минусы:

  • Невозможно добавить значение без изменения структуры таблицы.
  • Приходится быть осторожным с чувствительностью к регистру в местах
  • Может быть очень запутанным, если использовать плохо... не используйте active = enum ('1', '0'), как я должен мириться с!
  • Не поддерживается всеми базами данных

Ответ 2

Лично я всегда предпочитал иметь стандартные столбцы int, с внешним ключом, связанным с таблицей описания. Это позволяет ограничить значения столбца идентификатора типа.

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

User.UserTypeID -> UserType.UserTypeID -> UserTypeLocalised.UserTypeID where locality = ??

Это также больше не зависит от базы данных и поэтому легче переносится на разные платформы.

Кроме того, для пользователя не подходит ни лицо, ни организация. Я ожидал бы, что пользователь будет частью организации, для которой вместо таблицы Organization и пользователя потребуется столбец OrganisationID. Тип пользователя обычно будет более вероятным дифференциацией "Человек/система" (при условии, что ваши системы используют эмбиентные входа для выполнения операций, и вы хотите провести аудит).

Ответ 3

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