Дизайн базы данных: несколько состояний для одного элемента

Я проектирую базу данных, и я хотел бы знать, каков наилучший способ сделать такую ​​вещь:

Моя база данных будет хранить предметы. Каждый предмет может быть во многих штатах:

  1. В ожидании проверки
  2. Утвержденный
  3. В ожидании контента.
  4. удаленный

... и так далее.

Эти состояния могут быть включены одновременно. Например, элемент может быть ожидающим проверки + ожидающим содержимого.

Кроме того, у каждого элемента будут разные состояния в зависимости от страны, в которой он находится, скажем, у меня есть три страны: Великобритания, Бразилия и Китай.

Итак, у меня есть пункт 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,

Другие вопросы по тегам