키보드워리어

[스프링]1:N 관계 ERR 다이어그램과 자바 코드로 표현 *카디널러티 본문

Spring framework/JPA

[스프링]1:N 관계 ERR 다이어그램과 자바 코드로 표현 *카디널러티

꽉 쥔 주먹속에 안경닦이 2023. 4. 18. 16:49
728x90

안녕하세요 【키보드 워리어】 블로그 방문자 여러분, 안경닦이입니다.

카디널러티에 대해 살펴볼게요
 

 


카디널리티(Cardinality)는 데이터베이스 용어로, 관계형 데이터베이스에서 테이블 간의 관계에서 한 쪽 테이블의 레코드 수와 다른 쪽 테이블의 레코드 수 사이의 관계를 나타냅니다. 즉, 카디널리티는 관계형 데이터베이스에서 테이블 간의 데이터 관계의 중요한 특성 중 하나입니다.

관계는 일대일 일대다 다대다 정도 입니다. 아래 그림을 살펴보죠.

EER 다이어그램 예시
EER 다이어그램 예시그림

 
위 그림은 Country 테이블과 City테이블은 1대 다 관계로 City 테이블은 FK(foreigner)로 country_id를 갖습니다.

카디널리티는 데이터베이스 설계 및 쿼리 작성에 중요한 영향을 미치며, 효율적인 데이터 관리와 데이터 무결성을 위해 고려되어야 합니다. 카디널리티는 테이블 간의 관계를 이해하고 데이터베이스를 효율적으로 구성하기 위해 중요한 개념입니다.

그리고 이를 자바 스프링 프레임워크를 통해 구현할 수 있는데요
 
Country 클래스부터 살펴볼게요.
 

@Entity
@Table(name = "country")
public class Country {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(name = "name")
    private String name;

    @OneToMany(mappedBy = "country", cascade = CascadeType.ALL)
    private Set<City> cities;

    // getters and setters 생략
}

 

@OneToMany 어노테이션은 일대다 관계를 설정할 때 사용됩니다. mappedBy 속성은 이 관계에서 엔티티 간 어떤 필드가 매핑되었는지를 지정합니다. 이 예시에서는 City 엔티티의 country 필드가 Country 엔티티의 cities 필드에 매핑된다는 것을 나타냅니다.

cascade 속성은 부모 엔티티가 저장되거나 삭제될 때 자식 엔티티에도 영향을 주는 옵션입니다. 이 예시에서는 CascadeType.ALL을 사용하여 부모 엔티티가 저장되거나 삭제될 때 자식 엔티티도 저장되거나 삭제되도록 설정되어 있습니다.
 

@Entity
@Table(name = "city")
public class City {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(name = "name")
    private String name;

    @ManyToOne
    @JoinColumn(name = "country_id")
    private Country country;

    // getters and setters 생략
    
}

@GeneratedValue(strategy = GenerationType.IDENTITY)는 JPA에서 Entity 클래스의 PK(Primary Key)를 자동으로 생성하는 전략 중 하나입니다.
 
@JoinColumn은 @ManyToOne과 @OneToOne 어노테이션과 함께 사용되며, 연결 엔티티를 외부 테이블의 칼럼과 매핑하기 위해 사용됩니다.
 
 
 
 

 참고하시면 좋은 글 

 
2023.04.14 - [Spring framework] - [spring framework] @Entity와 @Component의 차이

[spring framework] @Entity와  @Component의 차이

안녕하세요 【키보드 워리어】 블로그 방문자 여러분 오늘은 @어노테이션 @Entity와 @Component의 차이점을 알아보겠습니다. @Entity와 @Component Spring을 통해Web 개발 시 어려웠던 여러 가지 어노테이션

keyboardwarrior.tistory.com

 

 

 
728x90