공통 코드에 속성 추가하기

실무에서는 코드에 추가 속성이 필요한경우가 많다. 회원 등급별 할인율이라던가, 결제 수단별 수수로율 등임. 이런 값을 별도 테이블에서 관리해도 되지만 간단한 경우 공통 코드 테이블을 이용하면 편리하다.

방법1: 컬럼 추가

가장 단순한 방법은 그냥 공통 코드 테이블에 기타 컬럼같은걸 만들고 필요한 속성을 때려박는 것이다.

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;

image.png

물론 이렇게 하면 안될것같다는 느낌이 바로 든다. 왜냐하면 각 그룹에서 ‘기타 컬럼’등이 의미하는바가 다 달라질게 뻔하기 때문이다. 당장 위 결과만 봐도 저 숫자가 뭔지 모르겠음.

그럼 이 기타 컬럼이 어떤 역할을 하는지 그룹 테이블에 추가하면 되지 않을까? 이렇게 말이다.

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';

이러면 이제 공통 코드 그룹 테이블에 각 기타 컬럼이 어떤 역할로 사용되는지 그나마 인간이 이해해볼만 하다..