Search

4-3. Item 이해하기

다음의 네 단계를 차례대로 수행하며 Item 테이블을 이해해 보자.

1단계-ERD와 실제 데이터 살펴보기

데이터 이해를 위해 가장 먼저 할 일은 아래와 같이, ERD와 실제 저장된 데이터를 조회해보는 것이다.
-- [SQL-4-3-1] Item 살펴보기 SELECT T1.* FROM startdb.Item T1 ORDER BY T1.ItemId; ItemId ItemNm ItemCat ItemSizeCd HotColdCd LaunchDt ------ ------------------- ------- ---------- --------- ---------- AMB Americano(B) COF BIG HOT 2019-01-01 AMR Americano(R) COF REG HOT 2019-01-01 BGLR Bagel(R) BKR REG HOT 2019-01-01 BMFR Blueberry Muffin(R) BKR REG COLD 2019-01-01 CITR Yuzu Ade(R) BEV REG COLD 2023-04-01 CLB Cafe Latte(B) COF BIG HOT 2019-01-01 CLR Cafe Latte(R) COF REG HOT 2019-01-01 CMFR Chocolate Muffin(R) BKR REG COLD 2019-01-01 EINR Einspanner(R) COF REG HOT 2023-04-01 FLTR Flat White(R) COF REG HOT 2023-04-01 HCHB Hot Chocolate(B) BEV BIG HOT 2019-01-01 HCHR Hot Chocolate(R) BEV REG HOT 2019-01-01 IAMB Iced Americano(B) COF BIG COLD 2019-01-01 IAMR Iced Americano(R) COF REG COLD 2019-01-01 ICLB Iced Cafe Latte(B) COF BIG COLD 2019-01-01 ICLR Iced Cafe Latte(R) COF REG COLD 2019-01-01 IEINR Iced Einspanner(R) COF REG COLD 2023-04-01 IFLTR Iced Flat White(R) COF REG COLD 2023-04-01 LEMR Lemonade(R) BEV REG COLD 2019-01-01 MACA Macaron(R) BKR REG HOT 2023-04-01 ZAMB Grapefruit Ade(R) BEV REG COLD 2023-04-01
SQL
복사
ERD로 테이블의 각 컬럼이 의미하는 바를 확인하고, 데이터를 조회해 각 컬럼별로 어떤 값들이 있는지 살펴보자. 그리고 컬럼별로 자신의 생각을 정리해보자. 이것 만으로 데이터와 한층 더 가까워질 수 있다. 살펴본 내용을 아래와 같이 정리해보자.
ItemId: 상품(Item)을 유일하게 식별하는 PK 컬럼이다.
ItemNm: 상품의 전체 명칭 값이 들어가 있음
ItemCat: 상품카테고리, COF, BKR과 같은 값이 있음
해당 값들의 의미를 좀 더 조사해볼 필요가 있음
ItemSizeCd: 상품의 사이즈를 나타내는 코드 같음
BIG과 REG가 있음, REG는 Regular 같음
HotColdCd: Hot/Cold 구분을 나타내는 코드
LaunchDt: 상품이 출시한 일자
이처럼 자신만의 생각으로 컬럼이 의미하는 바를 정리해보자. 그리고 PK 컬럼이 무엇인지 반드시 기억해두자. PK 컬럼은 조인에도 자주 사용되며, 데이터를 정확히 처리하기 위해 반드시 필요한 속성이다.
업무 지식과 개발 지식이 부족해 정리가 잘 안될 수도 있다. 상관 없이 해보는 것이 중요하다. 부족하거나 잘못된 지식은 나중에 바로 잡으면 된다.

2단계-자료형 살펴보기

DESC 명령어를 통해 테이블의 자료형을 살펴보자. 이 과정을 통해 각 컬럼별로 어떤 자료형을 사용하는지 익혀두자. 컬럼별 모든 자료형을 외우라는 의미가 아니다. 눈으로 간단히 살펴보고, 기억할 만한 컬럼만 기억해두면 된다. 여기서는 LaunchDt가 DATE 자료형인 것을 기억해 둘 필요가 있다.
-- [SQL-4-3-2] Item 테이블 구조 확인 DESC startdb.Item; Field Type Null Key Default Extra ---------- ------------ ---- --- ------- ----- ItemId varchar(40) NO PRI NULL ItemNm varchar(100) YES NULL ItemCat varchar(40) YES MUL NULL ItemSizeCd varchar(40) YES NULL HotColdCd varchar(40) YES NULL LaunchDt date YES NULL
SQL
복사

3단계-코드성 데이터 추적하기

테이블에는 다양한 코드성 데이터가 존재한다. “배송”이라는 테이블에는 “배송상태”와 같은 코드가 있을 수 있다. “배송상태”에는 배송준비중, 배송중, 배송완료와 같은 코드 값들이 있을 수 있다. “회원” 테이블에는 “회원상태”와 같은 코드가 있을 수 있다. 가입신청, 가입, 탈퇴, 삭제와 같은 코드 값들이 있을 것이다. 이러한 코드성 데이터는 기준코드, 공통코드, 기초코드, 기본코드, 시스템코드등 다양한 이름으로 불린다. 여기서는 기준코드란 이름을 사용한다.
기준코드는 별도의 테이블을 만들어 데이터화해서 관리한다. 기준코드를 데이터로 관리하지 않으면, 개발자나 분석가 각자의 기준으로 코드를 정의해 사용하게 되고, 같은 의미를 갖는 코드가 여러 개 만들어지면서 데이터가 엉망진창이 된다.
처음 접한 데이터베이스라면, 기준코드를 관리하는 테이블이 무엇인지 빨리 파악해 놓으면 좋다. 그리고 중요한 코드 몇 개 외워 놓는 것도 앞으로 데이터를 활용하는데 큰 도움이 된다.
우리가 실습 중인 데이터베이스에는 BaseCdDv(기준코드구분)와 BaseCd(기준코드) 테이블에 코드성 데이터의 정보가 담겨있다. BaseCdDv는 기준코드의 종류를 정의하기 위한 부모 테이블이다. 실제 기준코드에 대한 정보는 BaseCd 테이블만 확인하면 알 수 있다. BaseCdDv와 BaseCd 테이블은 아래와 같은 구조다.
우리가 실습 중인 STARTDB의 테이블들에는 기준코드를 사용하는 규칙이 있다. 기준코드로 관리하는 값을 갖는 컬럼은, 컬럼명 자체를 기준코드구분(BaseCdDv) 값으로 사용하게 되어 있다. 그러므로 Item(상품) 테이블에 ItemSizeCd(상품사이즈코드)란 컬럼의 코드 값들을 확인하고 싶다면, 아래와 같이 BaseCd 테이블에 BaseCdDv 조건으로 ItemSizeCd를 사용하면 된다. 아래 SQL의 결과를 통해 ItemSizeCd의 코드에 따른 명칭을 알 수 있다. 이어서 HotColdCd에 대한 코드 명칭도 확인해보자.
-- [SQL-4-3-3] ItemSizeCd 코드 확인 SELECT T1.* FROM startdb.BaseCd T1 WHERE T1.BaseCdDv = 'ItemSizeCd'; BaseCdDv BaseCd BaseCdNm SortOrder ---------- ------ ------------ --------- ItemSizeCd BIG Big Size 2 ItemSizeCd REG Regular Size 1 -- [SQL-4-3-4] HotColdCd 코드 확인 SELECT T1.* FROM startdb.BaseCd T1 WHERE T1.BaseCdDv = 'HotColdCd'; BaseCdDv BaseCd BaseCdNm SortOrder --------- ------ -------- --------- HotColdCd COLD Cold 2 HotColdCd HOT Hot 1
SQL
복사
테이블의 코드 데이터는 데이터를 집계하거나 추출하는 주요 조건으로 자주 사용된다. 업무 처리에도 자주 사용되는 조건이다. 그러므로 주요 코드 데이터 몇 개 정도는 외우고 SQL을 작성하면 조금 더 편하고 효율적으로 SQL을 작성할 수 있다.

4단계-ERD에서 관계 테이블 살펴보기

ERD를 살펴보면, Item 테이블과 관계선으로 연결된 테이블을 발견할 수 있다. 아래와 같이 Item(상품) 테이블과, ItemCat(상품카테고리), ItemPrcHist(상품가격이력), OrdDet(주문상세) 테이블이 연결되어 있다. 이를 통해 Item 테이블이 아래 테이블들과 관련이 있구나 정도만 기억해도 성공이다.
관계에 대해 정확히 이해하기 위해서는 관계선과 관계차수에 대한 이해가 필요한데, 아직은 이 부분은 이해하지 못해도 괜챃다. 안타깝게도 ERD에 이와 같은 관계선 자체가 없는 경우도 실제로 많다. ERD 자체가 없는 경우도 많다.
관계 있는 테이블을 하나씩 조회해보면서 데이터를 살펴보며, 어떤 정보가 있는지 살펴보자. 이는 나중에 데이터를 확장해서 분석하는데 큰 도움이 된다. 테이블을 하나씩 조회하다 보면 ItemCat(상품카테고리) 테이블에 COF, BEV, BKR과 같은 값의 의미가 저장된 것을 알 수 있다. 이 값은 Item(상품) 테이블에 ItemCat 컬럼에도 있던 값이다.
-- [SQL-4-3-4] ItemCat 확인, COF, BKR의 의미를 알 수 있다. SELECT T1.* FROM startdb.ItemCat T1; ItemCat ItemCatNm ------- --------- BEV Beverage BKR Bakery COF Coffee
SQL
복사

사용자의 언어

4 단계를 거쳐 Item 테이블을 살펴봤다. 이 과정을 통해 Item 데이터와 좀 더 가까워졌기 바란다. Item 데이터와 충분이 가까워졌다면, 현업이 아래와 같이 요구하는 것을 알아 듣고 SQL로 개발해낼 수 있을 것이다.
음료 상품 중에서 레귤러 사이즈의 상품만 보여주세요.
현업의 그 누구도 우리에게 "Item 테이블에 ItemSizeCd가 REG이면서 ItemCat가 BEV인 데이터만 보여주세요." 라고 친절하게 요청하지 않는다. 우리는 데이터를 이해하고 현업의 언어를 번역해 데이터를 추출하거나 분석해야 한다.