여부 vs 유무
여부 : 이다, 아니다 예: 결혼여부
유무 : 있다, 없다 예: 자동차유무
참고
구분코드 성질이나 특징이 다른 코드명이 고정적일 때 사용 -- 예) 남녀구분코드 매수매도구분코드
유형코드 코드명을 성질이나특징이 공통적인 것끼리 묶을 때 사용. -- 예) 거래유형코드
종류코드 고정적이지 않고 지속적으로늘어닐수 있는코드명을 나열할 때 사용 -- 예) 서비스종류코드
SELECT A.계좌번호, B.코드명
FROM [거래내역] A, [코드] B
WHERE A.매수매도구분코드 = B .코드값
AND B.코드유형번호 = '001' -- 코드값을 미리 알고 있어야 함
AND A.계좌번호 = '123456789';
-- 뷰를 활용하여 코드유형번호 코드값을 잘못입력하는 것을 방지할 수 있음
CREATE OR REPLACE VIEW VW_매수매도구분
AS
SELECT 코드값, ZHEMAUD
FROM [코드]
WHERE 코드유형번호 = '001';
SELECT A. 계좌번호 ,B 코드명
FROM[거래내역] A, VW_매수매도구분 B
WHERE A.매수매도구분코드 = B.코드값
ANDA.계좌번호 = '123456789';
-- 속성의 물리명을 코드유형코드 값으로 사용하는 방식
SELECT A.계좌번호, B.코드명
FROM [거래내역] A, [코드] B
WHERE A.매수매도구분코드 = B.코드
AND B.코드유형코드 = 'BS_CD' -- 코드값을 미리 알고 있어야 함(앞서의 모델보다는 코드값과 컬럼명이 같으므로 사용하기 쉬움)
AND A.계좌번호 = '123456789';
-- 속성명(한글)을 사용하는 방식으로 변수를 한글로 지정해야 함
SELECT A.계좌번호, B.코드명
FROM [거래내역] A, [코드] B
WHERE A.매수매도구분코드 = B.코드
AND B.코드유형코드 = '매수매도구분코드' -- 속성의 물리명(컬럼명)은 영문약어 변경 등으로 변경 될 수 있으나 속성명은 변경되지 않으므로 오히려 더욱 안정적인 방식
AND A.계좌번호 = '123456789';
-- 필자가 추천하는 코드 모델
SELECT A.계좌번호, B.코드번호
FROM [거래내역] A, [코드] B
WHERE A.매수구분코드 = B.코드값 -- 코드유형을 의미하는 구문이 조건절에 없음(속성 값에 코드 유형이 포함되어 있으므로)
AND A.계좌번호 = '123456789';
순환과계를 사용하는 방식, 그림 9.10과 같은 효과가 있으나 공간을 더 많이 차지
그림 9.8 방법에 코드 부분 집합 개념을 도입한 모델
위 그림 9.12 모델을 대체할 수 있는 방법
가. 필요한 부분집합 코드를 어플리케이션에 하드코딩하는 방법 : 유지보수의 어려움 존재
나. 코드에 롤(Role) 이름을 붙여 관리하는 방법 : 필요한 부분집합을 각각 생성하는 방법(예 : 통합고객구분코드, WM고객구분코드 등처럼 통합, WM의 롤이름을 붙여줌)
코드값 간에 계층관계가 존재하는 경우
코드유형과 코드 엔터티를 이력관리하는 모델
* 코드 엔터티를 이력관리하는 예제
* 코드 유형에 대한 과거의 코드값과 코드명 전체가 시점 데이터로 관리
* (b)의 경우와 값이 법인의 코드값이 02 -> 03으로 변경되면 해당 코드값을 사용한 전체속성 값을 모두 수정해야 함
* 코드값의 변경 이력을 관리해주는 것이 좋음