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

您可以编写一个插入/更新触发器,在不再满足条件时回滚查询。

于 2010-09-21T11:33:35.607 回答
1

您可以使用“vanilla”约束来做到这一点,例如行级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 回答