Post

02 테이블 변경

02 테이블 변경

1. 주요기능

  • 항공편 검색 및 예약
  • 항공편 예약 확인
  • 항공편 출도착 조회
  • 이벤트 조회 및 쿠폰 발급

2. Note

  • 상황
    • View와 SpringBoot 기초 데이터를 만들어서 항공편 조회 기능을 구현을 완료함.
    • 항공편 테스트 케이스를 500건으로 만들고 다른 화면에서 작업을 진행하려고 했으나, 건수가 굉장히 많아지고 데이터자체가 불필요한게 많아서 리소스가 소모되는 것을 확인.
  • 변경
    • flights의 항공 ID별 좌석을 airplane_seats 테이블에 저장을 했으나, flights에서 aircrafts의 항공편 종류를 참조하는 것으로 변경함.
    • 테이블 조회하는 첫 단계라 영향도가 작아서 그냥 테이블 구조 변경함.

3. 테이블 구성

1. 테이블 종류

변경구분테이블명기능설명비고
V1차flights항공편 기본 정보 관리출발지, 도착지, 출도착 시간 등 항공편의 기본 정보를 저장모든 예약·좌석·운항상태의 기준 테이블
 1차flight_status항공편 운항 상태 관리특정 항공편의 운항 상태(예정, 지연, 취소 등)와 지연 시간, 최종 업데이트 시각을 관리flights 테이블과 1:1 관계 (flight_id 기준)
V1차aircrafts항공기별 좌석 정보 관리항공편별 좌석 등급(이코노미, 비즈니스 등)과 총 좌석 수를 저장flights 테이블과 N:1 관계
 1차users사용자 정보 관리회원의 로그인 정보, 연락처, 이메일 등 사용자 계정을 관리reservations 테이블과 1:N 관계
 1차reservations항공편 예약 정보 관리유저가 항공편을 예약할 때 생성되는 예약 내역을 관리 (승객정보, 좌석등급, 예약상태 등 포함)flights, users 모두 참조 (N:1 관계)
 2차events이벤트 정보 관리프로모션이나 할인 이벤트 정보를 관리하는 테이블쿠폰과 1:N 관계 예상
 2차coupons쿠폰 정보 관리쿠폰 코드, 할인율, 만료일 등의 정보를 저장user_coupons 테이블과 1:N 관계
 2차user_coupons사용자별 쿠폰 발급 관리어떤 사용자가 어떤 쿠폰을 발급받았는지를 관리users, coupons 참조 (N:1 관계)

2. 테이블 관계

기능 단계주요 테이블 간 관계설명
항공편 검색flights ↔ airplane_seats항공편별 좌석 등급/수량 확인
예약 등록flights ↔ reservations ↔ users유저가 특정 항공편 예약 생성
예약 확인users ↔ reservations ↔ flights내 예약 조회, 상태 확인
출도착 조회flights ↔ flight_status항공편 운항상태(지연, 취소 등) 확인
쿠폰/이벤트users ↔ user_coupons ↔ coupons ↔ events유저별 이벤트 참여 및 할인 처리

4. 변경

1. flights (비행기 노선 정보)

1
2
3
4
5
6
7
8
9
10
11
12
  CREATE TABLE flights.flights (
      flight_id BIGSERIAL PRIMARY KEY,
      flight_number VARCHAR(20) NOT NULL,
      aircraft_id BIGINT NOT NULL,
      departure_airport VARCHAR(50) NOT NULL,
      arrival_airport VARCHAR(50) NOT NULL,
      departure_time TIMESTAMP NOT NULL,
      arrival_time TIMESTAMP NOT NULL,
      CONSTRAINT fk_flight_aircraft FOREIGN KEY (aircraft_id)
          REFERENCES flights.aircrafts (aircraft_id)
          ON DELETE RESTRICT
  );

2. aircrafts (항공기 종류 + 좌석 구성 포함)

1
2
3
4
5
6
7
8
9
10
11
  CREATE TABLE flights.aircrafts (
      aircraft_id BIGSERIAL PRIMARY KEY,   -- 항공기 ID
      aircraft_code VARCHAR(20) UNIQUE,    -- 항공기 코드 (예: A321)
      model_name VARCHAR(50) NOT NULL,     -- 모델명
      manufacturer VARCHAR(50),            -- 제조사
      economy_seats INT NOT NULL,          -- 이코노미 좌석 수
      business_seats INT DEFAULT 0,        -- 비즈니스 좌석 수
      first_seats INT DEFAULT 0,           -- 퍼스트 클래스 좌석 수
      total_capacity INT GENERATED ALWAYS AS 
          (economy_seats + business_seats + first_seats) STORED
  );

2. ERD

내 그림

This post is licensed under CC BY 4.0 by the author.