다양한 연관관계 매핑

동현·2021년 7월 16일
0

다양한 연관관계 매핑

먼저 앞장의 내용을 복습하고 넘어가자

  • 엔티티 연관관계 매핑시 주의점 3가지

    1. 다중성

    2. 방향성

    3. 연관관계의 주인 ( 외래키를 가지고 있는 쪽을 주인으로 설정 하며 주인의 쪽은 CRUD가 가능하지만 반대 쪽은 읽기만 가능하다 )

      ☝️ 양방향은 외래 키가 있는 쪽인 연관관계의 주인

      ☝️ 양방향 연관관계는 항상 서로를 참조 해야한다 ( 양쪽 모두 연관관계 편의 메소드를 줄시 무한루프에

      빠지게 되므로 주의 하자 )


일대대 (1 : N)

  • 다대일의 반대 방향이며 컬렉션을 사용한다.
@OneToMany(mappedBy = "team")
private List<Member> members = new ArrayList<Member> ();

일대다 단방향 매핑의 단점

  • 위에는 양방향 매핑을 구현한 것이라 해당사항이 아니지만 단방향 매핑시 단점은 매핑한 객체가 관리하는 외래키가 다른 테이블에 있다는 점이다. 만약 반대의 경우는 INSERT 쿼리 한번에 저장을 끝낼수 있지만 이 경우는 UPDATE 문까지 날려야 하는 단점이 있다. ( 실직적으로 일대 다 양방향 매핑은 존재하지 않고 일대다 보다는 다대일을 사용하자 )

일대일 ( 1 : 1 )

  • 일대일 관계는 양쪽이 서로 하나의 관계만 가지며 일대일 관계의 반대도 일대일이다.
  • 일대일 관계는 주 테이블, 대상 테이블 둘 중 어느곳에나 외래키가 존재할수있다.

주 테이블에 외래키

외래키를 객체 참조와 비슷하게 사용이 가능해 객체지향 개발자들이 선호하며, 주테이블만 확인해도 대상테이블의 연관관계를 알수있다.

대상 테이블에 외래키

DB개발자들이 선호하며 장점은 일대일에서 일대다로 변경시 그대로 유지가 가능하다는 점이다.


다대다 ( N : M )

  • 관계형 디비는 정규화 된 테이블 2개로 다대다 관계 표현이 불가능하다. 따라서 중간 테이블을 추가해 처리한다.

다대다 매핑의 한계와 극복

다대다 매핑을 사용하면 연결 테이블을 자동으로 처리해주므로 편리하지만 실무에서 사용하는데는 한계가 있다.

ex) 회원이 상품을 주문시 테이블에 단순히 주문한 아이디와 상품 아이디만 담고 끝내는것이 아니라 부가적인 정보가 필요하다.

따라서 위와 같이 일대 다, 다대일로 풀어서 쓰도록 하자.

profile
여긴 어디 나는 누구?

0개의 댓글