DB 테이블 설계 및 Entity

hyuko·2023년 4월 28일
0

Spring-Study

목록 보기
6/8

가장 중요한 것은 DB

이번에 웹 토이 프로젝트 경험을 하면서 느끼는 것은
가장 중요한 것은 DB에서 어떻게 데이터를 저장하면서 어떻게
Join 등을 이용해서 값을 들고 오느냐 인것 같다.

추가적으로 테이블이 늘어날 수 있지만 기본적으로 우리가 필요한
테이블들은 아래와 같다.

  • book(도서)
  • member(사용자)

도서의 이름과 출판사 저자 표지 이미지등을 담고 있는 도서라는
테이블과 사용자의 정보를 담고 있는 테이블을 구성하여
해당 사용자의 로그인시에 대여와 반납 그리고 대여중인지 아닌지 등을
판단해야 한다.


여기서 우리는?

DB에 한번에 값들을 다 넣어서 가지고 올 수 있지만
정규화를 통해 테이블을 나누어서 join 등을 이용해서 가져오려한다.

table 구조는 다음과 같습니다.

테이블을 이와 같이 설정을 해두고 entity 를 구현해보겠습니다.


Entity

Entity 는 DB와 주고받는 데이터입니다.
객체 형식으로 클래스로 구성을하고 테이블의 컬럼들을 변수로 받아 객체를 그대로 테이블과 매핑을 하여
데이터를 넣어주는 방식입니다.

// book entity

@Builder
@AllArgsConstructor
@NoArgsConstructor
@Getter @Setter
public class Book {

	private int bookId;
    private String bookName;
    private int authorId;
    private int publisherId;
    private int categoryId;
    private String coverImgUrl;
    
    private Author author;
    private Publisher publisher;
    private Category category
}

DB의 컬럼에는 없는 author , publisher, category의 객체를 받는이유는
id 값만 있지 그에 해당하는 name 들을 모르기 때문에 해당 객체를 join 하는 것 처럼
들고와야 합니다.


// Author 객체
@Getter @Setter
public class Author {
    private int authorId;
    private String authorName;

}

// Publisher 객체
@Getter @Setter
public class Publisher {
    private int publisherId;
    private String publisherName;
}


// Category 객체
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Getter @Setter
public class Category {
    private int categoryId;
    private String categoryName;
}

여기서 중요한점!!

매핑을 할 때 기준점을 잡는 것이 중요하다.
예를 들어 N : 1 의 매핑일 경우 1 인 객체가 중심이 되어
1인 곳에 N의 객체가 들어와야한다.


Member Entity


@Builder
@NoArgsConstructor
@AllArgsConstructor
@Getter @Setter
public class Member {
    private int memberId;
    private String email;
    private String password;
    private String name;
    private String provider;

    private List<Authority> authorities;

    
}

// Authority
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Getter @Setter
public class Authority {
    private int authorityId;
    private int memberId;
    private int roleId;

    private Role role;
}

// Role

@Builder
@Getter @Setter
@AllArgsConstructor
@NoArgsConstructor
public class Role {
    private int roleId;
    private String roleName;
}

마무리

앞으로 해당 entity들을 이용해서 회원가입을 진행을 하고
해당 도서들을 도서리스트에 옮기고 조회를 할 수 있는 기능들을
controller > service > repository 의 구조로
구성해보려고 합니다.

profile
백엔드 개발자 준비중

0개의 댓글