# 적자 탈출 가계부 - 데이터베이스 스키마 요약 ## 개요 이 문서는 적자 탈출 가계부 애플리케이션의 데이터베이스 스키마를 요약합니다. 모든 테이블은 PostgreSQL 기반으로 설계되었으며, Supabase 환경에 최적화되어 있습니다. ## 기술적 특징 - **UUID 기반 기본 키**: 모든 테이블은 UUID 타입의 기본 키를 사용합니다. - **타임존 지원**: 날짜/시간 데이터는 `TIMESTAMP WITH TIME ZONE` 타입을 사용하여 국제적 사용을 지원합니다. - **정확한 금액 계산**: 모든 금액은 `DECIMAL(12, 2)` 타입을 사용하여 정확한 계산을 보장합니다. - **Row Level Security (RLS)**: 모든 테이블에 RLS 정책이 적용되어 사용자는 자신의 데이터만 접근할 수 있습니다. - **자동 생성 시간**: 모든 테이블은 `created_at`과 `updated_at` 필드를 포함하여 데이터 생성 및 수정 시간을 자동으로 기록합니다. - **계층적 카테고리**: 카테고리는 계층 구조를 지원하여 상위/하위 카테고리 관계를 표현할 수 있습니다. - **인덱스 최적화**: 자주 조회되는 필드에 인덱스를 적용하여 성능을 최적화했습니다. ## 테이블 구조 ### 1. users (01_users.sql) 사용자 정보를 관리하는 테이블입니다. - **주요 필드**: id, email, name, created_at, updated_at - **관련 함수**: 사용자 프로필 자동 생성 트리거 - **보안**: RLS 정책으로 사용자는 자신의 정보만 접근 가능 ### 2. categories (02_categories.sql) 지출/수입 카테고리를 관리하는 테이블입니다. - **주요 필드**: id, user_id, name, parent_id, type, icon, color, is_system - **계층 구조**: parent_id를 통해 상위/하위 카테고리 관계 표현 - **기본 데이터**: 15개 이상의 기본 카테고리와 하위 카테고리 제공 - **관련 함수**: 카테고리 계층 조회 함수 ### 3. expenses (03_expenses.sql) 지출/수입 내역을 관리하는 테이블입니다. - **주요 필드**: id, user_id, amount, is_income, category_id, card_id, date, memo - **관련 함수**: 월별 지출 합계, 카테고리별 지출 분석 함수 - **인덱스**: user_id, category_id, date에 인덱스 적용 ### 4. budgets (04_budgets.sql) 월별/카테고리별 예산을 관리하는 테이블입니다. - **주요 필드**: id, user_id, category_id, year, month, amount - **관련 함수**: 예산 대비 지출 비율 조회 함수 - **인덱스**: user_id, category_id, year, month에 인덱스 적용 ### 5. cards (05_cards.sql) 카드 정보를 관리하는 테이블입니다. - **주요 필드**: id, user_id, name, card_number, payment_day, is_active - **관련 함수**: 월별 카드 사용 현황 조회 함수 - **보안**: 카드 번호는 마스킹 처리 ### 6. limits (06_limits.sql) 지출 한도를 관리하는 테이블입니다. - **주요 필드**: id, user_id, card_id, category_id, amount, period, start_date, end_date - **관련 함수**: 활성화된 한도 및 사용량 조회 함수, 한도 경고 알림 트리거 - **제약 조건**: 카드 또는 카테고리 중 하나는 반드시 지정되어야 함 ### 7. templates (07_templates.sql) 자주 사용하는 지출/수입 템플릿을 관리하는 테이블입니다. - **주요 필드**: id, user_id, name, amount, is_income, category_id, card_id, usage_count - **관련 함수**: 템플릿 사용 카운터 증가, 템플릿으로 지출/수입 생성, 자주 사용하는 템플릿 조회 ### 8. notifications (08_notifications.sql) 알림 시스템을 관리하는 테이블입니다. - **주요 필드**: id, user_id, title, message, type, related_id, is_read, priority - **알림 타입**: limit_warning, budget_warning, payment_reminder, system_message, custom - **관련 함수**: 알림 읽음 표시, 사용자 알림 조회, 예산 초과 알림 생성, 카드 결제일 알림 생성 ### 9. analysis_settings (09_analysis_settings.sql) 사용자별 분석 설정을 관리하는 테이블입니다. - **주요 필드**: id, user_id, setting_key, setting_value (JSONB) - **설정 키**: dashboard_widgets, report_preferences, analysis_period, chart_colors 등 - **관련 함수**: 분석 설정 가져오기/저장, 기본 분석 설정 생성, 지출 분석 함수(카테고리별 지출 비율, 기간별 지출 추이) ## 마이그레이션 실행 방법 1. `run_migrations.sh` 스크립트를 사용하여 모든 마이그레이션 파일을 순서대로 실행합니다. 2. 환경 변수를 통해 데이터베이스 연결 정보를 설정할 수 있습니다. ```bash DB_HOST=localhost DB_PORT=5432 DB_NAME=mydb DB_USER=user DB_PASSWORD=pass ./run_migrations.sh ``` ## 확장 계획 - **데이터 동기화**: 여러 기기 간 데이터 동기화 메커니즘 구현 - **분석 기능 확장**: 고급 재무 분석 및 예측 기능 추가 - **성능 최적화**: 대량의 트랜잭션 데이터 처리를 위한 파티셔닝 및 인덱싱 최적화 - **API 엔드포인트**: RESTful API 및 GraphQL 엔드포인트 개발 ## 참고 사항 - 모든 SQL 파일은 `migrations` 디렉토리에 순서대로 번호가 매겨져 있습니다. - 각 테이블은 자체 SQL 파일에 정의되어 있어 관리가 용이합니다. - 트리거와 함수는 관련 테이블과 동일한 파일에 정의되어 있습니다.