연관 관계 와 관계형 데이터베이스 One To Many in Spring Boot

DongJoo Kwak·2022년 5월 26일
0
post-thumbnail

✨ 스프링 벡엔드에 있어서 연관 관계와 관계형 데이터베이스를 정리하여 프로그래밍을 하는 것이 유지보소, 접근성, 보안 측면에서 좋다. 해당 설정에 대해 정리해보자!

📌 연관 관계 와 관계형 데이터베이스

🌳 Spring Boot 백엔드

  • 관계형 데이터베이스에서는 1:1, 1:N(N:1), M:N 의 관계를 이용해서 데이터가 서로 간에 어떤 관계를 가지고 있는지 표현
    *이 때 Primary Key 와 Foreign Key를 이용해서 관계를 설정

  • JPA에서는 어노테이션 과 방향성을 이용해서 표현하게 되는데 데이터베이스에서는 방향성의 개념이 없습니다.

1:1 -> @OneToOne
1:N -> @OneToMany
N:1 -> @ManyToOne
N:M -> @ManyToMany

=>방향성은 단방향 과 양방향이 있습니다.

🌱 1:1 관계

  • 한쪽 테이블의 하나의 행과 다른쪽 테이블의 하나의 행이 매칭이 되는 경우
    -이 경우는 양쪽 테이블의 기본키를 다른 테이블에 외래키로 추가해주어야 합니다.
    JPA 에서는 양쪽의 기본키에 @OneToOne을 설정하면 자동으로 추가를 해줍니다.

🌱 1:N 관계

  • 회원 과 게시글의 관계

    -한 명의 회원은 여러 개의 게시글을 작성할 수 있고 하나의 게시글은 한 명의 회원이 작성해야 합니다.

    -관계형 데이터베이스에서는 회원의 기본키를 게시글의 외래키로 추가해야 합니다.
    JPA에서는 회원의 기본키에 @OneToMany를 설정해도 되고 게시글 쪽의 외래키에 @ManyToOne을 설정해도 됩니다.

🌱 M:N 관계

  • 회원 과 상품의 관계

    한 명의 회원은 여러 개의 다른 상품을 구매할 수 있습니다.
    동일한 상품을 여러 명의 회원이 구매할 수 있습니다.
    데이터베이스에서는 별도의 테이블을 만들어서 각 테이블의 기본키를 새로 만든 테이블의 외래키로 추가합니다.
    JPA에서는 @ManyToMany로 설정은 가능하지만 @OneToMany 나 @ManyToOne 2개로 분할해서 설정

🌱 ex) 회원, 게시글, 댓글 의 관계

  • 회원 과 게시글은 1:N
    게시글 과 댓글은 1:N
    회원 과 댓글은 1:N

📌 관계 어노테이션의 세부 속성

🌱 mappedBy

  • 양방향 연관 관계를 만들 때 매핑되는 Entity의 필드를 연결

🌱 cascade: Entity 의 상태 변화를 전파시키는 옵션

=>PERSIST - 부모 Entity 가 저장될 때 자식 Entity도 같이 저장
=>MERGE - 부모 Entity 가 병합될 때 자식 Entity도 같이 병합
=>REMOVE - 부모 Entity 가 삭제될 때 자식 Entity도 같이 삭제
=>REFRESH - 부모 Entity 가 refresh 될 때 자식 Entity도 같이 refresh
=>DETACH - 부모 Entity 가 detach 될 때 자식 Entity도 같이 detach
=>ALL - 부모 Entity의 모든 변화가 자식 Entity에 전파

🌱 orphanRemoval

=>고아 객체를 삭제해주는 옵션
=>Primary Key 값이 NULL 인 데이터가 고아 객체(orphanRemoval): Entity 는 데이터베이스에 있었던 데이터이지만 실제로는 메모리에 존재하는 데이터

🌱fetch

=>관련있는 Entity를 가져오는 시점을 설정하는 것인데 Eagar(바로 가져오기) 와 Lazy(지연)가 있음

profile
즐거운 개발 공간

0개의 댓글