Дизайн базы данных: несколько состояний для одного элемента
Я проектирую базу данных, и я хотел бы знать, каков наилучший способ сделать такую вещь:
Моя база данных будет хранить предметы. Каждый предмет может быть во многих штатах:
- В ожидании проверки
- Утвержденный
- В ожидании контента.
- удаленный
... и так далее.
Эти состояния могут быть включены одновременно. Например, элемент может быть ожидающим проверки + ожидающим содержимого.
Кроме того, у каждого элемента будут разные состояния в зависимости от страны, в которой он находится, скажем, у меня есть три страны: Великобритания, Бразилия и Китай.
Итак, у меня есть пункт X с этими свойствами:
- Ожидает проверки (Великобритания) - (Да / Нет)
- Ожидает проверки (Бразилия) - (Да / Нет)
- Ожидает проверки (Китай) - (Да / Нет)
- Утверждено (Великобритания) - (Да / Нет)
- ...
Когда состояния предметов растут, количество комбинаций также растет экспоненциально.
Моя идея состоит в том, чтобы использовать двоичные состояния, имея такую таблицу:
tbl_item:
- status_uk: 0000
- status_br: 0101 (Ожидание проверки + ожидание содержимого)
- status_cn: 0001 (ожидает проверки)
И используйте бинарный оператор в SQL.
Если бы у вас был какой-нибудь совет для меня, это было бы здорово!
Благодарю.
1 ответ
Вы, кажется, хотите стол, который ItemCountries
, Что-то вроде:
create table ItemCountries (
ItemCountriesId int auto_increment primary key,
ItemId int not null,
CountryId int not null,
Status ?,
foreign key (ItemId) references Items(ItemId),
foreign key (CountryId) references Countries(CountryId)
unique (ItemId, CountryId)
);
Я оставил Status
колонка открыта. Я бы, наверное, сделал это varchar(255)
и контролировать значение в приложении. (В других базах данных я бы использовал check
ограничение, но MySQL не применяет их.)
У вас есть другие варианты, включая справочную таблицу для допустимых статусов (очень важно, например, если вам нужно перевести значения статуса на другие языки) или enum
,