[Toy Project] 제품 재고 관리 JPA Entity 설계

최지나·2023년 10월 7일
4
post-thumbnail

ERD로 설계한 내용들을 JPA Entity로 표현하기 시작했다.

아래 예시들에서는 기본적인 제품과 제품 카테고리의 CRUD operation을 수행하기 위해서 필요한, productcategory 의 JPA entity를 사용할 것이다.

JPA 어노테이션 참조 블로그 글

1. Primary Key

    // Product.java
    @Id
    @Column(name = "product_code", unique = true, nullable = false)
    private String productCode;
    
    // Category.java
    @Id
    @Column(name = "category_code", unique = true, nullable = false)
    private String categoryCode;
  • product와 category 모두 primary key는 String 형태로 지정하였다.
  • product|category + '_' + sequence 이와 같은 형식으로 pk를 사용해보고자 한다.
  • 저장 및 검색 속도에 있어서는 seq만으로 이루어진 형식보다 느릴 수 있지만, 가독성및 데이터 식별이 좋기에 이와 같은 방식을 선택하였다 😄

2. Foreign Key

    // Product.java
    @ManyToOne
    @JoinColumn(name = "category_code", referencedColumnName = "category_code", nullable = false)
    private Category category;

    // Category.java
    @ManyToOne
    @JoinColumn(name = "parent_category_code", referencedColumnName = "category_code")
    private Category parentCategory;
  • pk-fk관계를 @ManyToOne 어노테이션을 사용하여 나타내었다.
  • Category테이블의 parent_category_code는 자기참조 형태이다.

3. other columns

    // Product.java
    @Column(name = "img")
    private String img;
    
    // Category.java
    @Column(name = "name", nullable = false)
    private String name;
  • 필수값인 column의 경우 nullabe = false 옵션을 주어 제약조건을 추가하였다.

엔티티 관계도

  • 위와 같은 JPA 엔티티 생성을 통해 Database에 생성된 테이블을 DBeaver tool을 사용해 표현하였다

Entity 추가

또한, Frontend를 담당한 친구가 사용자 별 권한 분리를 위해 만들어 둔 madeg_user라는 테이블이 존재하였다. 이 이름을 범용성을 위해 member로 바꾸었고, 해당 table을 포함하여 전체 ERD를 업데이트 하였다.

user라는 이름으로 테이블을 생성하고자 하였으나, 이는 PostgreSQL 예약어라 사용할 수 없었기에 member를 테이블 이름으로 정하였다.


다음 방향성에 대한 고민이 있다. 🫥
어느정도 frontend 화면이 나와 있는 제품/카테고리에 대한 API들을 먼저 다 만들지, 아니면 기본적인 Read, Create operation을 수행하는 API들부터 생성할지가 고민이다.

친구랑 충분히 대화를 나누고 우선순위를 정해봐야겠다,,@!!

profile
의견 나누는 것을 좋아합니다 ლ(・ヮ・ლ)

0개의 댓글