数据库设计:单个项目的多个状态
Database Design: Multiple States for single item
我正在设计一个数据库,我想知道做这样的事情的最佳方法是什么:
我的数据库将存储项目。每个项目可以处于多种状态:
- 等待验证
- 已验证
- 等待内容。
- 已删除
...等等。
这些状态可以同时开启。例如,一个项目可以等待验证 + 等待内容。
此外,每件物品都会根据所在国家/地区的不同而有不同的状态,假设我有三个国家/地区:英国、巴西和中国。
所以我有一个具有这些属性的项目 X:
- 待验证(英国)- (Yes/No)
- 待验证(巴西)- (Yes/No)
- 等待验证(中国)-(Yes/No)
- 已验证(英国)- (Yes/No)
- ...
当项目的状态增长时,组合的数量也呈指数增长。
我的想法是使用二进制状态,有一个 table 比如:
tbl_item:
- status_uk:0000
- status_br:0101(等待验证+等待内容)
- status_cn:0001(等待验证)
并在SQL中使用二元运算符。
如果你对我有什么建议那就太好了!
谢谢。
您似乎想要 table 即 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 不强制执行这些约束。)
您还有其他选择,包括有效状态的参考 table(例如,如果您需要将状态值翻译成其他语言,这非常重要)或 enum
.
我正在设计一个数据库,我想知道做这样的事情的最佳方法是什么:
我的数据库将存储项目。每个项目可以处于多种状态:
- 等待验证
- 已验证
- 等待内容。
- 已删除
...等等。
这些状态可以同时开启。例如,一个项目可以等待验证 + 等待内容。
此外,每件物品都会根据所在国家/地区的不同而有不同的状态,假设我有三个国家/地区:英国、巴西和中国。
所以我有一个具有这些属性的项目 X:
- 待验证(英国)- (Yes/No)
- 待验证(巴西)- (Yes/No)
- 等待验证(中国)-(Yes/No)
- 已验证(英国)- (Yes/No)
- ...
当项目的状态增长时,组合的数量也呈指数增长。
我的想法是使用二进制状态,有一个 table 比如:
tbl_item:
- status_uk:0000
- status_br:0101(等待验证+等待内容)
- status_cn:0001(等待验证)
并在SQL中使用二元运算符。
如果你对我有什么建议那就太好了!
谢谢。
您似乎想要 table 即 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 不强制执行这些约束。)
您还有其他选择,包括有效状态的参考 table(例如,如果您需要将状态值翻译成其他语言,这非常重要)或 enum
.