テーブルが 2 つある場合は、Doors と House としましょう。
テーブルは、外部キー (家へのドア) を介して接続されます。制約は、1 つの家に 2 ~ 10 のドアがあることです。
これをデータレベルで実施する最善の方法は何でしょうか?
テーブルが 2 つある場合は、Doors と House としましょう。
テーブルは、外部キー (家へのドア) を介して接続されます。制約は、1 つの家に 2 ~ 10 のドアがあることです。
これをデータレベルで実施する最善の方法は何でしょうか?
create table houses (id int primary key)
create table doors (
id int primary key,
house_id int references houses(id)
)
create trigger doorsCondition on doors
instead of insert
AS
declare @max int, @min int
select @max = max(i), @min = min(i) from (
select count(1) i from (
select house_id from doors where house_id = ANY (select house_id from inserted)
union all
select house_id from inserted) subquery
group by house_id) subQuery2
if (@max <= 10 and @min >= 2)
insert into doors select * from inserted
else
print 'The insert violates business constraint'
および対応する削除のトリガー。おそらくそれらを 1 つにマージできますが、この単純なシナリオでは、すべてのことを考慮すると、それだけの価値があるかどうかはわかりません。