연결 안했을 때(기본)
food_id / user_id컬럼추가
ALTER TABLE users ADD food_id bigint;
ALTER TABLE food ADD user_id bigint;
user 테이블
food 테이블
하지만 이런식으로 하면 위의 테이블 처럼 중복한 값이 들어가있음
참고(일반적으로 이런 방식으로 넣으면 안됨)
예외도 있음
중간역할을 해줄 주문테이블 생성
create table orders
(
id bigint not null auto_increment,
user_id bigint,
food_id bigint,
order_date date,
primary key (id)
);
중간 테이블을 생성하게 되면 중복도 제거할 수있으며
주문 테이블ID값으로 조회 가능
이렇게 되면
고객:음식 = 1 : N
음식:고객 = 1: N
고객 : 음식 = N : M
관계를 맺을 수 있으며
고객 : 주문 = 1 : N
음식 : 주문 = 1 : N
으로 일 대 다 관계를 형성 할 수 있다.
중복제거 뿐만 아니라 상황에 맞게 다양하게 조회가능
이렇듯 DB 테이블간에는 방향의 개념이 없다 쿼리문으로 join을 사요해서 조회 가능
그다음은 우리가 스프링부트에서 사용하고 있는 JPA Entity로 연관관계를 찾아보면
음식 : 고객 == N :1 연관관계
(단방향)
Entity 에서 여러번 가능함을 표현하기 위해 컬렉션 사용
List<Food> foodList = new ArrayList<>()
이 상태에서는 음식 entity 의 정보를 가지고 있지 않으면 음식의 정보를 조회할 방법이 없다
Entity에서는 양방향, 단방향 관계로 DB테이블에 실제 컬럼이 존재하지않아도 서로 참조할 수가 있다.
'TIL' 카테고리의 다른 글
+33 Spring 1대N 연관관계 (0) | 2023.07.20 |
---|---|
+32 Entity 연관관계 1 대 1 관계 (0) | 2023.07.18 |
+30 Naver Open API (0) | 2023.07.17 |
+29 RestTemplate의 exchange (0) | 2023.07.14 |
+28 RestTemplate Get요청 (1) | 2023.07.13 |