2

テーブルが 2 つある場合は、Doors と House としましょう。

テーブルは、外部キー (家へのドア) を介して接続されます。制約は、1 つの家に 2 ~ 10 のドアがあることです。

これをデータレベルで実施する最善の方法は何でしょうか?

4

1 に答える 1

1
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 つにマージできますが、この単純なシナリオでは、すべてのことを考慮すると、それだけの価値があるかどうかはわかりません。

于 2013-10-14T11:56:27.600 に答える