DB 설계 정규화 VS 반정규화 고민입니다 0 11 1,758

by 브루스 [DB 모델링/설계] 정규화 반정규화 [2018.04.05 11:17:47]


프로젝트를 시작하면서 DB를 설계해야하는데 처음이다 보니 막히는 부분이 많습니다.

처음엔 최대한 정규화를 하면서 테이블을 만들었는데

편의성이나 성능부분에서 반정규화를 해야할 부분이 생기기 시작하면서 머리가 아파오네요.

현재 고민인 상황입니다.

1. 모든 데이터 테이블에 자료가 변경(추가/수정/삭제)될 때마다 이력을 관리하는 테이블이 있습니다.

각 데이터 테이블에는 변경에 관련된 컬럼은 없습니다.

2. 사용자에게 자료의 추가/수정일을 노출시켜야합니다. 

3. 현재 상황에서는 데이터 테이블 자료조회시 이력테이블에 조인을 합니다.

4. 수정안으로 각각의 데이터테이블에 추가/수정일 컬럼을 추가하려 합니다.

 

3번과 4번을 놓고 고민중인데 어느게 효율적인지 파악을 못하겠습니다.

편의성과 성능을 비교/분석하기가 쉽지 않네요.  

의견좀 부탁드리겠습니다.

by 마농 [2018.04.05 12:27:46]

모든 테이블이 항상 입력일,수정일 정보를 함께 조회해야 한다면? 4번


by 브루스 [2018.04.05 13:09:39]

그렇게 생각하시는 이유를 알 수 있을까요? 

 


by 우리집아찌 [2018.04.05 13:13:29]

반정규화하는거죠 SNAPSHOT 방식이라고 생각하시면 될듯합니다.


by 우리집아찌 [2018.04.05 12:48:55]

근데 왜 모든 테이블에 데이타 변경로그 테이블을 만들죠?


by 브루스 [2018.04.05 13:06:54]

업체에서 누가 수정/삭제했는지 추적하려고합니다. 

업체 직원이 데이터 수정/삭제 엄하게 하는 경우가 종종거든요


by 마농 [2018.04.05 13:12:18]

모든 조회 화면에 기본으로 함께 조회되어야 한다면? 4번
기본 조회시엔 필요 없고 추적용으로만 필요하다면? 3번


by 마농 [2018.04.05 13:17:33]

해당 컬럼은 실제로 사용자가 필요로 하는 항목이 아닙니다.
시스템적으로만 필요한 항목이죠.
모든 사용자가 보고싶어하는 자료가 아닌데도 불구하고 어쩔수없이 봐야만 하는거죠.
어쩔 수 없이 조인해야 하고, 어쩔 수 없이 성능이 저하될 수밖에 없죠.
정말 어쩔 수 없이 전체 기본화면에 같이 뿌리기로 결정이 된 사항이라면?
조인 으로 인한 성능 저하를 방지해야죠.
즉, 모든 기본화면에 해당 항목이 함께 조회되어야 하느냐 아니냐에 따라 결정하시면 됩니다.


by 브루스 [2018.04.05 13:22:04]

의견 감사합니다.  기준을 정하는게 쉽지 않았는데 많은 도움이 되었습니다.


by 웅 [2018.04.05 17:15:50]

보통 3번처럼 최초등록/입력자/수정일시/수정자 와 같은 컬럼을 시스템컬럼이라고 해서,

일반 관리 데이터가 아닌 데이터를 위한 데이터를 관리하고자하는 모든 테이블에 포함합니다.

추가적 이력관리가 필요하면 4번을 혼용합니다. 데이터 1개에 이력 N개이기 때문에 테이블 분리될 수 밖에 없지요

이력을 쌓아서 볼 필요가 있는 또는 없는지 선택하는게, 정규화/반정규화 전 선택되어야 할 문제 같네요


by 마농 [2018.04.05 17:23:17]

3,4번 거꾸로 설명하신 듯요. ^^
 - 3번 : 이력테이블
 - 4번 : 시스템속성


by 웅 [2018.04.06 08:34:47]

힝 난독증 재발... ㅠㅠ

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