DB설계시 기초적인부분 질문입니다. 0 7 1,554

by DeveloperP [DB 모델링/설계] 합계 설계 [2017.01.09 11:21:38]


안녕하세요 초보개발자가 부끄러운질문 하나 올립니다 ㅠㅠ

어떤 상품의 수,발주정보를 저장하는 테이블이있다고 가정할때,

[A Table]

========================

품목명      가격1    VAT(10%)     최종금액 (가격 + VAT)

========================

  A          1000         100                     1100

  B          2000         200                     2200

=======================

 

이런식으로 저장되는 식으로 설계를 하고 작업을하고있었습니다.

그런데 문득 작업을하다 문득 궁금한점이 생겼는데요,  보통 이런식의 일정한 공식대로 계산되는 부분은 다른선배님들은 어떤식으로 처리하시는지 궁금합니다.

테이블에 값은 한...300만개정도 담겨있다고 가정되어있을떄,

1. 결과값을 위와같이 이미 insert전에 계산해놓고 컬럼에 담아서 그냥 뽑아쓴다.

2. 가격만 컬럼에 담아놓고서 sql로 뽑아올때 계산해서 출력해낸다.

 

일단 제 상식선에서는 1번의 경우가 훨씬더 속도면에서 이득일거같은게 제 짧은 생각입니다만. 좋은 조언 부탁드립니다!

 

by 우리집아찌 [2017.01.09 11:31:11]

보통 VAT 는 품목마다 틀릴수있어서 품목에 FLAG 값으로 가져가지 않나요?


by jkson [2017.01.09 11:54:02]

부가세 10%에서 변경될 가능성도 있고, 변경될 경우 히스토리 관리하면서 쿼리짜야 되기도 하고

각 금액 계산할 때 vat이 잘못 나왔을 경우 히스토리도 남지 않고

장기간 통계 뽑을 때 row별 계산 들어가면(row별로 안하고 총 sum에서 10%할 경우 차이가 발생되겠죠)

성능 문제도 있고  => (마농님 답변 보고 취소)

저 같으면 편의상 1번 방식으로 할 것 같네요.


by 마농 [2017.01.09 12:16:13]

단순 계산식의 경우
  - 조회 속도에 큰 영향이 없다고 봐도 무방합니다.
  - 오히려 DML 속도와 저장공간을 생각한다면 추출컬럼을 두지 않는 것이 좋구요.
  - 저장공간이 절약되면서 오히려 조회속도가 향상될 수도 있습니다.(I/O 감소)
  - 12C 의 새 기능인 가상컬럼(Virtual column)을 이용할 수도 있습니다.
계산식에 % 나 나누기가 들어가는 경우라면?
  - 속도 문제를 떠나서 정확도 문제가 있습니다.
  - 오차 발생이 가능하므로 계산결과를 저장해 놓는 것이 좋을 듯 하네요.


by jkson [2017.01.09 12:29:10]

마농님 답변 보고 궁금한 게 생겼습니다.

가격과 부가세 컬럼이 다른 블럭에 위치할 경우 말씀하신대로 I/O 증가가 있을 것은

확실해 보이는데요. 만약 같은 블럭에 있을 경우에

가격 컬럼을 읽고 부가세 컬럼을 읽으려고 재탐색이 들어가나요?

재탐색이 들어간다면 캐시에 올라왔다고 하더라도 비용 증가는 확실히 늘어날 것 같은데

한 블럭을 올리면서 두 값을 동시에 읽느냐 컬럼마다 따로 읽느냐..

아직도 지식이 짧아서 잘모르겠네요ㅠ


by 마농 [2017.01.09 13:04:00]

컬럼 하나 줄어들면 레코드 길이가 줄어 들고

레코드 길이가 줄어들면 블럭당 레코드 수가 많아지죠.

블럭당 레코드 수가 많아지면 전체 테이블 블럭수가 감소하죠.

테이블 크기가 작아지니 I/O도 감소하죠.


by jkson [2017.01.09 13:12:14]

아하! 전체를 놓고 생각하면 그렇군요! 단순히 저는 건당 I/O만 생각했네요. 답변 감사합니다. 궁금증이 명쾌하게 해결되었습니다.


by DeveloperP [2017.01.09 15:16:18]

좋은답변들 감사합니다!!

생각보다 답변들을 디테일하게 달아주셔서 큰 도움이되었습니다 :D

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입