해결된 질문
작성
·
194
1
[질문1]
강의시간 28분24초에 치킨을 제거하고 한식을 추가한 경우
delete from FAVORITE_FOOD where MEMBER_ID=? and favoriteFoods=? 로 특정 행을 한 행만 제거했습니다.
반면, 컬렉션 값타입의 Address테이블에서는
delete from Address where MEMBER_ID=?
로 관련 행들을 모두 삭제했습니다.
왜 이런 차이를 보이는건지 고민을 해봤습니다.
후자인 Address테이블은 모든 컬럼의 조합이 pk제약조건을 구성하므로
WHERE MEMBER_ID=? and 컬럼1 = ? and 컬럼2 = ? and 컬럼3=..... 같은 방식으로는 추적하기 어려울 것 같습니다.
따라서 MEMBER_ID = ? 조건에만 관련된 모든 행 지웠다가 최종적으로 남아있는 값타입컬렉션의 요소만 Insert하는 방식을 채택한 것으로 보입니다.
반면, 전자인 FAVORITE_FOOD 테이블은 컬럼수가 FK인 MEMBER_ID를 제외하고 FOOD_NAME 하나이므로 WHERE절이 where MEMBER_ID=? and favoriteFoods=? 으로 가볍습니다. 따라서 FOOD_NAME을 조건으로 해당하는 행만 제거하는 것이 가능해 보입니다.
이런 원리라고 생각해도 되는 것인지 궁금합니다.
[질문2] 값타입 컬렉션과 엔티티의 상황별 차이
"값타입컬렉션을 언제 사용하는가? 값이 바뀌어도 update칠 필요가 없을 때" (40분30초)
"주소이력도 엔티티다, 값을 변경하지 않는다 하더라도 DB쿼리 자체를 그 쪽에서 부터 시작해서 가져올 수 도 있다" (41분00초 )
위 두 설명에 대해 감을 못잡고 있습니다.
전자는 질문1에서 말씀 드린 것과 같이 컬렉션의 요소를 바꿔도 모든 요소 관련 행들을 DELETE한 후 남은 요소만 INSERT하는 방식이라 update sql문을 사용하지 않습니다. 그런데 표현을 "update칠 필요가 없을 때"라고 하는 부분이 이상하게 다가옵니다...
후자의 경우 추가로 41분30초에 예를 들어주셨습니다.
"주소가 다 사라져도 이력은 남겨야 될 수 도 있는 상황" --> 엔티티로 설계해야함
이 부분은 상황자체를 이해하지 못했습니다...
선생님, 좀 더 자세한 설명 부탁드립니다.
감사합니다.
답변 1
0
안녕하세요. ddoddo님^^
[질문1] [질문2] 다음을 참고해주세요.
(질문 안내에 설명드린 것 처럼 질문 전 미리 인프런 내부 검색을 부탁드립니다.)
https://www.inflearn.com/questions/216545
감사합니다.
안녕하세요. ddoddo님
1. >> 엔티티를 도입하지 않더라도 값타입컬렉션에 맵핑되는 테이블로부터 sql질의를 통해 데이터셋을 얻을 수 있지 않을까 생각됩니다.
-> 값 타입 컬렉션만으로 쿼리하는 것은 불가능합니다.
2. "주소가 다 사라져도 이력은 남겨야 될 수도 있는 상황"(41분30초)
-> 값 타입은 단독으로 사용될 수 없습니다. 어딘가에 항상 소속됩니다. 주소 이력이 값 타입이라면 주소에 모두 소속되겠지요? 따라서 주소가 모두 삭제되면 값 타입인 주소 이력도 모두 삭제됩니다. 만약에 주소를 삭제해도 주소 이력을 남기고 싶다면 주소 이력을 엔티티로 사용해야 합니다.
감사합니다.
감사합니다. 선생님!
질문1에 대한 답은 공유해주신 다른 수강생의 질문글로 이해할 수 있었습니다.
하지만 질문2에 대해 아직 해소되지 못한 부분이 있습니다.
1. "주소이력도 엔티티다, 값을 변경하지 않는다 하더라도 DB쿼리 자체를 그 쪽에서 부터 시작해서 가져올 수도 있다" (41분00초 )
>> 엔티티를 도입하지 않더라도 값타입컬렉션에 맵핑되는 테이블로부터 sql질의를 통해 데이터셋을 얻을 수 있지 않을까 생각됩니다.
예) 강의 실습에서 생성한 값타입컬렉션의 Address 테이블로부터 where MEMBER_ID=1 로 회원번호가 1인 회원의 주소이력을 가져올 수 있다.
2. "주소가 다 사라져도 이력은 남겨야 될 수도 있는 상황"(41분30초)
>> 주소가 제거되고 이력은 남긴다....
죄송스럽게도 공유해주신 글로도 아직 이해가 가지 않았습니다. 엔티티를 도입해야할 상황이 왜 저런 상황이지? 궁금증만 쌓이고 있는 상태입니다ㅠㅠ