Notice
Recent Posts
Recent Comments
Link
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Tags more
Archives
Today
Total
관리 메뉴

요리사에서 IT개발자로

스파르타 부트캠프 객체와 관계형 DB (다락방) 본문

Spring

스파르타 부트캠프 객체와 관계형 DB (다락방)

H.S-Backend 2024. 6. 18. 14:30

 

관계형 DB에서 객체의 상속관계와 유사한 것이 Table 슈퍼타입, 서브타입관계이다.

 

Album을 저장하려면

객체 상속에서 Album은 Item속성을 받은 상태이다.

 

관계형 DB 입장에서

다른 Insert Qeury를 두번 작성해야한다.

insert into Item, insert into Album

 

Album을 조회하려면

관계형 DB에서 Item, Album 테이블을 JOIN하고

결과를

Item,Album객체의 속성에 맞게 데이터를 넣어줘야한다.

 

문제점은

Movie와 Book을 조회하려면

매번 ITEM 테이블과 각각 JOIN을 해야한다.

 

그 결과를 객체에 넣는 과정을 반복해야하기에

관계형 DB에 저장할 객체에는 상속관계를 쓰지않는다.

 


객체의 연관성은 참조를 사용한다.

Ex)member.getTeam();

 

테이블의 연관성은 외래키를 사용한다.

EX) JOIN ON M.TEAM_ID = T.TEAM_ID


객체의 연관관계에서는

Member객체로 Team객체를 참조할 수 있지만

Team객체는 Member객체를 참조할 수 없다.(단방향)

 

테이블의 연관관계에서

객체의 연관관계와는 다르게

TEAM테이블에서 MEMBER테이블을 

TEAM_ID 속성을 통하여 역참조가 가능하다.(양방향 - 방향성이 없다.)

 


테이블 중심에 데이터 모델링을 객체 모델링에 표현할 수 없다.


teamId 가 아닌 TEAM을 참조할 수 있어야 객체모델링이다.

Member는 TEAM을 가지면서

member.getTeam().getId과 같이

 

속성에 접근하여 데이터를 조작할 수 있다.(연관관계)


Member, Team을 JOIN한 데이터를 얻기위해

member와 team에 각각 넣어주고 

 

member.setTeam(team)으로 연관관계를 맺어줘야한다.


RDBMS 는 일반적으로 SQL쿼리수를 최소화하고

JOIN을 통하여

여러 엔티티를 로드하며 원하는 대상 엔티티를 선택해야한다.

 

Java에서는

객체간의 관계 그래프를 통해서 객체를 탐색하고 객체간 통신은 자유로워야한다.


 

처음 실행한 SQL 결과에 따라 탐색 범위가 결정되기에

객체그래프 탐색의 성질을 완벽히 사용할 수 없다.


Mapper통해서 맵핑된

member.getTeam();

member.getOrder().getDelivery();

 

NullpointerException에서 벗어날 수 있을지 

어떻게 데이터를 조립했는지

Query까지 탐색해야지만 알 수가 있다.


동일한 회원정보를 가져오는데, 상황에 따라서 여러가지 조회 메소드를 만들어야 할 수 있다.


같은 memberId를 가지고 조회를 하더라도 

결국 member1과 member2는 다르다.

주소값이 다르다

 

Member member 1 = memberDAO.getMember(memberId); 는 

Member member1 = new Member(memberDAO.getMember(memberId)); 가

생략되어 진행된것과 똑같기에

 

새로운 주소값에 저장memberId의 String은 member 1이고

member2도 결국 위와 같이 진행되어 

 

memberId = "100"이 정의된

"100"은 같지만

주소값은 다르기에 false로 표시되는것이다.

 


RDBMS

기본키(PK)를 이용해

sameness라는 하나의 개념을 정확히 정의한다.

 

그러나 Java에서

객체식별(a==b)과 객체동일성(a.equals(b))을 모두 정의한다.

 

RDBMS에서는 PK가 같으면 서로 동일한 record라고 정의하지

 

Java에서는 주소값이 같거나 내용이 같은 경우를 구분하여 정의한다.

 

 

 

 

https://hs-backend.tistory.com/199

 

스파르타 부트캠프 JPA (다락방)

JPA(Java Persistence API)란 JAVA에서 제공하는 ORM기술로 RDBMS를 다루기 위한 인터페이스 표준명세이다. Persistence(영속성)은 JPA를 관통하는 매우 중요한 개념이며관계형 데이터 베이스를 사용하기 위

hs-backend.tistory.com

 

반응형