실무에서는 코드에 추가 속성이 필요한경우가 많다. 회원 등급별 할인율이라던가, 결제 수단별 수수로율 등임. 이런 값을 별도 테이블에서 관리해도 되지만 간단한 경우 공통 코드 테이블을 이용하면 편리하다.
가장 단순한 방법은 그냥 공통 코드 테이블에 기타 컬럼같은걸 만들고 필요한 속성을 때려박는 것이다.
ALTER TABLE common_code_detail
ADD COLUMN attr1 VARCHAR(100),
ADD COLUMN attr2 VARCHAR(100),
ADD COLUMN attr3 VARCHAR(100);
범용적으로 쓸만한 컬럼 세개를 만든다.
-- 회원 등급별 할인율 설정
UPDATE common_code_detail SET attr1 = '0' WHERE group_code = 'MEMBER_GRADE' AND code = 'NORMAL';
UPDATE common_code_detail SET attr1 = '5' WHERE group_code = 'MEMBER_GRADE' AND code = 'VIP';
UPDATE common_code_detail SET attr1 = '10' WHERE group_code = 'MEMBER_GRADE' AND code = 'VVIP';
-- 결제 수단별 수수료율 설정
UPDATE common_code_detail SET attr1 = '2.5' WHERE group_code = 'PAYMENT_METHOD' AND code = 'CARD';
UPDATE common_code_detail SET attr1 = '0' WHERE group_code = 'PAYMENT_METHOD' AND code = 'BANK';
UPDATE common_code_detail SET attr1 = '0' WHERE group_code = 'PAYMENT_METHOD' AND code = 'VIRTUAL';
UPDATE common_code_detail SET attr1 = '3.0' WHERE group_code = 'PAYMENT_METHOD' AND code = 'MOBILE';
조회해보자.
SELECT group_code, code, name, attr1
FROM common_code_detail
WHERE group_code IN ('MEMBER_GRADE', 'PAYMENT_METHOD')
ORDER BY group_code, sort_order;

물론 이렇게 하면 안될것같다는 느낌이 바로 든다. 왜냐하면 각 그룹에서 ‘기타 컬럼’등이 의미하는바가 다 달라질게 뻔하기 때문이다. 당장 위 결과만 봐도 저 숫자가 뭔지 모르겠음.
그럼 이 기타 컬럼이 어떤 역할을 하는지 그룹 테이블에 추가하면 되지 않을까? 이렇게 말이다.
ALTER TABLE common_code_group
ADD COLUMN attr1_name VARCHAR(50),
ADD COLUMN attr2_name VARCHAR(50),
ADD COLUMN attr3_name VARCHAR(50);
UPDATE common_code_group SET attr1_name = '할인율(%)' WHERE group_code = 'MEMBER_GRADE';
UPDATE common_code_group SET attr1_name = '수수료율(%)' WHERE group_code = 'PAYMENT_METHOD';
이러면 이제 공통 코드 그룹 테이블에 각 기타 컬럼이 어떤 역할로 사용되는지 그나마 인간이 이해해볼만 하다..