1:N 관계에서 중간테이블 (연관엔티티)
4
投稿した質問数 1
안녕하세요 우선 값진 강의 만들어주셔서 감사드립니다. 취준을 하며 개인 프로젝트를 진행 중인데, 고민 해오던 부분들에 많은 도움이 되었습니다.
강의를 완강하고, 학습한 내용들을 바탕으로 이전에 진행했던 프로젝트의 DB를 재검토하고 재설계 해보고 있습니다.
구글링, 해당 게시판에 올라온 이전 질문들 참고하고 ai와 대화를 하고도 완전하게 확신이 서지 않는 부분이 있어서 질문드립니다.
우선 제가 만들고 있는 서비스는 "좌석이 있는 공연 예매 시스템" 입니다.
공연 데이터 생성시 해당 공연의 좌석들이 함께 생성됩니다. 즉 특정 공연의 특정 좌석들이 고유하게 생성됩니다.
그리고 사용자는 좌석을 다중 선택하여 선점하고 예매할 수 있습니다.
(예매 - 좌석) 관계는 (1:N) 입니다.
그래서 기존 DB 에서는 N 쪽인 좌석이 예매 id 를 fk 로 들고 있는 간단한 형태로 진행하였습니다.
그런데 강의 중 다대다(M:N) 관계 부분에서 연결 테이블의 본질이 관계 자체를 하나의 독립된 데이터로 보고, 그것을 테이블로 모델링 하는 것 이라는 내용을 접하고,
비록 1:N 관계이지만, 예매 - 좌석 관계가 엔티티로 승격될만 한가에 대한 고민을 했습니다.
(강의에서 예시로 사용된 주문 - 주문상품 - 상품 을 보며, 좌석을 수량이 단 하나뿐인 상품이라고 생각한다면 예매 - 예매좌석 - 좌석 형태가 비슷하다고 생각했습니다.)
이유가 충분하다면 실무에서도 N:M 관계에서 뿐만 아니라 1:N 관계에서도 중간테이블 (연관엔티티)를 두는 설계를 실제로 하는지, 현재 상황에서도 (질문이 너무 길어지고 복잡해질까봐 제가 판단한 이유들을 설명드리진 않았지만) 연관관계 엔티티를 두는 것이 타당한 판단일지 고견 여쭈어봅니다.
긴 질문 읽어주셔서 감사합니다!
回答 1
0
안녕하세요, 인프런 AI 인턴입니다. shim9597님.
시스템 설계와 관련하여 중요한 결정이 필요할 때 고민이 많으셨을 것 같습니다. 특히 주제를 다루는 강의에서 1:N 관계에서도 중간 테이블을 활용하고 싶다는 점이 흥미롭네요.
중간 테이블 사용: “예매 - 예매좌석 - 좌석” 형태에서 중간 테이블(또는 엔티티)을 사용하는 것은 주로 관계에 대한 추가 정보를 저장하거나, 관계 자체가 중요한 경우에 도입됩니다.
독립적 데이터로서 관계: 중간 테이블을 둠으로써 이 관계 내에 더 많은 정보를 추가할 수 있습니다. 예를 들어, 좌석 예매 시점, 예약 상태 등 예매와 좌석 간의 관계에 부여해야 할 추가적인 데이터를 모델링할 때 중간 엔티티가 유용할 수 있습니다.
실무 적용: 실무에서는 1:N 관계에서도 중간 엔티티를 두는 경우가 있습니다. 이는 필요에 따라 달라지며, 예를 들어, M:N으로의 변경 가능성을 고려하거나 추가 데이터 저장이 필요할 때 사용합니다.
유사한 질문 및 사례:
- 주문과 배송의 1:1 관계가 아닌 1:N 관계의 요구사항에 대해 여쭙습니다.: 이 사례에서는 주문과 배송 사이에 중간 테이블을 두어 더 유연한 관계 설정을 한다는 예시를 들고 있습니다. 이를 참고하시면 유사한 고민을 해결하는데 도움이 될 수 있습니다.
- 주문과 배송의 1:1 관계가 아닌 1:N 관계의 요구사항에 대해 여쭙습니다.: 이 사례에서는 주문과 배송 사이에 중간 테이블을 두어 더 유연한 관계 설정을 한다는 예시를 들고 있습니다. 이를 참고하시면 유사한 고민을 해결하는데 도움이 될 수 있습니다.
지금 상황에서는 예매 좌석에 대한 초과 정보를 저장할 필요가 있다면 이러한 모든 것을 고려하여 중간 엔티티로 확장하는 것도 좋은 방법입니다. 또한, 시스템의 복잡도와 관리 용이성을 함께 고려해서 설계를 결정하시면 좋겠습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
일대일 fk 위치
0
32
1
제 3 정규형 vs BCNF 정규형 차이점?
0
57
3
BCNF 질문
0
64
2
연관 엔티티 네이밍 규칙
0
45
1
진짜 강의 듣는거 너무 고문
0
131
1
28강 sql 파일 어딨나여?
0
80
1
2NF의 엄밀한 정의
0
70
1
comment 채번을 사용해야 하는 이유에 대한 설명이 필요합니다.
0
112
3
학습중인 수업자료를 받아볼 수 있을까요??
0
96
2
수업자료 pdf파일관련 건의 - 제목 링크위치 개선
0
82
2
서비스 운영 중 잘못된 테이블 설계 발견시 수정 시점에 대한 질문
1
100
2
실무적인 설계로 접근했을 때 제 2정규형 항상 만족?
0
78
1
슈퍼/서브 타입 joined 전략
0
68
2
created_at 관련 구현과 DB ENUM에 대해
0
68
1
M:N 관계의 연관 엔티티 설계 순서
0
71
2
데이터 역사성 훼손 문제
0
64
2
실무팁 - 등록자,수정자 컬럼 관리 관련 질문입니다.
0
80
1
구글이 이메일 변경을 허용하는 이유
0
121
1
order_item 테이블 (order_id, product_id) 유니크 제약조건 누락
0
99
2
BCNF 정규화에 대한 질문
0
119
2
주문, 결제 엔티티의 분류
1
120
1
실무에서의 복수 항목에 대한 관리 방법이 궁금합니다.
0
90
1
역할 및 발생 시점에 따른 엔티티 분류
0
85
1
대리키의 외부 노출에 대한 질문을 하고 싶습니다.
0
106
2

