SQL 创建多个与单个"状态表"



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

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

我想有两种不同的选择。

1( 为每个实体创建一个"状态"表

CREATE TABLE UserStatus(
UserStatusID int,
Description varchar(255)
);
CREATE TABLE OrderStatus(
OrderStatusID int,
Description varchar(255)
);

2( 为所有实体创建单个共享状态表

CREATE TABLE Status(
StatusID int,
Description varchar(255)
);

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

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

单个表具有不同的优势:您可以在一个位置显示所有状态。 如果您需要执行诸如将所有状态翻译成其他语言之类的操作,这将非常方便。

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

另一个选项 - 为具有 EntityID 的所有实体创建单个共享状态表。 像这样:

CREATE TABLE dbo.Entity(
EntityID int NOT NULL
CONSTRAINT PK_Entity PRIMARY KEY CLUSTERED,
Name varchar(50) NOT NULL,
Description varchar(255) NULL,
)
CREATE TABLE dbo.Status(
EntityID int NOT NULL
CONSTRAINT FK_Status_Entity 
FOREIGN KEY(EntityID)   REFERENCES dbo.Entity (EntityID),
StatusID int NOT NULL,
Name varchar(50) NOT NULL,
Description varchar(255) NULL,
CONSTRAINT PK_Status PRIMARY KEY CLUSTERED (
EntityID ASC,
StatusID ASC)
CONSTRAINT UQ_Status_EntityID_Name UNIQUE NONCLUSTERED (
EntityID ASC,
Name ASC)
) 

相关内容

最新更新