데이터 모델링 관련 질문 드립니다 0

by dbwd [DB 모델링/설계] [2022.10.07 17:54:25]


안녕하세요
데이터 모델링 질문 드립니다

https://dataonair.or.kr/db-tech-reference/d-story/data-story/?mod=document&uid=63118
1. 위 링크의 3차 정규형 구매 주문 ERD 를 보면
주문상품 테이블에 주문금액 컬럼이 있습니다
계산컬럼은 사용하지 않는게 좋다라는 글을 봤는데 그렇다면 주문금액은 빼야할까요?
주문금액 = 단가 * 주문수량이며 계산컬럼이라고 보여지고 빼야할 것 같은데
일반적인 주문 모델링에서 주문금액 컬럼을 사용하는 이유가 궁금합니다


http://www.gurubee.net/lecture/3684
2. 중복 데이터가 사용된 모델의 예를 보면 상품 엔터티와 조인을 피하려고 상품명을 중복 속성으로 채택한 모델이다. 라고 나와있습니다
2.1 상품명을 중복 속성으로 두어 상품 엔터티와 조인을 피하려는 것은 속도 때문인가요? 다른 이유도 있는지 알고 싶습니다

2.2 만약 상품테이블에 상품구분이라는 컬럼이 있고 주문상품 조회시 상품명과 더불어 상품구분이라는 정보를 함께 조회해야한다면
조인을 할 수 밖에 없는데 이 경우는 어떻게 되나요? 
상품명을 주문상품에 중복으로 넣었으니 상품구분도 중복으로 넣어야할까요?
(상품구분뿐만 아니라 상품테이블의 다른 컬럼도 주문상품 조회시 필요하다면 계속 추가가 필요할 것 같습니다)

조인을 할 수밖에 없는 경우이니 주문상품에서 상품명을 제거하고 조인을 하는게 맞을까요?
아니면 주문상품에서 상품명을 중복속성으로 가지는 것은 유지하고 상품구분 등 상품의 속성정보들이 필요하다면 조인하는 방향이 맞을까요?

2.3 상품명이 변경된다면 주문상품 등 상품명을 중복속성으로 채택한 엔터티들은 모두 업데이트가 필요할텐데
이 경우 어떻게 하시는지 궁금합니다 일일이 해당 테이블의 데이터를 수동으로 업데이트 해주는 방법밖에는 없나요?

모델링 관련해서 모르는 부분이 많아 질문을 드립니다
현업에서 이런 것들을 어떻게 하시는지 궁금합니다
감사합니다

 

by 우리집아찌 [2022.10.09 11:51:19]

 

 

1.번  

-> 주문금액 컬럼을 가져가야하는 경우는 상품테이블의 단가가 변경될 가능성이 있기때문에 그렇습니다.

-> 추후에 포인트,할인,멤버쉽등등 추가되면 연산이 많이 생기면서 주문금액이 복잡해 질수 있습니다. 또한 연산이 추후에 변경이 필요할수도 있습니다. (히스토리 관리필요)

-> INSERT시 연산은 한번 / SELECT시 연산은 조회시마다..

 

2.

-> 1번과 비슷합니다.

->  예를 들어 상품테이블의 상품명을  "운동화" 를 "운동화(스니커즈)" 로 바뀌게 되고  JOIN으로 상품명을 가져오면 상품명이 과거와 달라지게 때문입니다.

->  상품코드를 새로 만들어서 사용하면 [상품코드는 삭제를 사용하지 않지요 , del_yn 컬럼으로 SQL 처리]  그러면 join으로 처리가능합니다.

 

2.1 

-> 성능보다는 위의 이유가 더 크지요 

 

2.3 

-> 상품명 바뀌었다고 과거 상품명이 바뀔지는 업무를 확인하셔야 합니다.

   ( 변경전 상품명은 변경전 상품명으로 남겨야하는 경우도 많습니다)

   예를 들어 인사데이터 경우 변경된 "부서명"을 "부서이력테이블"에 남길수도 있고 예전 부서명을 그냥 표기하는경우도 있습니다

 

기타.

 -> histroy 테이블 만들어서 사용도 가능하긴한데 좀 복잡해지고 스토리지도 더 필요해집니다.    

 

 


by dbwd [2022.10.11 18:22:17]

질문이 많았는데 하나씩 답변을 자세히 해주셔서 많은 도움이 되었습니다

감사드립니다^^

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