728x90

국내에서 상영되는 모든 영화의 리스트와 전국 극장의 실적을 체계적으로 관리하기 위한 관계형 데이터베이스(RDBMS) 설계 과정을 공유합니다. 이번 설계는 확장성, 데이터 무결성, 그리고 사용자 역할에 따른 보안을 핵심 가치로 삼았습니다.
1. 지역 마스터 및 제작사 설계
가장 먼저 데이터의 일관성을 위해 지역 정보와 영화 제작사 정보를 별도 마스터 테이블로 분리했습니다. 지역은 3자리 코드를 사용하여 관리 효율을 높였습니다.
CREATE TABLE region_code (
region_id CHAR(3) PRIMARY KEY NOT NULL COMMENT '지역 고유 코드',
region_large VARCHAR(50) NOT NULL COMMENT '광역 지자체',
region_small VARCHAR(50) NOT NULL COMMENT '기초 지자체',
del_yn CHAR(1) NOT NULL DEFAULT 'N' COMMENT '삭제 여부'
) COMMENT='지역 정보 마스터 테이블';
CREATE TABLE production_companies (
company_id INT PRIMARY KEY AUTO_INCREMENT NOT NULL COMMENT '제작사 번호',
company_name VARCHAR(100) NOT NULL UNIQUE COMMENT '제작사 명칭',
country VARCHAR(50) NOT NULL COMMENT '제작사 국적',
del_yn CHAR(1) NOT NULL DEFAULT 'N' COMMENT '삭제 여부'
) COMMENT='제작사 마스터 테이블';
2. 영화 및 극장 인프라 설계
영화 정보를 담는 play_movie 테이블과 전국 극장의 상세 정보를 관리하는 theater, theater_screen 테이블입니다. 각 극장마다 상영관 타입에 따른 요금을 다르게 설정할 수 있도록 theater_price 테이블을 별도로 구성했습니다.
CREATE TABLE play_movie (
movie_id INT PRIMARY KEY AUTO_INCREMENT NOT NULL COMMENT '영화 번호',
title_kr VARCHAR(255) NOT NULL COMMENT '한글 제목',
release_date DATE NOT NULL COMMENT '개봉일',
company_id INT COMMENT '제작사 번호',
del_yn CHAR(1) NOT NULL DEFAULT 'N',
FOREIGN KEY (company_id) REFERENCES production_companies(company_id)
) COMMENT='영화 상세 정보 테이블';
CREATE TABLE theater_screen (
screen_id INT PRIMARY KEY AUTO_INCREMENT NOT NULL COMMENT '상영관 번호',
theater_id INT NOT NULL COMMENT '극장 번호',
screen_name VARCHAR(50) NOT NULL COMMENT '관 명칭',
screen_type VARCHAR(50) DEFAULT '일반관' COMMENT '관 타입',
total_seats INT NOT NULL DEFAULT 0 COMMENT '총 좌석수',
del_yn CHAR(1) NOT NULL DEFAULT 'N',
FOREIGN KEY (theater_id) REFERENCES theater(theater_id)
) COMMENT='극장별 상영관 상세 테이블';
3. 실적 집계 및 권한 관리
영진위 시스템의 핵심인 회차별 실적 집계 테이블입니다. 조조부터 심야까지의 관객수와 매출을 기록하며, 유저 테이블의 역할을 통해 관리자, 극장주, 영화사, 일반사용자의 데이터 접근 범위를 제한합니다.
CREATE TABLE movie_session_stats (
stat_id BIGINT PRIMARY KEY AUTO_INCREMENT NOT NULL COMMENT '집계 번호',
play_date DATE NOT NULL COMMENT '상영 일자',
theater_id INT NOT NULL COMMENT '극장 번호',
screen_id INT NOT NULL COMMENT '상영관 번호',
movie_id INT NOT NULL COMMENT '영화 번호',
session_type ENUM('조조', '1회', '2회', '3회', '4회', '5회', '6회', '7회', '8회', '9회', '심야') NOT NULL,
adult_audience_cnt INT DEFAULT 0 COMMENT '성인 관객수',
youth_audience_cnt INT DEFAULT 0 COMMENT '청소년 관객수',
total_sales_amount BIGINT DEFAULT 0 COMMENT '매출액',
del_yn CHAR(1) NOT NULL DEFAULT 'N',
FOREIGN KEY (theater_id) REFERENCES theater(theater_id),
FOREIGN KEY (screen_id) REFERENCES theater_screen(screen_id),
FOREIGN KEY (movie_id) REFERENCES play_movie(movie_id)
) COMMENT='회차별 관객 집계 테이블';
728x90
'IT 개발,관리,연동,자동화' 카테고리의 다른 글
| NestJS를 활용한 MQTT, Modbus 기반 실시간 데이터 수집 및 처리 시스템 구축 가이드 (1) | 2025.12.18 |
|---|---|
| MariaDB MCP 서버: 이제 데이터베이스와 직접 대화하세요 (0) | 2025.12.17 |
| 🛠️ NestJS 컨트롤러에 HATEOAS 적용 (수정된 danme-calc.controller.ts) (0) | 2025.12.11 |
| 📝 YAML의 꽃, 앵커(&)와 별칭(*)로 설정 파일 중복 제거하기 (0) | 2025.12.10 |
| 🔗 HATEOAS (Hypermedia As The Engine Of Application State) 상세 설명 (0) | 2025.12.10 |