Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Gym Management Database

헬스장 운영 서비스를 위한 관계형 데이터베이스 설계 프로젝트이다.

회원 관리, 트레이너 관리, PT 수업 예약, 리뷰 시스템, 상품 주문 기능을 지원하는 데이터 모델을 설계하고 MySQL 기반으로 구현하였다.

데이터 무결성을 유지하기 위해 Foreign Key와 Cascade 정책을 적용하였으며, 검색 성능 향상을 위해 Index 및 Fulltext Index를 설계하였다.


Project Overview

헬스장 플랫폼 서비스(예: Gymbox)를 가정하고
헬스장 운영에 필요한 기능을 하나의 데이터베이스에서 통합 관리할 수 있도록 설계한 프로젝트이다.

이 데이터베이스는 다음 기능을 지원한다.

  • 사용자 계정 관리
  • 헬스장 및 트레이너 정보 관리
  • PT 수업 예약 관리
  • 헬스장 및 트레이너 리뷰 관리
  • 헬스장 상품 주문 관리

서비스에서 발생하는 다양한 데이터 관계를 고려하여
정규화된 테이블 구조와 Foreign Key 기반 관계를 설계하였다.

또한 실제 서비스 환경을 고려하여 다음과 같은 설계를 적용하였다.

  • Index 기반 조회 성능 개선
  • Fulltext Index 기반 텍스트 검색
  • Cascade 정책을 통한 데이터 무결성 유지

Why This Project

최근 헬스장 서비스는 단순한 운동 공간 제공을 넘어 다양한 기능을 하나의 플랫폼에서 제공하고 있다.

예를 들어 집박스(Gymbox) 와 같은 서비스에서는 다음 기능을 제공한다.

  • 헬스장 정보 조회
  • 트레이너 정보 조회
  • PT 수업 예약
  • 헬스장 및 트레이너 리뷰
  • 헬스장 상품 주문

하지만 많은 헬스장들은 이러한 기능을 여러 시스템으로 분산 관리하는 경우가 많다.

이 프로젝트는 이러한 문제를 해결하기 위해 헬스장 운영에 필요한 주요 기능을 하나의 데이터베이스 구조로 통합 관리할 수 있도록 설계하는 것을 목표로 진행하였다.

특히 다음과 같은 서비스 흐름을 고려하여 데이터 모델을 설계하였다.

  • 사용자 기반 PT 수업 예약
  • 트레이너 일정 관리
  • 헬스장 리뷰 작성
  • 헬스장 상품 주문

이를 통해 실제 헬스장 플랫폼 서비스와 유사한 데이터 흐름을 반영한 관계형 데이터베이스 구조를 설계하였다.


Database Architecture (ERD)

ERD

주요 엔티티 관계

  • User → Orders : 1:N
  • Orders → Order_Item : 1:N
  • Gym → Trainer : 1:N
  • Trainer → Trainer_Schedule : 1:N
  • User → Lesson_Schedule : 1:N
  • Gym / Trainer → Review : 1:N

Core Schema Design

User

사용자 계정 정보

Column Description
id 사용자 ID
user_name 사용자 이름
password 비밀번호
role 사용자 권한

Gym

헬스장 정보

Column Description
id 헬스장 ID
address 헬스장 주소
open_time 오픈 시간
close_time 마감 시간

Trainer

트레이너 정보

Column Description
id 트레이너 ID
gym_id 소속 헬스장
name 트레이너 이름
introduction 트레이너 소개

Orders

상품 주문 정보

Column Description
id 주문 ID
user_id 주문 사용자
total_price 총 가격
progress_status 주문 상태

Order_Item

주문 상품 상세 정보

Column Description
id 주문 상품 ID
order_id 주문 ID
item_id 상품 ID
total_price 상품 가격

Key SQL Features

사용자 주문 조회

SELECT u.user_name, o.id AS order_id, o.total_price
FROM user u
JOIN orders o ON u.id = o.user_id;

트레이너 예약 조회

SELECT t.name, l.date, l.start_time
FROM trainer t
JOIN lesson_schedule l
ON t.id = l.trainer_id;

헬스장 리뷰 조회

SELECT g.address, r.score, r.content
FROM gym g
JOIN gym_review r
ON g.id = r.gym_id;

Index Optimization

검색 성능 향상을 위해 다양한 Index를 적용하였다.

Fulltext Index

CREATE FULLTEXT INDEX idx_gym_address ON gym(address);
CREATE FULLTEXT INDEX idx_trainer_intro ON trainer(introduction);
CREATE FULLTEXT INDEX idx_gym_review_content ON gym_review(content);
CREATE FULLTEXT INDEX idx_trainer_review_content ON trainer_review(content);

텍스트 기반 검색 성능 향상을 위해 적용하였다.


일반 Index

CREATE INDEX idx_gym_open_close_time ON gym(open_time, close_time);
CREATE INDEX idx_item_price ON item(price);

조회 성능 개선을 위해 적용하였다.


Data Integrity Design

데이터 무결성을 유지하기 위해 Foreign Key와 Cascade 정책을 적용하였다.

FOREIGN KEY (user_id) REFERENCES user(id) ON DELETE CASCADE

사용자가 삭제될 경우 다음 데이터가 함께 삭제되도록 설계하였다.

  • 리뷰
  • 주문
  • PT 예약 정보

이를 통해 데이터 일관성을 유지하고 관리 복잡도를 줄일 수 있도록 설계하였다.


What I Learned

이 프로젝트를 통해 서비스 기반 데이터베이스 설계 과정과 SQL 활용 능력을 실습 중심으로 학습하였다.

1. 서비스 기반 데이터 모델링

실제 헬스장 플랫폼 서비스를 가정하고 다음과 같은 관계를 설계하였다.

  • User → Orders (1:N)
  • Orders → Order_Item (1:N)
  • Gym → Trainer (1:N)
  • Trainer → Trainer_Schedule (1:N)
  • User → Lesson_Schedule (1:N)

특히 Order와 Item 사이의 관계를 Order_Item 테이블로 분리하여 다대다 관계를 해결하는 구조를 설계하였다.


2. 데이터 무결성 설계

Foreign Key와 Cascade 정책을 적용하여 데이터 무결성을 유지하는 구조를 설계하였다.

사용자가 삭제될 경우 관련 데이터가 자동으로 삭제되도록 설계하여 데이터 일관성을 유지할 수 있도록 하였다.


3. Index 기반 성능 최적화

조회 성능을 개선하기 위해 Index를 적용하였다.

  • gym(open_time, close_time)
  • item(price)

또한 텍스트 검색 기능을 위해 Fulltext Index를 적용하였다.

  • gym 주소 검색
  • 트레이너 소개 검색
  • 리뷰 내용 검색

이를 통해 Index가 쿼리 성능에 미치는 영향을 이해할 수 있었다.


4. SQL 기반 데이터 처리

다양한 SQL 기능을 활용하여 데이터를 처리하였다.

  • JOIN을 활용한 관계 데이터 조회
  • CRUD 쿼리 구현
  • Foreign Key 기반 데이터 연결
  • Index를 활용한 검색 최적화

이를 통해 여러 테이블 간의 관계 데이터를 효율적으로 조회하는 방법을 익힐 수 있었다.


5. 데이터베이스 설계 과정 이해

단순히 테이블을 만드는 것이 아니라 다음 과정을 거쳐 데이터베이스를 설계했다.

  1. 서비스 요구사항 분석
  2. 엔티티 및 관계 정의
  3. ERD 설계
  4. 테이블 구조 설계
  5. SQL 기반 구현

이 과정을 통해 데이터베이스 설계의 전체 흐름을 경험할 수 있었다.


Tech Stack

  • MySQL
  • MySQL Workbench
  • SQL

About

헬스장 통합 관리 플랫폼을 위한 RDB 설계 및 구현 프로젝트

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors