2010-09-21 24 views
1

table A我有2列:创建T-SQL约束来防止表中的x重复记录数量?

ID (int, PK) 
MaxUsers (int) 

table B我有2列:

ItemID (int) 
UserID (int) 

的记录数table A匹配ItemID的不能超过MaxUsers值。

是否可以编写一个T-SQL表约束,使它在物理上不可能发生这种情况?

干杯! Curt

+0

你在这里试图解决什么?一家超过其拥有许可证的用户数量的公司? – 2010-09-21 11:31:42

+0

如果有人将MaxUsers数字更新为下限,您会做什么?你将删除表B中的哪些记录? – 2010-09-21 11:35:24

+0

@Lasse - 这是类似的东西是的,谢谢。 – Curt 2010-09-21 11:51:24

回答

3

您可以编写一个on-insert/update触发器,用于在条件不再满足时执行回滚查询。

+0

这听起来很不错。您将需要表B上的INSERT触发器和表A上的UPDATE触发器 – 2010-09-21 11:35:54

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序列,你可以创建一个“帮手”存储过程或触发器。