Skip to content
isdnetworks
Go back

규제가 컬럼이 될 때

해외 판매 사이트의 상품 테이블에 국내 쇼핑몰에는 없는 컬럼이 몇 개 있었다. 수출입 상품 번호와 과세 유형과 성인 상품 여부였고 국가별 판매 정보를 담는 별도 테이블도 있었다.

Table of contents

Open Table of contents

법적 요건이 스키마에 남긴 자리

수출입 상품 번호는 세관이 관세율을 정할 때 보는 국제 분류 코드다. 국내 판매만 하면 필요 없지만 국경을 넘는 순간 없으면 통관이 안 된다.

이 값은 상품마다 하나로 정해지므로 상품 테이블의 컬럼이 맞다. 법적 요건이 스키마에 자리를 갖는 형태였다.

나라마다 달라지는 것

같은 상품인데 나라마다 갈리는 것들이 있었다. 판매 가능 여부와 가격과 배송 방식과 필수 표기가 그렇다.

이것을 상품 컬럼으로 넣으면 나라를 추가할 때마다 컬럼이 늘고 항목까지 곱해지면 배로 는다. 그래서 상품 하나가 국가마다 행을 갖는 별도 테이블로 빠져 있었다.

무엇에 대해 하나인가

컬럼으로 둘지 테이블로 뺄지는 무엇에 대해 값이 하나인가로 갈렸다. 상품에 대해 하나면 컬럼이고 상품과 국가의 조합에 대해 하나면 테이블이다.

실무에서 헷갈리는 것은 지금은 나라가 하나뿐인 상황이다. 나라가 늘 것이 확실하면 처음부터 축으로 만들고 확실하지 않으면 컬럼으로 두되 옮기는 비용이 예측되게 해 둔다.

성격과 정책을 나눈다

과세 유형이 상품 컬럼인 것이 처음에는 이상해 보였는데 그것은 상품 자체의 분류였다. 과세 대상인지 면세인지를 상품이 갖고 실제 세율은 국가별 설정에서 온다.

성인 상품 여부도 같은 구조로 상품에는 표시만 두고 그것을 어떻게 취급할지는 국가별 규칙에 있었다. 상품이 세율 값을 직접 들고 있으면 세율이 바뀔 때 전 상품을 고쳐야 하므로 자주 바뀌는 쪽을 분리한 것이다.

나눈 뒤 늘어난 실수 자리

이렇게 나누면 조회에 조인이 붙고 어느 나라를 보는지를 매번 지정해야 한다. 그 조건을 빠뜨리면 상품 하나가 나라 수만큼 중복돼 나온다.

세션의 국가 설정을 기본으로 적용하는 뷰를 두고 관리 화면이 그것을 쓰게 하면 그 실수가 한 자리로 모인다. 나누면 실수가 생길 자리가 늘어나므로 그 자리를 하나로 막아 두는 편이 낫다.

정리


Share this post on:

Previous Post
중간에서 멈추는 DDL 스크립트
Next Post
보관물에 남겨야 하는 것