RDB 1:1 관계

1:1 관계에 대해 알아보자.

1:1 관계는 부부 관계이다.

1 : 1 관계란 양측 입장에서 상대를 보더라도 반드시 단 하나의 관계를 가지는 것을 말한다.

1:1 관계는 부부관계라고 말한다.

가장 단순한 관계로 보이지만 중급 이상의 고급 기술에 해당된다.

1:M, M:N 관계로 해결할 수 없는 많은 문제들이 이 관계를 통해서 해결되는 것을 알 수 있다.

신랑, 신부 1대1 관계를 나타낸 엑셀 표
신랑ID 신랑명 신부ID 신부명
1 홍길동 B 이난영
2 김종남 A 황금자
3 이하선 C 박상순

위 테이블은 조인 테이블의 형태이다. 1:1 관계를 나타나는 데 PK가 신랑ID, 신부ID 두 개로 잡아야 하는데 PK의 최소성을 만족하지 않는것 같다.

테이블을 다시 설계해보자.(부부 테이블 생성)

부부 테이블

열 이름 데이터 형식 NULL 허용
부부Id int x
신랑명 varchar(50) o
신부명 varchar(50) o
1
2
INSERT INTO 부부
VALUES (1, '홍길동', '어우동'), (2, '김길동', '황진이');
  부부Id 신랑명 신부명
1 1 홍길동 어우동
2 2 김길동 황진이

우리가 부부 테이블fh 하고 싶은 것은 이 하나의 테이블을 1:1 관계를 유지하되 두 개의 객체(신랑, 신부)로 분리하는 것이다.

왜 분리해야 되는가?

신랑, 신부별로 각각 자신만의 특성이 존재하기 때문에 서로 마스터 테이블로 분리하는 것이 좋다.

1:1 관계 테이블의 PK

1:1 관계는 서로의 PK를 FK로 참조하진 않지만, 서로의 PK를 자신의 PK로 사용하는 형태이다. 일심동체

서로의 PK를 자신의 PK로 사용

1:1 관계를 맺은 두 테이블을 조인하면 위에서 살펴봤던 부부 테이블의 결과(엑셀) 테이블과 동일한 결과를 얻어낼 수 있다.

부부 테이블 VS 신랑,신부 개별 테이블

부부 테이블에 모든 속성들을 추가해서 사용해도 문제는 없지만 부부 테이블이 다른 관계 테이블과 관계를 맺게되면 조회 시 쓸데 없는 컬럼들을 제거 해줘야 하는 불편함이 존재할 수도 있다.

신랑, 신부 개별 테이블로 분리하는 것이 각각 속성들을 관리하기도 편리하고,

다른 관계 테이블들과 관계를 확장해나갈 수 있다는 장점이 존재하기 때문에 개별 테이블로 분리하여 관리하는 것이 더 좋다고 본다.

⭐️ 정리하면, 1:1 관계는 원래 일심동체로 하나이다. 하지만 테이블은 두 개로 관리되는 것이 유용한 편이다.