주특기 숙련 5일차 TIL - 영철 매니저님 세션 - DB 자료의 연관관계에 대해[중요!]

LIHA·2023년 2월 16일
0

항해99

목록 보기
44/54
post-thumbnail

관계성을 만드는게 어려워요 - 생각을 너무 많이 하지 말자. 단순하게 한쪽에만 써줘도 됨.

  • Book과 Bookstore 사이의 연관관계를 만들어주세요!
    -> 이건 내 예상과 다르게, 단방향인 경우 그냥 한쪽에만 만들어도 상관없다.

  • MySQL에는 나중에 String 대신 Text 라는 자료형을 쓸거다. String은 varcharto로 저장돼서 255자 -> 256이 2^8 이므로 8비트 = 1바이트 용량까지밖에 못쓴다. 넘는순간 바로 에러터짐.


패러다임이 다르다 라는 말 들어봤지? 그게 뭘까?

  • 이게 MySQL 문법을 쓰면 두 테이블을 그냥 쉽게 서로 연관시킬 수 있는데,
    Spring에서는 OnetoMany나 ManytoOne이나 그런걸 안 써주면 연관관계를 만드는게 생각보다 쉽지않다. 중간 테이블을 만들어서 관리하려고 함.
    -> 그런데 중간 테이블이 생기면 곤란한게 PK도 없고 FK만 두개 생기게 됨.
    -> 그리고 원하지 않는 어떤 쿼리가 사용되거나 결과가 튀어나올 수도 있음.
    -> 그래서 중간 테이블은 안 생기도록 하는게 좋음.

  • DB는 List를 다룰 수 없음. 근데 Spring은 List를 다루네? -> 이런 부분에서 '패러다임의 불일치' 라는게 보이는 것.


일대다든 다대다든 Many로 끝나는 경우 - 관계의 맵핑이 필요, 관계의 주인을 정해줘

  • Mappedby는 양방향 연관관계일 때 어느 쪽에서 관계를 관리할까를 정해주는 것임.

  • OnetoMany는 양방향일때는 항상 Mappedby가 필요함! Mappedby는 뒷자리가 Many인 애들한테만 붙을 수 있음.

  • 관계형DB는 Many쪽에 항상 FK가 있었다. 일대다든 다대일이든 '다' 쪽이 항상 그 관계의 주인이었음.

  • 맵핑관계의 주인이 Book인 경우는 Book 타입의 인스턴스는 변경이 적용되지만 Bookstore 타입의 인스턴스는 뭔가를 넣어도 업데이트가 되지 않는다.

  • ManytoMany는 가능하면 안쓰는게 좋다. 이 방법은 무조건 중간 테이블을 만들기 때문에 트레이드오프가 생기고, 불필요한 상호작용이 생길 가능성多

  • DataGrip이라는 툴이 있다. IntelliJ를 쓰는 회사는 보통 이걸 씀.

  • IntelliJ에서 ERD 어디서 봐요?
    쉬프트 두번 -> persistence 라고 검색 -> EntityManagerFactory에서 볼수 있다.

profile
갑자기 왜 춤춰?

0개의 댓글