inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

김영한의 실전 데이터베이스 - 설계 1편, 현대적 데이터 모델링 완전 정복

자연 키 vs 대리 키3 - 성능 트레이드오프

자연키 vs 대리키 실무질문

2

obi

작성한 질문수 1

0

자연키vs대리키
강의를 보면 대리키를 사용하는게 안정성,유연성에 있어 많은 장점이 있어 대부분 대리키를 사용한다고 하셨는대,

다음과 같은 케이스에도 대리키를 쓰는게 좋을지 궁금합니다. (뒤에 강의에 나올수도 있지만 현시점 궁금해서 질문드립니다.)

1. 조인테이블의 경우 a,b테이블의 pk인 대리키를 이용해 복합키를 만들어서 pk로 쓰면 될지, 아니면 그것 역시 따로 대리키를 만들어야 할지 궁금합니다.

2. 정말 단순한 enum 형태의 테이블일 경우, 예를 들어 유저상태값을 표현하기위해 정상,휴면,탈퇴 등을 기록하는 테이블의 경우 자연키, 대리키 어떤거를 써야할지 궁금합니다. 제가 경험한 바로는 enum 형태의 간단한 테이블조차 대리키를 사용하니 유저 테이블을 조회할때 간단한 상태값조차 조인을 해서 봐야하니 불편하더라고요.

감사합니다.

sql mysql dbms/rdbms 소프트웨어-설계 SQLD

답변 1

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다. OBIGO_MS3님.

자연키와 대리키의 선택은 데이터베이스 설계에서 자주 직면하는 고민입니다. 두 가지 케이스에 대해 말씀드리겠습니다.

  1. 조인 테이블의 경우:

    • 조인 테이블은 일반적으로 두 개의 테이블 간의 다대다(Many-to-Many) 관계를 관리하기 위해 사용됩니다. 이 경우에는 두 테이블의 대리키를 사용하여 복합키를 만드는 것이 일반적입니다. 이렇게 하면 두 테이블의 관계를 명확하게 정의하고, 각 테이블의 변경이 조인 테이블에 미치는 영향을 최소화할 수 있습니다.
    • 하지만, 조인 테이블 자체를 자주 참조해야 하거나 추가적인 속성이 있는 경우라면 별도의 대리키를 적용하는 것도 고려해볼 수 있습니다.
  2. Enum 형태의 테이블:

    • 이러한 테이블에서는 대개 상태값(예: 정상, 휴면, 탈퇴)이 자연키로 이용됩니다. 이 경우 대리키를 사용하지 않고, 상태값 자체를 PK로 두는 것이 일반적입니다. 이는 테이블이 작고 상태값이 비교적 불변하는 경우가 많기 때문입니다.
    • 대리키를 사용하면 시스템의 일관성을 유지하는 데 유리하다는 점과 비즈니스 로직의 단순화를 가능하게 하지만, 간단한 상태값을 나타내기 위해서는 굳이 필요하지 않을 수도 있습니다. 상황에 따라 적절한 방법을 적용하시면 됩니다.

이러한 선택은 데이터 모델의 복잡성, 데이터 변경 가능성, 그리고 연관된 시스템의 요구사항에 따라 결정됩니다. 데이터베이스 설계에서는 단순성을 유지하면서도 변경 가능한 환경에 대처할 수 있는 구조를 추구해야 합니다.

추가적인 정보는 아래 관련 질문과 답변을 통해 확인하실 수 있습니다:

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

1:N 관계에서 중간테이블 (연관엔티티)

0

34

2

일대일 fk 위치

0

35

1

제 3 정규형 vs BCNF 정규형 차이점?

0

66

3

BCNF 질문

0

70

2

연관 엔티티 네이밍 규칙

0

46

1

진짜 강의 듣는거 너무 고문

0

132

1

28강 sql 파일 어딨나여?

0

84

1

2NF의 엄밀한 정의

0

71

1

comment 채번을 사용해야 하는 이유에 대한 설명이 필요합니다.

0

119

3

학습중인 수업자료를 받아볼 수 있을까요??

0

99

2

수업자료 pdf파일관련 건의 - 제목 링크위치 개선

0

85

2

서비스 운영 중 잘못된 테이블 설계 발견시 수정 시점에 대한 질문

1

102

2

실무적인 설계로 접근했을 때 제 2정규형 항상 만족?

0

80

1

슈퍼/서브 타입 joined 전략

0

71

2

created_at 관련 구현과 DB ENUM에 대해

0

71

1

M:N 관계의 연관 엔티티 설계 순서

0

77

2

데이터 역사성 훼손 문제

0

65

2

실무팁 - 등록자,수정자 컬럼 관리 관련 질문입니다.

0

83

1

구글이 이메일 변경을 허용하는 이유

0

122

1

order_item 테이블 (order_id, product_id) 유니크 제약조건 누락

0

100

2

BCNF 정규화에 대한 질문

0

121

2

주문, 결제 엔티티의 분류

1

124

1

실무에서의 복수 항목에 대한 관리 방법이 궁금합니다.

0

90

1

역할 및 발생 시점에 따른 엔티티 분류

0

91

1