둘셋 개발!

[RDBMS] 1:1 관계 (정의, 올바른 테이블 설계, 실제 활용 예시) 본문

데이터베이스

[RDBMS] 1:1 관계 (정의, 올바른 테이블 설계, 실제 활용 예시)

23 2023. 3. 20. 15:37

✔️ 1:1 관계

한 개 레코드는 반대편 테이블의 한 개의 레코드과 연결되어 있는 관계를 말한다.

1:1 관계

 실생활 예시로 든다면 부부관계가 1:1 관계이다.

한 명의 신부는 여러명의 신랑과 부부관계를 맺을 수 없고, 한 명의 신랑은 여러명의 신부와 부부관계를 맺을 수 없다.


✔️ 예시

테이블을 만들어 본다면 다음과 같을 수 있다.

1:1 매핑이 잘 되었다.

 

하지만 문제점이 있다.

 

❗️ 문제점

1. delete가 불가능

   만약 김신랑의 데이터를 삭제하려고 하면 신부 테이블의 신랑ID는 참조하고 있던 데이터가 사라지므로 부모없는 자식이 발생하게 된다.

 

2. join시 문제발생

다음과 같이 Pk가 여러개가 되어 버린다.

(1번째, 3번째) 컬럼이 pk이고, (4번째, 6번째) 컬럼이 pk이다.

 

 

개선된 테이블

신랑 테이블에서의 신랑ID는 pk임과 동시에 신부ID의 FK로 한다.

같은 ID 값을 가지고 있으면 부부관계라고 생각하면 된다.

 


✔️ 실제 활용 예시

문서 테이블을 만들고자 한다.

문서에는 제목, 작성자, 작성일자, ... 등이 있을 것이다.

이때 문서의 종류마다 추가해야하는 컬럼들이 존재한다.

만약 출입국과 관련된 문서라면 외국인 이름, 외국인 국적, 출국일, 입국일 등이 있어야 한다.

만약 회계와 관련된 문서라면 입금금액, 출금금액, 잔액, 등이 있어야 한다.

 

그렇다고 문서테이블의 컬럼에 제목, 작성자, 작성일자, 외국인 이름, 외국인 국적, 출국일 ,입국일, 입금금액, 잔액, .....을 다 넣으면 Null이여야 하는 데이터가 많아짐으로 이건 잘못 설계된 것이다.

 

이때 1:1 관계를 넣어주면 된다.!

공통적으로 들어가야 하는 컬럼들은 문서 테이블에 넣어주고, 출입국 테이블, 회계테이블을 새로 생성해서 문서 테이블과 1:1 매핑 해주면 된다.

그림으로 보면 다음과 같다.