일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 파이썬
- spring
- compgen
- mysql
- 백준
- Git
- 리눅스
- @SubscribeMapping
- 티스토리챌린지
- @Autowired
- m:n
- 오블완
- API
- DTO
- 커밋 되돌리기
- 편향된 지수
- 알고리즘
- 기본키 전략
- allocationSize
- application layer
- 런타임 상수
- intelij spring config
- 컴파일 타임 상수
- JPA
- 쉘 스크립트
- 메모리 구조
- JDBC
- BindingResult
- 쿠키
- 프로그래머스
- Today
- Total
둘셋 개발!
[RDBMS] 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 매핑 해주면 된다.
그림으로 보면 다음과 같다.
'데이터베이스' 카테고리의 다른 글
[MySQL] 시스템 변수 변경 (1) | 2024.11.09 |
---|---|
[RDBMS] 정규화 필요성, 과정(1정규화, 2정규화, 3정규화, BC정규화, 역정규화) (0) | 2023.03.21 |
[RDBMS] m:n관계를 찾는 방법 (0) | 2023.03.19 |
[RDBMS] M:N 테이블 설계 (특징, 예시, 테이블 설계 시 고려할 점) (0) | 2023.03.19 |
[RDBMS] 1:M 테이블 설계 시 고려할 점 (정의, 고려할 점, 재귀적 관계) (0) | 2023.03.19 |