[DB활용]로또 데이터를 이용한 오라클 테이블 만들기

반응형
반응형

안녕하세요. 지금까지 포스팅에서는 오라클 회원 가입부터 SQL을 실습하기 위한 dbeaver 설치를 해보았습니다.

>>> 지난 포스팅 보기 <<
1. 오라클(Oracle) 홈페이지 계정 가입하기
2. 오라클 Oracle Database 21c Express Edition for Windows 설치
3. dbeaver 설치 및 오라클 21c Xe DB 연결

하지만, 데이터가 없으면 딱히 할 것이 없는 것이 SQL을 실행시켜 볼 수가 없기 때문입니다. 물론, 오라클 dictionary 데이터가 있기도 하고 DUAL이라는 더미(DUMMY) 테이블도 있지만 재미는 없습니다.
그래서 어떤 데이터를 받아서 넣을 수 없을까 이용 할까 고민을 했습니다. 입력 시스템을 만들면 좋겠지만 제가 지금은 딱히 자원이 없습니다.
그래서 고민을 한 결과 맨 처음 생각한건 공공데이터 포털(https://www.data.go.kr/ )의 데이터를 이용하는 것이었습니다.
공공데이터 포털에는 여러 가지 데이터를 API를 이용하여 받거나 할 수 있는데요. 들어가 봐도 딱히, 생각나는 것이 없었습니다.
그러다가 생각난 것이 바로 로또 당첨금 데이터였는데요.
동행 복권사이트에서 엑셀 형식으로 받을 수 있었습니다. 2002년부터 2022.03.19까지 추첨한 1007회분의 데이터였는데요. 매주 데이터를 갱신하려 올려놓는 듯했습니다. 아래는 제가 받은 데이터입니다.

excel.xls
0.70MB
로또 회차별 결과

그럼 테이블을 어떻게 만들면 좋을까요?
여러 테이블에 중복되지 않도록 칼럼을 만드는 게 좋겠죠. 그리고 불필요한 데이터가 중복돼서 저장되지 않는 것이 중요합니다.

 

[DB]Data, Database, DBMS, Big Data 용어 및 개념 정리

안녕하세요. 즐거운코딩생활 입니다. 오늘은 데이터(Data), 데이터베이스(Database, DB), DBMS(Database Management System), 빅데이터(Big Data)의 개념에 대해서 생각해 보도록 하겠습니다. 데이터(Data)란? 요..

pandajeytv.tistory.com


이론에 근거하여 데이터 모델링을 하면 좋겠지만 제가 모델러도 아니고 해서 받은 엑셀에 있는 데이터 내역을 기반으로 그냥 간단히 끼적거려 봅니다. 실제 현장에서는 DBA 도 있지만 모델러 역할을 하는 분들이 검토를 합니다.

논리 테이블명 ( 칼럼명 )
1. 회차 ( 회차(PK) , 추첨일 )
2. 당첨번호 ( 회차(PK) , 일련번호(추첨 순번) PK , 보너스 여부 )
3. 당첨금액 ( 적용 시작일 PK, 적용 종료일 PK, 등수 구분코드 (PK) , 당첨금액 )
4. 당첨자 ( 회차 PK, 등구 수분 PK, 일련번호 PK, 고객번호 )

이렇게 하면 회차별 건수나 통계를 낼 수 있을 것 같습니다. 하지만 안타깝게도 우리는 4번에 해당되는 당첨자 정보를 없습니다. 그래서 4번 테이블을 대신 당첨자 집계 ( 회차 PK, 등수 구분 PK, 당첨 건수 ) 테이블을 만들면 될 듯합니다.
테이블을 영문으로 변환하는 것은 단순한 일이지만 상당히 어려운 일입니다. 작명가가 되어야 하죠. 최대한 간단히 해 봅니다. 웬만한 규모의 현장에서는 메타시스템을 이용하여 사용하는 용어를 정리하고 도메인을 관리하기 때문에 많은 작명에 대한 고민은 없습니다.

간단하게 물리테이블 테이블 정의서를 작성해 봅니다.

LOTTO_DATE(로또일자)
컬럼명 데이터타입(길이) PK여부 설명
LOTTO_NO NUMBER(7,0) PK 로또회차
LOTTO_DATE DATE   로또일자

로또 일자는 문자형 타입으로 CHAR(10)로 해도 될 듯 하나 DATE로 하였습니다. DATE 타입으로 하면 DBMS가 유효성 체크를 하지만 보통은 문자 타입으로 하여 유효성 체크를 프로그램에서 하기도 합니다.

LOTTO_NUM(로또번호)
컬럼명 데이터타입(길이) PK여부 설명
LOTTO_NO NUMBER(7,0) PK 로또회차
SEQ NUMBER(1,0) PK 추첨일련번호
NUM NUMBER(2,0)   당첨번호
BNS_YN CHAR(1)   보너스여부

보너스까지 7개를 추첨하기 때문에 일련번호(SEQ)는 한자리로 해도 될 듯합니다. 그러나 번호가 늘어날 가능성이 있다면 2자리 이상으로 하는 것이 좋겠습니다.

테이블 정의서를 간단하게 작성하다 보니 또 생각이 조금 바뀝니다. 당첨금액을 적용일자 이력으로 하려고 하던 건 당첨금액을 변동을 관리하기 위함이었는데 중 정액은 5등뿐이고 나머지 등수는 정확한 로직은 모르지만 판매액과 당첨자 수로 결정이 됩니다. 당첨금액에 당첨자 수까지 등수별 금액을 넣어 만들어 봅니다.

LOTTO_AMT(로또금액집계)
컬럼명 데이터타입(길이) PK여부 설명
LOTTO_NO NUMBER(7,0) PK 로또회차
LOTTO_CFCD CHAR(2) PK 등수구분코드
(01: 1등 ~ 05 : 5등)
LOTTO_AMT NUMBER(13,0)   당첨금액
LOTTO_CNT NUMBER(5,0)   당첨건수


다음에는 실제 실제 DDL 문인 CREATE TABLE 문을 사용해서 테이블을 생성하고 데이터를 올려보겠습니다. ( 임포트 IMPORT )

2022.03.23 - [SW교육/DB] - dbeaver 설치 및 Oracle 21c XE 연결

 

dbeaver 설치 및 Oracle 21c XE 연결

안녕하세요. 지난번에는 오라클 DB(Oracle 21c XE)를 로컬 PC에 설치하였고 SQL 질의를 작성하기 위한 툴 중에서 오라클 제품인 SQL Developer 를 설치하여 보았습니다. 오라클 설치 과정은 아래글을 참고

pandajeytv.tistory.com

2022.03.22 - [SW교육/DB] - 오라클 Oracle Database 21c Express Edition for Windows 설치

 

오라클 Oracle Database 21c Express Edition for Windows 설치

오늘은 오라클을 설치해보도록 하겠습니다. 오라클로 SQL를 실습해보기 위해서 인데요. 설치는 너무나 오랜만입니다. 오라클 21c XE for Windows 설치 이번에 제가 설치할 버전은 오라클 Oracle Database 2

pandajeytv.tistory.com

2020.12.21 - [SW교육/DB] - [DB]오라클 설치를 위한 계정 가입 방법

 

[DB]오라클 설치를 위한 계정 가입 방법

'즐거운 코딩 생활'  은 '꿈꾸는 판다' 블로그의 프로그래밍 언어 관련 카테고리에서 사용하는 부 캐릭터 입니다. '즐거운 코딩 생활' 은 프로그래밍 언어 초심자를 위한 쉬운 내용과 함께

pandajeytv.tistory.com

 

반응형

댓글

Designed by JB FACTORY