我不知道如何用这个问题的标题来表达清楚,所以这是我最好的解释:
我的客户有一系列相互之间存在父子关系的表。例如:
CREATE TABLE dbo.First_Level (
id INT IDENTITY(1, 1) NOT NULL,
name VARCHAR(20) NOT NULL,
active BIT NOT NULL DEFAULT(1),
CONSTRAINT PK_First_Level PRIMARY KEY CLUSTERED (id)
)
CREATE TABLE dbo.Second_Level (
id INT IDENTITY(1, 1) NOT NULL,
first_level_id INT NOT NULL,
name VARCHAR(20) NOT NULL,
active BIT NOT NULL DEFAULT(1),
CONSTRAINT PK_Second_Level PRIMARY KEY CLUSTERED (id),
CONSTRAINT FK_SecondLevel_FirstLevel FOREIGN KEY (first_level_id) REFERENCES dbo.First_Level (id)
)
CREATE TABLE dbo.Third_Level (
id INT IDENTITY(1, 1) NOT NULL,
second_level_id INT NOT NULL,
name VARCHAR(20) NOT NULL,
active BIT NOT NULL DEFAULT(1),
CONSTRAINT PK_Third_Level PRIMARY KEY CLUSTERED (id),
CONSTRAINT FK_ThirdLevel_SecondLevel FOREIGN KEY (second_level_id) REFERENCES dbo.Second_Level (id)
)
棘手的部分是,如果父母被标记为不再活动(活动 = 0),那么它下面的任何孩子也应该被视为不再活动。但是,即使父母仍然处于活动状态,孩子也可以被标记为不再活动。
我正在寻找有关如何最好地执行这些业务规则的建议。我可以覆盖视图,然后查看所有父级以确定任何给定行的最终活动标志,但我的客户已经围绕这些表编写了大量代码。
我可以通过触发器强制执行规则,但我希望有一种更优雅的方式来执行此操作。
谢谢!