테이블 A | 테이블 B | 테이블 C | |||||
PK | A | PK | A | PK | A | ||
PK | B | PK | B | ||||
PK | C |
기존 위와같은 테이블로 설계 되어있는 것을
테이블 A | 테이블 B | 테이블 C | |||||
PK | A | FK | A | FK | B | ||
PK | B | PK | C |
이와 같이 변경하는게 맞을까요?
가령 A값과 B값을 가지고 있는 상태에서 테이블C 를 조회할때 Join 구문이 필요하게 되는데
C의 테이블이 250만건이상으로 크기가 크고
이런 형식의 1:n 테이블 수가 좀 많이 존재 합니다
아래와 같이 구조를 변경하는게 맞는거 같으면서도 아닌거 같은데
가르침 부탁드립니다 ㅠㅠ
FK 표시 방식
- FK 표사를 PK 를 대체하는 방식으로 하면 안되고 별도란으로 표시해야 합니다.
- 첫번째 설계에서도 A 는 FK 이면서 동시에 PK 인거겠죠.
테이블 설계
- 첫번째 방식은 FK 로 가져온 인자가 PK 에 포함되는 구조이고(복합PK)
- 두번째 방식은 FK 로 가져온 인자가 PK 에 포함되지 안는 구조네요(단일PK)
각각 장단점이 있을 것입니다.
식별자의 명확성
- 첫번째는 키가 명확하다는 것이죠. 실질식별자 형태일 듯 합니다.
- 두번째는 인조식별자 형태가 될 것이구요.
조인의 편리성
- 첫번째는 조인 조건이 더 많이 들어가야 하겠네요.
조인의 필요성
- C 를 통해 A 를 알아야 하는 경우
- 첫번째는 C 만 가지고도 조인 없이 구할 수 있지만
- 두번째는 C 만 가지고는 안되고 조인을 반드시 해야만 합니다.