ERD 설계에 따른 성능 측정

박진은·2023년 6월 27일
0
post-thumbnail

1. 첫번째 상황 사용자가 섭취한 음료를 기록하는 테이블에서 스냅샷 형태의 중복 데이터 저장

사용자가 쉅취한 음료를 기록하는 테이블을 생성할 때 음료 영양성분 데이터를 복사해서 스냅샷 형태로 저장하는 방식의 설계

  • 단점
    - 중복된 데이터 저장으로 인한 DB 용량 과부하 및 다른 서버단의 데이터 복사 과정에서의 메모리 부족 현상 예상됨.

    2. 섭취한 음료의 기록을 외래키로 설정하고 영양성분의 변경이 일어난다면 이를 영양성분의 버전을 발행하여 사용자가 섭취할 당시의 영양성분을 보존하는 설계

  • 장점
    - 데이터의 중복된 저장을 막아 저장 공간 확보및 데이터 복사로 인한 저장 시간을 단축함.

@Entity
public class BeverageInputRecord extends BaseTime{

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

    @ManyToOne
    CafeBeverage cafeBeverage;

    @ManyToOne
    ReadyBeverage readyBeverage;

    @ManyToOne
    UserEntity userEntity;
}

input record의 최종 설계 외래키를 이용한 스냅샷 저장을 구현

@Entity
@Inheritance(strategy = InheritanceType.JOINED)	// 상속 전략
@DiscriminatorColumn(name="type")		// 구분 하는 칼럼
public  class Beverage {
    
    @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
    Long beverageId;
    
    @Embedded
    BeverageInformation beverageInformation;
}

@Entity
@DiscriminatorValue("ready_beverage")
public class ReadyBeverage extends Beverage {

}


@Entity
@DiscriminatorValue("cafe_beverage")
public class CafeBeverage extends Beverage{

    @ManyToOne
    Cafe cafe;
}

부모 테이블인 beverage 를 생성하고 이를 joined 상속 전략을 사용해서 테이블 간의 중복된 정보를 생략하고 하나의 공통된 칼럼은 beverage colum 으로 관리할 수 있게 만들었다.

profile
코딩

0개의 댓글