작성
·
143
1
질문1
중간테이블을 사용하는 이유가 상품 가격이나 다른 속성이
추가될 경우 추가 정보를 저장할 곳이 없어 양쪽에 추가해야 하는
경우도 생길수 있어서 사용 하는 걸로 이해하면 될까요?
질문2
OrderItem 클래스는 주문과 상품 간의 관계를 나타내며, 각각의 주문 상품 항목이 어떤 상품에 속하고 어떤 주문에 속하는지를 기록하고 있는지 하나의 주문에 여러 상품이 들어갈 수 있고, 각 상품이 여러 주문에 속할 수 있게 되는 걸로 이해하면 되는 건가요??
질문3
같은 엔티티에서
부모-자식 관계를 나타내는 이유를 정확히 알고 싶습니다.
이해가 잘안되요 ㅠㅠ
답변 1
1
안녕하세요. smlnk124님, 공식 서포터즈 y2gcoder입니다.
질문 1. 질문 2.
=> 중간 테이블을 사용하는 근본적인 목적은 테이블 설계할 때 N:M 관계를 표현하기 위함이라고 생각합니다. 예를 들어 강의와 학생의 관계를 생각해봤을 때, 한 학생은 여러 강의를 듣고, 한 강의에는 여러 학생들이 수강할 수 있습니다. 이러한 관계를 DB에서 풀어내기 위해 N:M 관계가 필요하고 이를 위해서는 중간에 매핑 테이블을 두는 것입니다.
강의 - 매핑 - 학생
다만 중간에 있는 테이블이 단순히 관계 매핑 뿐만 아니라 비즈니스 적인 의미를 담아야 할 때도 있습니다. 위의 예시에서 눈치를 채셨을 수도 있지만 강의 - 매핑 - 학생의 관계에서 매핑 테이블을 "수강" 테이블로 사용할 수 있습니다. 학생과 강의 사이의 매핑 테이블에 수강이라는 비즈니스적인 의미를 담는 것입니다. 그러면 수강 테이블에는 수강 날짜 등의 의미있는 데이터를 담을 수 있게 됩니다.
개인적으로는 테이블 의 N:M 관계를 표현하기 위한 수단으로서의 의미가 1번째라고 생각합니다.
질문3.
=> 이 부분은 카테고리의 특성을 생각해보시면 될 것 같습니다. 예를 들어 게시판 카테고리를 보면
전체
자바
스프링
위와 같이 계층형 구조로 되어있는 것을 볼 수 있습니다. 이러한 관계를 표현하기 위해 다양한 방법이 있지만, 가장 쉬운 방법으로는 강의에서 소개한 방식으로 구성한 방식이 제일 간단합니다.
예를 들어 Category 엔티티를 사용해서 전체를 가져왔다면
parent = null, children = [자바]
이런 식으로 담겨져 올 것이고,
자바 엔티티를 가져왔다면
parent = 전체, children = [스프링]
와 같이 담겨있을 것입니다. 이처럼 계층형 구조를 표현하기 위해 위와 같이 표현했다고 보시면 될 것 같습니다. 전체나 자바나 스프링 모두 Category 엔티티기 때문입니다.
이 밖의 계층형 구조를 표현하는 방법을 알고 싶으시다면 다음 링크(클릭)을 참고해주십쇼!
감사합니다.