TIL(20220526) -

jihunnit·2022년 5월 27일
0

TIL

목록 보기
2/16

다양한 연관관계 매핑

연관관계 매핑시 고려해야 할 사항 –
다중성, 단방향 OR 양방향, 연관관계의 주인
다중성 : 다대일, 일대다, 일대일, 다대다
생각이 잘 안나면 대칭성을 생각하자 (일대다 <-> 다대일)
사실 다대다는 실전에서 쓰면 안됨! 절대 쓰지 마라!

단방향 : 테이블 -> 외래키 하나로 양쪽 조인, 방향이라는 개념 없음
객체 -> 참조용 필드가 있는 쪽으로만 참조 가능, 한쪽만 참조하면 단방향

테이블은 외래 키 하나로 두 테이블이 연관관계를 맺지만, 객체 양방향 관계는 참조가 두군데. 둘 중 하나에서 외래키를 관리해야 함. 연관관계의 주인은 외래 키를 관리하는 참조!

다중성의 종류들...

다대일 [N:1]

멤버와 팀의 관계 = 팀이 1, 멤버가 N -> 멤버가 연관관계의 주인 (외래키를 관리함)
단방향에서 양방향 만들기는 쉽지. 양쪽을 서로 참조하도록 개발

일대다 [1:N] 단방향

-> 1이 외래키를 관리하겠다고?? -> 실전에서는 사용하지 말기를
팀이 1 멤버가 N일 때 팀을 중심으로 (팀이 외래키를 관리) -> 별론디 멤버의 pk값 업뎃필요
Join column 안쓰면 중간테이블을 만들어서 사용함 -> 성능 하락. 운영이 어려워짐..
일대다 단방향은 외래키가 다른 테이블에 있고, 추가 UPDATE QUERY 사용
일대다 단방향 매핑보다는 다대일 양방향 매핑 사용하자.

일대일 [1:1]

일대일 관계는 반대도 일대일이니까, 주 테이블이나 대상 테이블 중에 외래 키 선택 가능
외래 키에 데이터베이스 유니크(UNI) 제약조건 추가. 다대일[N:1]과 매우 비슷
주 테이블에 외래키 넣기 -> 주로 액세스하는 테이블. 주 객체가 대상 객체의 참조를 가지는 것
처럼 주 테이블에 외래 키를 두고 대상 테이블을 찾으면. 주 테이블만 조회해도 대상 테이블에 데이터가 있는지 확인 가능하지만, 값이 없으면 외래 키에 null 허용

오늘의 의문점
ddl 이 create긴 했는데, 이러면 테이블이 존재 할 경우 있던 테이블을 drop하고 생성하는 과정이 있을테고, 다른 부분들은 다 괜찮은디 일대일 매핑을 한 연관관계의 주인이 아닌 테이블이 딱히 drop되지도 않고 실행 시 오류를 뿜어내는데.. 이유가 뭘까? 일단 처음에 다 drop된 상태면 상관없이 잘 작동하는것을 확인했다. 일대일 매핑의 UNIQUE 때문일까?? 공부를 좀 더 하고 velog 수정해야지.

profile
인간은 노력하는 한 방황한다

0개의 댓글