공통코드 테이블 설계 질문 0 2 11,390

by 정남식 [DB 모델링/설계] 공통코드 테이블설계 모델링 [2015.02.03 11:50:31]


안녕하세요. 공통코드 관련 설계관련 질문입니다.

 

공통코드 관리 시

  1. 한개의 공통테이블 관리

  2. 코드성 테이블로 개별 관리

할 수 있는데 어떤것이 효과적인지 의견을 듣고자 합니다.

(운영적 이슈, 성능적 이슈, 관리적 이슈 )

 

개인적인 생각은

  1. 한개의 공통테이블 관리

    -> 코드 관리가 편하다 - 신규 코드 추가 시 insert 만 처리

    -> 데이터 집중

 

  2. 코드성 테이블로 개별 관리

    -> DBA_DEPENDENCIES 확인 가능(Procedure, function, package, view 등)

    -> was 관리 툴에서 코드를 사용하는 application를 명시적으로 확인가능

    -> 신규 코드 추가 시 테이블 추가로 관리 증가

 

정도고 각 개별 관리가 유리해 보입니다.

그 외 크고 작은 이슈가 많겠고, 또 보완하는 방법도 많으리라 생각됩니다.

 

1. 공통 테이블 관리

SELECT 
   A.배송마스터키
 , A.배송상품명
 , A.배송정보
 , A.배송상태코드
 , B.배송상태명
 , A.결제상태코드
 , C.결제상태명
FROM [배송마스터] A
 INNER JOIN [공통코드] B ON (B.코드구분 = '배송상태' AND B.CD = A.배송상태코드)
 INNER JOIN [공통코드] C ON (B.코드구분 = '결제상태' AND B.CD = A.결제상태코드)
WHERE 1 = 1

 

2. 각 개별 관리

SELECT 
   A.배송마스터키
 , A.배송상품명
 , A.배송정보
 , A.배송상태코드
 , B.배송상태명
 , A.결제상태코드
 , C.결제상태명
FROM [배송마스터] A
 INNER JOIN [배송상태.테이블] B ON (B.CD = A.배송상태코드)
 INNER JOIN [결제상태.테이블] B ON (B.CD = A.결제상태코드)
WHERE 1 = 1

 

 

by 아발란체 [2015.02.03 16:32:12]

1. 공통 관리

① ERD 가독성 향상

>> 코드성 테이블이 20개 이상 있을 경우 ERD 보기가 점점 어렵고 가독성이 떨어지게 됩니다. 이런 경우 공통 테이블 1개 두고 20개 이상 되는 구분 값에 대한 설명을 보기 좋게 두면 가독성이 좋아지는 것 같습니다. 그러나 업무 성격이 전혀 다른 것들이 너무 많이 1개 테이블로 관리되는 것은 오히려 눈에 잘 들어오지 않을 수 있습니다.

② 권한 및 관리, 통제 일원화

>> 1개 테이블로 관리하기 때문에 권한 관리나 테이블 관리 및 통제가 편합니다. 그러나 권한 및 관리에 대해 세분화 작업을 할 경우, 특정 코드 구분 값에 대해 테이블 수정이 일어날 경우 간섭이 심하게 발생할 수 있습니다. 테이블이 락이 걸리거나 잘못될 경우 시스템 전체가 마비될 수 있습니다.

③ 기타

>> 공통으로 쓴다고 속도가 느려지지 않습니다. 또한 VARCHAR를 이용하여 용량 낭비가 없으나 대용량 데이타가 될 경우 분산 처리 및 FULL SCAN를 하는 것 등에 대해 보다 주의가 필요하게 됩니다.

 

2. 개별 관리

단점은 개수가 적을 때는 상관 없으나 많아지면 ERD 가독성이 떨어집니다. 그러므로 확장성이 떨어지는 것 같습니다. 또한 각각 권한 / 관리 / 통제 등 신경써야 하는 부분이 많이지는 것 같습니다.

장점은 개별 관리하기 때문에 한 테이블이 락 등 테이블이 잘못되더라도 시스템 전체가 마비되지 않습니다. 또한 개별적으로 테이블 구조를 변경해도 간섭이 없습니다.

 

3. 결론

저는 ERD 관점에만 차이를 둔 것 같은데, 어떤 쪽으로 하든 관리나 성능상으로는 큰 이슈는 없는 것 같습니다. 한쪽으로 몰아 결정하는 것보다 혼합 형태로 업무 특성을 잘 파악하여 비율을 어느 쪽으로 더 둘 것인지가 좋은 방법인 것 같습니다.


by 불혹 [2015.02.06 17:02:49]

추가 문의 드리면

  . 공통 관리 테이블도 ERD에 관계를 설정하시나요?

 

저는 개별 관리를 검토 중이며  ERD에 관계 명시를 생략하려 합니다.

관계를 생략하고 코드 테이블명을 컬럼명과 동일시 하려합니다.

예) TY_PAY (컬럼.결제구분) <--> code_TY_PAY (테이블.결제구분)

 

의견 감사드립니다.

 

 

 

 

 

 

 

 

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