Переменные базы данных - плюсы и минусы
Например, у меня есть таблица "users", которая имеет столбец "type" с перечислением с двумя возможными значениями: "индивидуальный" и "организация". Они являются взаимоисключающими и обязательными (каждая строка должна иметь ровно одно значение из возможных двух. Будет ли это хорошим примером использования перечислений? Почему так/нет?
Каковы некоторые плюсы и минусы использования типов ENUM (set) для полей базы данных?
Ответы
Ответ 1
Да, это похоже на хороший кандидат на перечисление.
Плюсы:
- Маленькое (дисковое пространство)
- Быстрое (целочисленное сравнение)
- Легко понять (в основном)
Минусы:
- Невозможно добавить значение без изменения структуры таблицы.
- Приходится быть осторожным с чувствительностью к регистру в местах
- Может быть очень запутанным, если использовать плохо... не используйте active = enum ('1', '0'), как я должен мириться с!
- Не поддерживается всеми базами данных
Ответ 2
Лично я всегда предпочитал иметь стандартные столбцы int, с внешним ключом, связанным с таблицей описания. Это позволяет ограничить значения столбца идентификатора типа.
Конечно, это может привести к раздуванию таблиц, но это позволяет вам иметь "локализованную" таблицу для работы с таблицей описания, чтобы ваши приложения могли отображать локализованный контент в выпадающих списках/отчетах и т.д., если это необходимо.
User.UserTypeID -> UserType.UserTypeID -> UserTypeLocalised.UserTypeID where locality = ??
Это также больше не зависит от базы данных и поэтому легче переносится на разные платформы.
Кроме того, для пользователя не подходит ни лицо, ни организация. Я ожидал бы, что пользователь будет частью организации, для которой вместо таблицы Organization и пользователя потребуется столбец OrganisationID. Тип пользователя обычно будет более вероятным дифференциацией "Человек/система" (при условии, что ваши системы используют эмбиентные входа для выполнения операций, и вы хотите провести аудит).
Ответ 3
Помещение ссылочных данных в таблицу с внешним ключом означает, что база данных может применять правило целостности данных. Вы также можете добавить другой тип (например, "Внутренний" или "Некоммерческий" ) без необходимости расширения схемы базы данных. Наконец, вы можете аннотировать справочную таблицу флагами или другим кодированием, чтобы при необходимости можно было внедрить бизнес-логику с данными.