SQL 创建多个与单个“状态表”

Ser*_*gio 0 sql database-design

在审查了许多数据库设计之后,我仍然不确定什么是最好的方法。我正在设计一个数据库,其中大多数实体具有不同的状态。例如我可能有类似的东西

  • 用户状态:活动、非活动、禁用等。
  • 订单状态:打开、关闭、取消;
  • 办公室状态:打开、关闭。

我在思考两种不同的选择。

1)为每个实体创建一个“状态”表

    CREATE TABLE UserStatus(
       UserStatusID int,
       Description varchar(255)
    );
    CREATE TABLE OrderStatus(
       OrderStatusID int,
       Description varchar(255)
    );
Run Code Online (Sandbox Code Playgroud)

2)为所有实体创建一个共享状态表

    CREATE TABLE Status(
       StatusID int,
       Description varchar(255)
    );
Run Code Online (Sandbox Code Playgroud)

如果您能解释哪个选项更好或每个选项的优点,我将不胜感激

Gor*_*off 5

多个表有一个关键优势:您可以声明适当的外键关系以确保引用表中的值正确。

单个表具有不同的优势:您可以将所有状态集中在一个位置。如果您需要做一些事情,比如将所有状态翻译成不同的语言,这会非常方便。

在大多数情况下,我认为第一个优势大于第二个。然而,在某些情况下,第二个可能很重要。