일단 SQL 제약조건 사용에 예를 들기 위해 테이블을 설계해보자
고객 테이블
| ID | name |
| 1 | 홍길동 |
| 2 | 먹방 |
음식 테이블
| ID | name | price |
| 1 | 후라이드치킨 | 10000 |
| 2 | 양념치킨 | 12000 |
| 3 | 반반치킨 | 13000 |
| 4 | 고구마 피자 | 9000 |
| 5 | 아보카도 피자 | 110000 |
여기서 우리는 연관 관계를 고민해봐야 한다.
고객이 음식 주문 시 주문 정보는 어느 테이블에 들어가야 할까?
고객 테이블에 들어가는게 맞을까 아니면 음식테이블에 들어가는게 맞을까?
우선 고객테이블에 넣어보자
| ID | name | foodname |
| 1 | 홍길동 | 후라이드치킨 |
| 2 | 먹방 | |
| 3 | 홍길동 | 양념치킨 |
이렇게 될 경우 문제접은 고객의 이름이 중복되어 나타난다는 것이다.
그럼 이번에는 음식 테이블에 추가 해본다고 하자
| ID | name | price | userID |
| 1 | 후라이드 치킨 | 10000 | 1 |
| 2 | 양념치킨 | 12000 | 1 |
| 3 | 반반치킨 | 13000 | |
| 4 | 고구마 피자 | 9000 | |
| 5 | 아보카도 피자 | 110000 | |
| 6 | 후라이드 치킨 | 10000 | 2 |
이 경우에는 사람 한명이 추가로 같은 메뉴를 주문하는 순간 음식이 중복
되어 나타난다는 것이다.
그럼 주문을 담당하는 주문 테이블을 만들어 본다면 어떨까
| ID | 회원 ID | 음식 ID | 주문일 |
| 1 | 1 | 1 | 01월 01일 |
| 2 | 2 | 4 | 01월 01일 |
| 3 | 2 | 1 | 01월 02일 |
| 4 | 1 | 4 | 01월 02일 |
회원 ID는 고객 테이블에 ID와 연결되고 음식 ID는 음식 테이블에 ID와 연결된다.
회원 1명은 주문 N개를 할 수 있다.
회원 : 주문 = 1 : N 관계
음식 1개는 주문 N개에 포함될 수 있다.
음식 : 주문 = 1 : N 관계
결론
회원 : 음식 = N : M 관계
실제 제약 사항 사용은 다음날로 넘기겠습니다...
'TIL' 카테고리의 다른 글
| 24.10.10 TIL (0) | 2024.10.10 |
|---|---|
| 24.10.01 TIL (1) | 2024.10.01 |
| 24.09.24 TIL (1) | 2024.09.24 |
| 24.09.23 TIL (0) | 2024.09.23 |
| 24.09.20 TIL (1) | 2024.09.20 |