1

私にtable Aは2つの列があります:

ID (int, PK)
MaxUsers (int)

私にtable Bは2つの列があります:

ItemID (int)
UserID (int)

table Aが一致するのレコード数はItemID、値を超えることはできませんMaxUsers

これが物理的に発生しないように T-SQL テーブル制約を作成することは可能ですか?

乾杯!カート

4

2 に答える 2

3

条件が満たされない場合にクエリのロールバックを行う on-insert/update トリガーを作成できます。

于 2010-09-21T11:33:35.607 に答える
1

これは、行レベルのCHECK制約、UNIQUE制約などの「バニラ」制約で行うことができFOREIGN KEYS、移植性が高くなります。

CREATE TABLE TableA 
(
 ID INTEGER NOT NULL PRIMARY KEY,
 MaxUsers INTEGER NOT NULL CHECK (MaxUsers > 0), 
 UNIQUE (ID, MaxUsers)
);

CREATE TABLE TableB
(
 ID INTEGER NOT NULL,
 MaxUsers INTEGER NOT NULL, 
 FOREIGN KEY (ID, MaxUsers) 
    REFERENCES TableA (ID, MaxUsers), 
 ID_occurrence INTEGER NOT NULL, 
 CHECK (ID_occurrence BETWEEN 1 AND MaxUsers), 
 UNIQUE (ID, ID_occurrence)
);

シーケンスを維持するにはID_occurrence、「ヘルパー」スト​​アド プロシージャまたはトリガーを作成できます。

于 2010-09-21T12:00:00.233 に答える