데이터베이스 설계 질문 있습니다.

조회수 701회

데이터베이스 구성 중 궁금한게 있습니다

ex)
제품 테이블
코드/이름/규격/가격
---------------------------------
a0001 / a / a-101 / 10000
...
..
.

예로 이런 테이블을 구성하고 2019년3월1일 부터 가격이 변경될때 이전 데이터는 어떻게 보존 및 조회를 할 수 있게 할 수 있을까요?

ex)
2018-01-01 ~ 2019-02-28 a0001 코드 총 100개 = 1,000,000
2018-03-01 ~ 2020-12-31 a0001 코드 총 100개 = 1,100,000 (금액 11000으로 변경)

★2018-01-01 ~ 2019-03-31 a0001 코드 총 100개(중 3월 10개) = 1,230,000
# 2018-01-01 ~ 2019-02-28 90개 90000
# 2018-03-01 ~ 2019-03-31 10개 33000

테이블에 모든 값을 때려넣고 나중에 가격 값을 바꾸면 값이 변경되어 갱신이상이 되는데 이럴경우 정규화로 최대한 종속되는 값으로 쪼개서 join으로 붙여 사용해야 하는것 까지는 생각이 드는데 막상 구현하려하니 잘안됩니다... 제가 하는 방식이 맞는건지 도 모르겠고 ;; 업체db를 보면 그냥 다 때려넣고 사용하는것 같기도하고 조언 부탁드립니다. ㅜㅜ

2 답변

  • 좋아요

    1

    싫어요
    채택 취소하기

    스키마를 분리하는게 맞겠죠

    • 제품마스터

      제품코드(pk), 제품명, 규격

    • 제품단가

      제품코드(fk), 날짜, 단가

    위와 같이 하고 제품마스터와 제품단가는 1대N 구조가 되어야 합니다. 단가는 날짜에 따라 변동이 될 것이기 때문에 변동시 항목 수정없이 변경된 항목이 추가되는 형태로 두면 이력관리도 용이합니다.

    사실 규격부분도 상품에 따라 세부 옵션이 나뉜다면 분리해야 합니다.

  • 제가 본 것만 공유를 해드리면...

    1. 개발단에서 주기적으로 스크립트 실행해서, 별도의 테이블을 만들고 거기에 과거 데이터를 옮깁니다. SELECT * FROM sometable WHERE 기준날짜컬럼 < (오늘로부터 1달전)으로 데이터를 가져와서 실제로 자료가 있으면 CREATE TABLE sometable_201901 한 다음 그 자료들을 일일이 INSERT INTO sometable_201901 어쩌구저쩌구 하고 나서 DELETE from sometable WHERE 기준날짜컬럼 < (오늘로부터 1달전) 처리를 하더라고요.
    2. DBA가 뭔가 작업을 해서, 파티션 설정을 합니다. 파티션이 뭔지는 저도 잘은 모르겠습니다.

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)