R이라는 id를 PK로 갖는 table이 있고
이들 사이의 배타 관계를 나타내는 ExclusiveRelationOfR이라는 table을 design 하려고 합니다.
대략 다음과 같은 식이 되겠죠
create table ExclusiveRelationOfR
(
Rid1 references R.id,
Rid2 references R.id,
primary key (Rid1, Rid2)
);
그런데 일반적으로 배타 관계는 commutative relation입니다.
즉 Rid1 = 'A', Rid2 = 'B'인 record와 Rid1 = 'B', Rid2 = 'A'인 record는 서로 같은 의미를 갖게 되는 것이죠.
따라서 구현하는 방법이
1. 두가지 경우를 모두 넣어준다.
'A'와 'B'사이의 배타 관계를 생성할 때 두 record씩 쌍으로 생성한다.
즉 insert into ExclusiveRelationOfR values ('A', 'B')와 insert into ExclusiveRelationOfR values ('B', 'A')를 실행한다.
2. 하나만 넣고 select 할때 두가지 경우를 모두 고려해 준다.
즉 A와 배타 관계가 있는 R을 찾을 때
select Rid1 from ExclusiveRelationOfR where Rid2='A'
union
select Rid2 from ExclusiveRelationOfR where Rid1='A';
이렇게 두 가지 정도가 있을 것 같은데
RDB에서는 일반적으로 어떤 방식으로 모델링을 하는지 궁금합니다. |