쇼핑몰 ERDCloud - syopingmol ERDCloud

본 글은 MySQL과 실제 주식 데이터로 SQL을 공부할 수 있는 책, '평생 필요한 데이터 분석'의 내용입니다.

5.1 테이블 간의 관계 이해하기

'관계형 데이터 모델'은 앞에서 간단하게 살펴봤다. ('4.2 관계형 데이터 모델'절) 관계형 데이터 모델은 데이터를 저장하기 위해 '테이블'과 같은 구조를 설계하는 과정이다. 이와 함께 테이블과 테이블 간에 관계(Relationship) 설정도 관계형 데이터 모델에서 중요한 부분이다.

테이블 간의 관계를 이해해야 데이터와 데이터를 연결하는 조인(JOIN)을 제대로 사용할 수 있다. 궁극적으로 조인을 제대로 활용하기 위해 조금은 따분할 수 있는 '관계형 데이터 모델'에 대해서 좀 더 들여다볼 시간이다.

5.1.1 ERD

건물을 짓기 위해서 설계도가 필요한 것처럼 데이터베이스 구성에도 설계도가 필요하다. ERD(Entity-Relationship Diagram, 개체-관계 설계도)가 바로 데이터베이스의 설계도다. 설계도 없이 웅장하고 튼튼한 건물을 지을 수 없는 것처럼 ERD 없이 거대한 시스템을 구축한다는 것은 불가능에 가깝다.

ERD에는 테이블과 함께 테이블 간의 관계(Relationship)도 표현되어 있다. 이 책에서 구축한 데이터베이스의 ERD는 [그림 5.1.1-1]과 같다.

쇼핑몰 ERDCloud - syopingmol ERDCloud
[그림 5.1.1-1]

ERD를 만들기 위해서는 ERD 툴을 사용하는 것이 편리하다. 전통적으로 많이 사용하는 툴에는 ERWIN이 있다. 그리고 국내에서 개발한 DA#이나 ExERD란 제품도 있다. 이 툴들은 모두 유료다. (사용 목적에 따라 업체에서 무료 라이선스를 발급해 주는 경우도 있다.) 최근에는 웹상에서 무료로 사용할 수 있는 'ERD Cloud'와 같은 툴도 있다. 무료인 만큼 불편한 점이 많지만 설계할 테이블이 많지 않다면 사용할 만하다. 'ERD Cloud'와 같은 무료 툴로 데이터베이스 설계에 먼저 친근해질 수 있기 바란다.

우리가 구성한 주식 데이터베이스는 아래의 ERD Cloud에 올려놓았다. Public으로 설정해 놓았기 때문에 누구라도 들어와서 볼 수 있다.

- https://www.erdcloud.com/d/mhuofhh58FqrKha6f

데이터를 잘 분석하려면 어떤 데이터(테이블)가 있는지를 먼저 알고 있어야 한다. 그리고 데이터와 데이터 간에 어떤 관계를 맺고 있는지도 파악하고 있어야 한다. 이를 위해 필요한 것이 바로 ERD다. 데이터 분석가로 업무를 맡게 된다면 가장 먼저 할 일은 ERD를 확보하는 것이다. 만약에 ERD가 없다면 어떻게 해야 할까? 필자는 직접 그려보라고 이야기한다. 물론 많은 시행착오와 많은 시간이 걸릴 수 있지만, 직접 그려본다면 그 누구보다 해당 시스템의 데이터를 잘 이해할 수 있을 것이다.

5.1.2 Primary Key

PK(Primary Key, 주키)를 이해하려면 식별자(Identifier)라는 개념을 먼저 이해해야 한다. 식별자는 테이블의 데이터를 식별할 수 있는 속성(Attribute) 또는 속성들이다. (여기서 속성은 컬럼이라고 간단히 이해하고 넘어가자.) 식별한다는 것은 테이블의 많은 데이터 중에 정확히 한 건만 골라낼 수 있다는 것을 뜻한다.

하나의 테이블에는 여러 개의 식별자가 있을 수 있으며, 식별자 중에서 대표로 사용할 식별자를 대표 식별자 또는 주식별자라고 부른다. 식별자와 주식별자(대표식별자)의 예를 보도록 하자.

  - 특정 대학교의 학생: 주민번호, 학번 -> 학번

  - 특정 쇼핑몰의 회원: 회원ID, 주민번호, E-Mail -> 회원ID

특정 대학교의 학생이라는 집합에서 식별자는 주민번호와 학번이 있을 수 있다. 이 중에 주식별자로 적합한 것은 학번이다. 주민번호는 보호가 필요한 개인 정보다. 시스템에서 감추고 관리해야 할 속성이다. 이처럼 보안이 필요한 내용을 주식별자로 사용하는 것은 적절하지 않다.

특정 쇼핑몰의 회원이라는 집합에서 식별자는 회원ID, 주민번호, E-Mail이 될 수 있다. 이 중에 주식별자로 널리 사용하는 것은 회원ID다. E-Mail은 변경될 가능성이 있다. 변경 가능성이 있는 속성 또한 주식별자에 적합하지 않다. (하지만 E-Mail을 주식별자로 사용하는 경우도 많다.)

주식별자는 테이블을 생성할 때 PK(Primary Key)로 만들어진다. 우리가 이 책에서 사용하는 STOCK(종목) 테이블과 HISTORY_DT(일별주가) 테이블의 PK에 대해 다시 복기해보면 [그림 5.1.2-1]과 같다.

쇼핑몰 ERDCloud - syopingmol ERDCloud
[그림 5.1.2-1]

[그림 5.1.2-1]을 통해 STOCK과 HISTORY_DT 테이블의 PK 구성을 알 수 있다. ERD 툴마다 PK를 표시하는 방법이 다르다. 이 책에서는 컬럼명 뒤에 '(PK)'라고 표시를 한다. HISTORY_DT(일별주가) 테이블의 PK는 DT(일자)와 STK_CD(종목코드)다. 이처럼 PK는 여러 개의 컬럼으로 구성할 수 있다는 점도 기억하자.

PK를 정하는 일은 테이블 설계에서 가장 중요한 일이다. PK가 있어야만 테이블의 데이터를 정확히 식별할 수 있다. 그뿐만 아니라 테이블의 PK는 다른 테이블에서 참조하는 대상이기도 하다. PK를 잘 못 설정하거나, 너무 복잡하게 구성하면, 개발이 어려워지거나 부정확한 데이터가 만들어질 수도 있으며, 시스템의 성능에도 좋지 않을 수 있다.

PK를 정하는 이론을 이 책에서 설명하지는 않는다. 하지만 PK를 정하는 것은 매우 중요하다는 점은 기억해 주기 바란다.

※ 주의 사항

  ▶ 절대 특정 종목을 추천하거나 투자를 권유하는 책이 아닙니다.

  ▶ 데이터 분석을 공부하기 위한 MySQL 책입니다.

  ▶ 책의 내용을 통해 얻은 종목에 투자해 발생한 손해는, 저를 비롯한 책 관계자 누구도 책임지지 않습니다.

  ▶ 본 자료(글)를 무단 사용 및 복제하지 말아주세요.

※ 책 소개: https://sweetquant.tistory.com/243

※ 책 미리보기: https://sweetquant.tistory.com/257

※ 완전판 E-Book

  ▶ 유페이퍼: https://www.upaper.net/ryu1hwan/1142997

  ▶ 알라딘: https://www.aladin.co.kr/shop/wproduct.aspx?ItemId=273701425 

  ▶ Yes24: http://www.yes24.com/Product/Goods/102264444?OzSrank=1 

  ▶ 교보문고: https://digital.kyobobook.co.kr/digital/ebook/ebookDetail.ink?selectedLargeCategory=001&barcode=4801167630019&orderClick=LAG&Kc=

쇼핑몰 ERDCloud - syopingmol ERDCloud