数据库设计:单个项目的多个状态

时间:2016-12-09 10:56:35

标签: mysql sql states

我正在设计一个数据库,我想知道做这样的事情的最佳方法是什么:

我的数据库将存储项目。每个项目可以处于许多状态:

  1. 等待验证
  2. 验证
  3. 等待内容。
  4. 删除
  5. ......等等。

    这些州可以同时开启。例如,一个项目可以等待验证+等待内容。

    此外,每个项目都有不同的状态,具体取决于所在国家/地区,假设我有三个国家/地区:英国,巴西和中国。

    所以我有一个带有这些属性的项目X:

    • 待验证(英国) - (是/否)
    • 待验证(巴西) - (是/否)
    • 待验证(中国) - (是/否)
    • 验证(英国) - (是/否)
    • ...

    当项目的状态增长时,组合的数量也会以指数的方式增长。

    我的想法是使用二进制状态,有一个像:

    这样的表

    tbl_item:

    • status_uk:0000
    • status_br:0101(等待验证+等待内容)
    • status_cn:0001(等待验证)

    并在SQL中使用二进制运算符。

    如果您对我有任何建议,那就太棒了!

    感谢。

1 个答案:

答案 0 :(得分:0)

您似乎想要一张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