2013-10-07 60 views
2

如果您有兩個表,那麼讓我們只說Doors和House。將行數限制在一個範圍內

表格通過外鍵(門到門)連接。限制是一個房子有2到10個門。

什麼是最好的方式來強制執行此數據級別?

+3

我通常不喜歡觸發器,但這聽起來像一個地方,你可能需要實現一個。據說,這聽起來更像商業邏輯,並且可以在這方面實施。 – sgeddes

+0

您正在使用哪些DBMS? Postgres的?甲骨文? –

回答

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' 

和相應的刪除觸發器。你可以將它們合併成一個,但我不確定這是否值得,所有事情都考慮在這個簡單的場景中。