この質問のタイトルを明確にする方法がわかりませんでしたので、これが私の最善の説明です。
私のクライアントには、互いに親子関係にある一連のテーブルがあります。例えば:
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) とマークされている場合、その下にあるすべての子もアクティブではないと見なす必要があることです。ただし、親がまだアクティブであっても、子は非アクティブとしてマークされる場合があります。
これらのビジネス ルールを適用する最善の方法についての提案を探しています。ビューをオーバーレイして、すべての親を調べて、特定の行の最終的なアクティブ フラグを決定することもできますが、私のクライアントには、これらのテーブルに関する大量のコードが既に記述されています。
トリガーを介してルールを強制することもできますが、これを行うためのよりエレガントな方法があることを願っています。
ありがとう!