2013-10-07 4 views
2

두 개의 테이블이있는 경우 Doors and House를 말하십시오.범위의 행 수 제한

테이블은 외래 키 (집에 대한 문)를 통해 연결됩니다. 제약은 한 집에 2-10 개의 문이 있다는 것입니다.

데이터 수준에서이를 적용하는 가장 좋은 방법은 무엇입니까?

+3

저는 대개 트리거가 마음에 들지 않지만 구현할 필요가있는 것처럼 들립니다. 그렇게 말하면 이것은 비즈니스 로직처럼 들리며 그 측면에서 구현 될 수도 있습니다. – sgeddes

+0

어떤 DBMS를 사용하고 있습니까? 포스트그레스? 신탁? –

답변

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' 

및 삭제를위한 해당 트리거. 당신은 아마 그것들을 하나에 합칠 수 있지만,이 간단한 시나리오에서는 모든 것을 고려할 가치가 있는지 확신 할 수 없습니다.