🚀 중간 테이블에 대한 설명
1️⃣ DRINK_INGREDIENTS (음료와 재료 간의 관계 중간 테이블)
관계:
- DRINKS와 INGREDIENTS 테이블 간의 N:M 관계를 중간 테이블인 DRINK_INGREDIENTS를 사용해 연결합니다.
설명:
- 하나의 음료는 여러 재료를 가질 수 있고, 하나의 재료는 여러 음료에서 사용될 수 있습니다.
- 예를 들어, "카라멜 마끼아또" 음료에는 "우유", "카라멜 시럽" 등의 재료가 포함될 수 있습니다.
- 반대로, "우유"는 여러 음료에 사용될 수 있습니다. (예: "카라멜 마끼아또", "카페 라떼" 등)
관계:
- DRINKS(1) : DRINK_INGREDIENTS(N) : INGREDIENTS(M)
- DRINK_INGREDIENTS 테이블이 음료와 재료의 관계를 관리하는 역할을 합니다.
DRINK_INGREDIENTS 테이블:
칼럼설명
drink_id (FK) | 음료의 ID (음료 테이블의 외래 키) |
ingredient_id (FK) | 재료의 ID (재료 테이블의 외래 키) |
- 이 테이블은 음료와 재료 사이의 다대다 관계를 처리하며, 두 테이블을 연결하는 역할을 합니다.
2️⃣ ORDER_DETAILS (주문과 음료 간의 관계 중간 테이블)
관계:
- ORDERS와 DRINKS 테이블 간의 N:M 관계를 중간 테이블인 ORDER_DETAILS로 연결합니다.
설명:
- 하나의 주문은 여러 음료를 포함할 수 있고, 하나의 음료는 여러 주문에 포함될 수 있습니다.
- 예를 들어, "고객 A"가 "카라멜 마끼아또"와 "아메리카노"를 주문한 경우, 한 번의 주문에 두 개의 음료가 포함됩니다.
- 즉, ORDER_DETAILS 테이블은 각 주문에 포함된 음료의 수량과 세부 정보를 저장합니다.
관계:
- ORDERS(1) : ORDER_DETAILS(N) : DRINKS(M)
- ORDER_DETAILS 테이블은 주문과 음료의 관계를 관리하는 역할을 합니다.
ORDER_DETAILS 테이블:
칼럼설명
order_detail_id (PK) | 주문 상세 고유 ID |
order_id (FK) | 주문의 ID (주문 테이블의 외래 키) |
drink_id (FK) | 음료의 ID (음료 테이블의 외래 키) |
quantity | 음료의 수량 |
- 이 테이블은 주문과 음료 사이의 다대다 관계를 처리하며, 각 주문에 포함된 음료의 수량을 저장합니다.
🚀 3️⃣ 전체 테이블 간의 관계 정리
테이블 1관계테이블 2설명
DRINKS | 1:N | DRINK_INGREDIENTS | 하나의 음료는 여러 재료를 가질 수 있다. (하나의 음료에 여러 재료 포함) |
INGREDIENTS | 1:N | DRINK_INGREDIENTS | 하나의 재료는 여러 음료에서 사용될 수 있다. (하나의 재료가 여러 음료에 포함될 수 있음) |
ORDERS | 1:N | ORDER_DETAILS | 하나의 주문은 여러 음료를 포함할 수 있다. (주문 내 여러 음료 정보 저장) |
DRINKS | 1:N | ORDER_DETAILS | 하나의 음료는 여러 주문에 포함될 수 있다. (하나의 음료가 여러 주문에 등장할 수 있음) |
CUSTOMERS | 1:N | ORDERS | 하나의 고객은 여러 주문을 할 수 있다. (한 고객이 여러 주문을 할 수 있음) |
DRINKS | N:M | INGREDIENTS | 하나의 음료는 여러 재료를 사용하고, 하나의 재료는 여러 음료에 포함될 수 있다. 이를 DRINK_INGREDIENTS라는 중간 테이블로 연결함 |
ORDERS | N:M | DRINKS | 하나의 주문은 여러 음료를 포함하고, 하나의 음료는 여러 주문에 포함될 수 있다. 이를 ORDER_DETAILS라는 중간 테이블로 연결함 |
- ORDERS 테이블에 price를 넣지 않는 이유는, 주문에 여러 음료가 포함되기 때문에 각 음료의 가격과 수량을 별도로 계산해야 하고, 이 계산은 ORDER_DETAILS 테이블에서 이루어지기 때문입니다.
- 음료 가격은 DRINKS 테이블에 저장되고, 각 음료의 수량은 ORDER_DETAILS 테이블에서 관리되어 최종적으로 주문의 가격이 계산됩니다.
- 이 구조는 유연성과 확장성을 제공합니다. 주문에 여러 음료를 포함하고 각 음료의 수량을 변경할 수 있기 때문에, 주문 가격을 실시간으로 계산하는 데 유리합니다.
따라서, ORDERS 테이블에 price를 넣지 않고, ORDER_DETAILS에서 음료별 가격과 수량을 관리하는 방식이 데이터베이스 설계에서 보다 효율적이고 관리하기 용이합니다!
결론
- ORDERS 테이블에 quantity를 추가하면 주문당 하나의 음료만 포함되는 구조가 되므로 여러 음료가 포함된 주문을 처리하기 어렵습니다.
- **중간 테이블 (ORDER_DETAILS)**을 사용하면 하나의 주문에 여러 음료와 그 수량을 유연하게 처리할 수 있기 때문에, N:M 관계를 효율적으로 관리할 수 있습니다.
따라서, **중간 테이블 (ORDER_DETAILS)**을 사용하는 방식이 더 적합하고, 효율적이며 확장성 있는 방식입니다!
🧠 핵심 포인트:
- DRINK_INGREDIENTS와 ORDER_DETAILS는 각각 음료와 재료, 음료와 주문 간의 N:M 관계를 1:N 관계로 분리하여 처리하는 중간 테이블입니다.
- 이 중간 테이블들은 두 테이블 간의 복잡한 관계를 명확하고 효율적으로 처리할 수 있도록 도와줍니다.
이렇게 중간 테이블을 사용하면, 각 테이블 간의 관계를 유연하게 처리하고, 데이터 무결성을 유지할 수 있습니다!
'멘토링' 카테고리의 다른 글
멘토링 내용 정리 Flask & API (5회차 정리) (0) | 2025.04.25 |
---|---|
멘토링 내용 정리 database (4회차 정리) (0) | 2025.04.02 |
멘토링 내용 정리 database (3회차 정리-추가) (0) | 2025.03.28 |
멘토링 내용 정리 database (3회차 정리) (0) | 2025.03.27 |
멘토링 내용 정리 (2회차 정리) (0) | 2025.03.18 |