web-dev-qa-db-ja.com

2つの異なるテーブルに一意のIDを持っている

2つの異なるテーブルを使用します。1つは「アクティブ」のときにオブジェクトを保持し、もう1つは「非アクティブ」になるとオブジェクトを保持します。したがって、IDは両方のテーブル(結合された)ごとに一意です。両方のテーブルでIDが一度だけ表示されるように、IDの制約を作成するにはどうすればよいですか?

SQL Serverを使用しています。

5
Shani

これでうまくいくと思います。

CREATE TABLE Foo 
(
FooId INT PRIMARY KEY,
Active BIT NOT NULL,
UNIQUE(FooId, Active)
)

CREATE TABLE FooActive 
(
FooId INT PRIMARY KEY,
Active AS CAST(1 AS BIT) PERSISTED,
FOREIGN KEY (FooId, Active) REFERENCES Foo(FooId, Active)
)

CREATE TABLE FooInActive 
(
FooId INT PRIMARY KEY,
Active AS CAST(0 AS BIT) PERSISTED,
FOREIGN KEY (FooId, Active) REFERENCES Foo(FooId, Active)
)
12
Martin Smith