본문 바로가기

파이썬으로 로또 1등 도전기

12일차) 로또 예측 데이터베이스 구조 만들기

안녕하세요! 오늘은 로또 번호를 예측하는 데이터베이스 구조를 만들어볼 건데요, 복잡해 보일 수 있지만 아주 쉽게 설명해 드릴게요. 한 번 시작해 볼까요?

---

### 1. **로또 룰 테이블 만들기**

우리가 먼저 정의할 것은 **로또 룰**이에요. 로또 번호를 예측하기 위한 다양한 규칙을 여기에 담아두고 사용할 거예요. 테이블 이름은 `lotto_rules`이고요, 규칙의 이름, 조건, 보너스 포함 여부 등 여러 가지 정보를 담습니다.

-- 로또 룰 테이블: 로또 규칙을 저장하는 테이블입니다.
CREATE TABLE `lotto_rules` (
  `id` int NOT NULL AUTO_INCREMENT,               -- 규칙 고유 ID
  `rule_name` varchar(50) DEFAULT NULL,           -- 규칙 이름
  `condition_type` varchar(20) DEFAULT NULL,      -- 조건 타입 (어떤 규칙에 기반할지)
  `order_sequence` varchar(10) DEFAULT NULL,      -- 번호 순서
  `bonus_included` tinyint(1) DEFAULT NULL,       -- 보너스 번호 포함 여부 (1이면 포함, 0이면 미포함)
  `lotto_round` varchar(10) DEFAULT NULL,         -- 로또 회차 정보
  `pre_lotto_round` VARCHAR(10) DEFAULT NULL,     -- 이전 로또 회차 정보 (과거 회차 분석용)
  `description` text,                             -- 규칙에 대한 설명
  PRIMARY KEY (`id`)                              -- ID를 기본 키로 설정 (자동 증가)
);



- **규칙 고유 ID**: 각 규칙을 식별하기 위한 고유 번호!
- **보너스 번호 포함 여부**: 보너스 번호를 포함할지 말지 결정하는 옵션입니다. 
- **이전 로또 회차**: 과거 데이터를 참고해서 예측하려면 필요하겠죠?

이 테이블은 규칙에 따라 어떤 조건을 사용해서 번호를 예측할지 정보를 모아두는 역할을 합니다.

---

### 2. **로또 룰 넘버 테이블**

다음으로 **로또 룰에 따른 번호 리스트**를 저장하는 테이블을 만들 거예요. 이 테이블은 어떤 규칙이 어떤 회차에 적용되었는지, 그리고 그 규칙에 따른 번호 리스트와 정확도를 기록해 둡니다.

-- 로또 룰 넘버: 규칙에 따라 예측된 번호를 저장하는 테이블입니다.
CREATE TABLE lotto_rule_numbers ( 
    seq INT AUTO_INCREMENT PRIMARY KEY,  -- 고유 시퀀스 번호 (자동 증가)
    target_lotto_round INT NOT NULL,     -- 목표 로또 회차 (몇 회차에 해당하는지)
    lotto_rule_id INT NOT NULL,          -- 로또 룰 테이블의 ID를 참조 (어떤 규칙인지)
    rule_list VARCHAR(500) NOT NULL,     -- 규칙에 따라 제외된 번호 리스트 (콤마로 구분된 문자열)
    lotto_lucky_seq INT NOT NULL,        -- 예상된 번호 시퀀스
    percent DECIMAL(5, 2) NOT NULL,      -- 제외수 정확도 (퍼센트로)
    FOREIGN KEY (lotto_rule_id) REFERENCES lotto_rules(id)  -- lotto_rules 테이블과 연결 (외래 키)
);



- **시퀀스 번호**: 각 예측 번호에 대한 고유 번호입니다.
- **제외된 번호 리스트**: 이 규칙으로 예측할 때 제외된 번호들이 여기 기록됩니다. 
- **정확도**: 이 규칙이 얼마나 잘 맞았는지 퍼센트로 기록!

이 테이블은 우리가 만든 규칙이 실제로 어떻게 번호를 예측했는지 그 결과를 보여줍니다.

---

### 3. **로또 예상 번호 테이블**

마지막으로 **로또 예상 번호 테이블**을 만들 거예요. 여기서는 실제로 예측된 번호와 당첨 여부를 저장합니다.

-- 로또 예상 번호: 예측된 번호와 당첨 여부를 기록하는 테이블입니다.
CREATE TABLE lotto_lucky_numbers (
    seq INT AUTO_INCREMENT PRIMARY KEY,  -- 고유 시퀀스 번호 (자동 증가)
    target_lotto_round INT NOT NULL,     -- 목표 로또 회차
    lucky_numbers VARCHAR(100) NOT NULL, -- 예상된 번호 리스트 (콤마로 구분된 문자열)
    lotto_rank SMALLINT,                 -- 당첨 등수 (몇 등에 당첨됐는지)
    lucky_yn CHAR(1) NOT NULL,           -- 당첨 여부 (Y/N)
    lotto_rule_number_seq INT NOT NULL,  -- 로또 룰 넘버 테이블의 시퀀스 번호를 참조
    FOREIGN KEY (lotto_rule_number_seq) REFERENCES lotto_rule_numbers(seq)  -- 외래 키로 연결
);



- **예상된 번호 리스트**: 우리가 예측한 번호들이 여기에 기록돼요.
- **당첨 여부**: 이 번호가 당첨되었는지 여부를 `Y` 또는 `N`으로 기록합니다.

---

### 마무리!

이렇게 **로또 예측 데이터베이스**를 만들어봤는데요! 규칙을 만들고, 그 규칙에 따라 예측한 번호를 저장하고, 당첨 여부까지 기록할 수 있는 구조가 완성되었습니다. 복잡해 보이지만, 하나씩 따라가다 보면 꽤 재미있죠?

여러분도 한번 데이터를 넣어보며 직접 돌려보세요. 데이터베이스에서 로또 번호를 예측하다 보면, 언젠가 진짜로 1등에 당첨될지도 몰라요! 😄