본문 바로가기
DB/DB_Modeling

1:M 관계와 재귀적 관계 (part 3)

by Mr.DonyStark 2023. 10. 13.

 ○ 보통 아래 사진과 같이 회사별 부서, 그리고 부서의 하위 팀을 위한 1:M관계로 모델링을 시행함

 ○ 위왁 같은 모델링시 1:M관계는 성립되지만 지속해서 테이블이 늘어나는 구조가 되어버려 개발자들 또는 DB관리자 입장에서 비효율적인 업무를 진행할수밖에 없음.

 ○ 이를 위해 적용할 수 있는 방법이 테이블 재귀적 관계 모델링임.

 ○ 재귀적 관계란 자기자신을 참조, 즉 자기 테이블의 PK를 참조하는 컬럼(필드)을 같은 테이블에 생성하여 자기자신과의 관계를 맺는 것임. 따라서 부모테이블이 자식테이블이며, 자식테이블이 부모테이블 역할을 할수 있음.

 

 ○ 위 사진처럼 부서1은 부서ID를 PK로 선언하였으며 이를 상위부서ID 컬럼이 참조하는 구조임. 즉, 재귀적 관계임을 알 수 있음

 ○ 우측 사진과 같이 총무부, 영업본부, 기획본부는 최상위 부서로써 사위부서는 NULL이지만 하위부서 및 부서의 하위 팀들은 상위부서를 가지고있음. 이러한 구조를 재귀적 관계임.

 ○ 쿼리문

--데이터 삽입
insert into 부서1 values(1,'총무부',Null);
insert into 부서1 values(2,'총무1과',1);
insert into 부서1 values(3,'총무2과',1);
insert into 부서1 values(4, '총무1팀',2);
insert into 부서1 values(5, '총무2팀',2);
insert into 부서1 values(6, '총무1팀',3);
insert into 부서1 values(7, '총무2팀',3);
insert into 부서1 values(8,'영업본부',Null);
insert into 부서1 values(9,'영업1팀',8);
insert into 부서1 values(10,'총무2과',8);
--데이터 업데이트
update 부서1 set 부서명 = '영업2팀' where 부서ID = 10
--데이터삽입
insert into 부서1 values(11,'기획본부',Null);
insert into 부서1 values(12,'기획1팀',11);
insert into 부서1 values(13,'기획2팀',11);
--셀프조인(이너조인)
select*from 부서1 a
inner join 부서1 b
on a.부서ID = b.상위부서ID
--Left outer join
select*from 부서1 a
left outer join 부서1 b
on a.부서ID = b.상위부서ID

'DB > DB_Modeling' 카테고리의 다른 글

1:1 관계  (1) 2023.10.24
M:N 관계  (0) 2023.10.16
1:M 관계 (part 2)  (0) 2023.10.12
1:M 관계 (part 1)  (1) 2023.10.11
PK(primary Key) 설계  (0) 2023.10.10