1:1 관계에 대해 알아보자.
1:1 관계는 부부 관계이다.
1 : 1 관계란 양측 입장에서 상대를 보더라도 반드시 단 하나의 관계를 가지는 것을 말한다.
1:1 관계는 부부관계라고 말한다.
가장 단순한 관계로 보이지만 중급 이상의 고급 기술에 해당된다.
1:M, M:N 관계로 해결할 수 없는 많은 문제들이 이 관계를 통해서 해결되는 것을 알 수 있다.
![](/post_images/Database/1-1excel.png)
신랑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 |
|
부부Id | 신랑명 | 신부명 | |
---|---|---|---|
1 | 1 | 홍길동 | 어우동 |
2 | 2 | 김길동 | 황진이 |
우리가 부부 테이블fh 하고 싶은 것은 이 하나의 테이블을 1:1 관계를 유지하되 두 개의 객체(신랑, 신부)로 분리하는 것이다.
왜 분리해야 되는가?
신랑, 신부별로 각각 자신만의 특성이 존재하기 때문에 서로 마스터 테이블로 분리하는 것이 좋다.
1:1 관계 테이블의 PK
1:1 관계는 서로의 PK를 FK로 참조하진 않지만, 서로의 PK를 자신의 PK로 사용하는 형태이다. 일심동체
![](/post_images/Database/1-1PK.png)
1:1 관계를 맺은 두 테이블을 조인하면 위에서 살펴봤던 부부 테이블의 결과(엑셀) 테이블과 동일한 결과를 얻어낼 수 있다.
부부 테이블 VS 신랑,신부 개별 테이블
부부 테이블에 모든 속성들을 추가해서 사용해도 문제는 없지만 부부 테이블이 다른 관계 테이블과 관계를 맺게되면 조회 시 쓸데 없는 컬럼들을 제거 해줘야 하는 불편함이 존재할 수도 있다.
신랑, 신부 개별 테이블로 분리하는 것이 각각 속성들을 관리하기도 편리하고,
다른 관계 테이블들과 관계를 확장해나갈 수 있다는 장점이 존재하기 때문에 개별 테이블로 분리하여 관리하는 것이 더 좋다고 본다.
⭐️ 정리하면, 1:1 관계는 원래 일심동체로 하나이다. 하지만 테이블은 두 개로 관리되는 것이 유용한 편이다.