Files
Genesis_GameServer/GameServer/sql/portfolio_schema.sql
2026-09-03 19:18:46 +09:00

62 lines
3.2 KiB
SQL

-- =============================================================
-- 포트폴리오 스키마 참조 파일 (MariaDB / utf8mb4)
-- 실제 생성은 서버 기동 시 Data/PortfolioSchemaInitializer.cs 가 담당한다.
-- 이 파일은 수동 배포·점검용 사본이며, 몇 번을 실행해도 안전하다(멱등).
-- - 테이블: CREATE TABLE IF NOT EXISTS
-- - 시드 : INSERT IGNORE (slug 유니크 키로 중복 삽입 차단)
-- created_at / updated_at 은 애플리케이션이 DateTime.UtcNow 로 직접 기록한다.
-- (ON UPDATE CURRENT_TIMESTAMP 에 의존하지 않는다.)
-- =============================================================
CREATE TABLE IF NOT EXISTS tb_portfolio_category (
category_no INT AUTO_INCREMENT PRIMARY KEY,
slug VARCHAR(64) NOT NULL,
name VARCHAR(100) NOT NULL,
description VARCHAR(255) NULL,
accent VARCHAR(32) NULL,
sort_order INT NOT NULL DEFAULT 0,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
UNIQUE KEY uk_portfolio_category_slug (slug)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS tb_portfolio_post (
post_no INT AUTO_INCREMENT PRIMARY KEY,
category_no INT NOT NULL,
title VARCHAR(200) NOT NULL,
summary VARCHAR(500) NULL,
content_md MEDIUMTEXT NULL,
thumbnail_url VARCHAR(500) NULL,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
KEY ix_portfolio_post_category (category_no),
CONSTRAINT fk_portfolio_post_category FOREIGN KEY (category_no)
REFERENCES tb_portfolio_category (category_no) ON DELETE RESTRICT
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS tb_portfolio_post_image (
image_no INT AUTO_INCREMENT PRIMARY KEY,
post_no INT NOT NULL,
image_url VARCHAR(500) NOT NULL,
caption VARCHAR(255) NULL,
sort_order INT NOT NULL DEFAULT 0,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
KEY ix_portfolio_post_image_post (post_no),
CONSTRAINT fk_portfolio_post_image_post FOREIGN KEY (post_no)
REFERENCES tb_portfolio_post (post_no) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- -------------------------------------------------------------
-- 기본 카테고리 시드 (재실행해도 중복되지 않음)
-- -------------------------------------------------------------
INSERT IGNORE INTO tb_portfolio_category (slug, name, description, accent, sort_order, created_at)
VALUES ('game', '게임', 'Unity 게임 프로젝트', '#7c5cff', 1, UTC_TIMESTAMP());
INSERT IGNORE INTO tb_portfolio_category (slug, name, description, accent, sort_order, created_at)
VALUES ('dev', '개발', '서버 · 툴 · 시스템', '#20d5c4', 2, UTC_TIMESTAMP());
INSERT IGNORE INTO tb_portfolio_category (slug, name, description, accent, sort_order, created_at)
VALUES ('art', '아트', '그래픽 · UI · 연출', '#ff5c9a', 3, UTC_TIMESTAMP());
INSERT IGNORE INTO tb_portfolio_category (slug, name, description, accent, sort_order, created_at)
VALUES ('log', '기록', '작업 일지와 회고', '#ffb74d', 4, UTC_TIMESTAMP());