💡회원과 상품테이블 관계 맺어보기
회원 | ||||
user_id | name | password | ||
1 | 홍길동 | 1234 | minwoo867412@naver.com | |
2 | 전민우 | asd | asd@nave.com |
상품 | ||||||
product_id | name | descripitn | img | stock(재고) | price | |
1 | 새우깡 | 맛있는 농심 새우깡 | sadsadqa.naver | 10 | 10000 | |
2 | 포카칩 | 바삭바삭 포카칩 | …..sadsa | 20 | 20000 |
💡어울리는 동사찾기
회원은 상품을 주문한다.
상품은 회원에 의해 주문된다.
한명의 회원은 (하나의 or 여러개) 여러개 상품을 주문한다.
한개의 상품은 (하나의 or 여러개) 여러명의 회원에 의해서 주문된다.
회원 :상품 n:m 관계
✅ N : M 관계로 중간 테이블 필요. 그이유는?
상품 | |||||||
product_id | name | descripitn | img | stock(재고) | price | user_id | |
1 | 사과 | 국산 사과주스...... | sadsadqa.naver | 10 | 10000 | 1,2 (1정규형 위배) | |
2 | 주스 | 맛있는 주스.... | …..sadsa | 20 | 20000 |
만약 전민우, 홍길동이라는 사람이 새우깡을 주문했다고 치면 , 상품이라는 테이블에 어떤 회원이 주문했는지 컬럼을 만들고 그
컬럼안에는 원자값이 한개가 들어오는게 아니라 여러개의 값이 들어옴 , 즉 M:N 관계를 직접 표현할 수 없기 때문에, 중간 테이블을 만들어야 한다.
- “2024년 2월 1일 전민우 고객이 사과 2개, 주스 1병을 주소는 경기도 용인수 수지구, 결제는 카드로 주문함 이걸 테이블로 표현하려면?
주문 | ||||||||
order_id | user_id | product_id(fk) | qantity(수량) | price | 주소 | 결제방식 | 주문날짜 | |
1 | 1 | 1 | 2 | 20000 | 경기도 용인시 수지구 | 카드 | 2024-02-01 | |
2 | 1 | 2 | 2 | 10000 | 경기도 용인시 수지구 | 카드 | 2024-02-01 |
이렇게 설계하면 문제점
1. 같은 주문인데 주소,결제방식,주문날짜가 중복됌. -> (1번 회원의 주소가 바뀌면 답이없다 다 찾아서 고쳐함.) .
2. 주문 단위로 관리가 안됨
- 주문을 취소하고 싶을 때 → 상품 여러 줄을 찾아서 삭제해야 함
3 통계 내기 어려움
- "하루에 몇 건의 주문이 있었나?"
→ order_item만 있으면 상품 수로 착각할 수 있음
✅ 주문 , 주문 상세로 테이블을 나눈다.
주문 | ||||
order_id | user_id | 주문날짜 | 결제방식 | |
1 | 1 | 2024-02-01 | 카드 | |
2 | 1 | 2024-02-01 | 네이버페이 | |
4 | 1 | 2024-02-01 | 카카오페이 | |
5 | 1 | 2024-02-01 | ,,,,, |
주문 상세 | |||||
order_detail_id | order_id(fk) | product_id(fk) | qantity(수량) | price | |
1 | 1 | 1 | 2 | 2000 | |
2 | 1 | 2 | 2 | 1000 |
이렇게 설계하면 좋은점
1. 주문1건을 취소할떄 주문 상세 테이블에서 order_id = 1 이렇게 하면 한 주문이 다삭제됌.
2.결제 방식이 바뀌더라도 주문 테이블 한 줄만 변경 하면됌.
3. 주문 통계 집계도 가능.