-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcreate_database.sql
More file actions
122 lines (106 loc) · 4.55 KB
/
create_database.sql
File metadata and controls
122 lines (106 loc) · 4.55 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
-- MySQL 데이터베이스 생성 스크립트
-- 이 스크립트를 MySQL에서 실행하여 데이터베이스를 생성합니다.
CREATE DATABASE IF NOT EXISTS mafia_game
DEFAULT CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
USE mafia_game;
-- Users 테이블
CREATE TABLE IF NOT EXISTS users (
id VARCHAR(255) PRIMARY KEY,
nickname VARCHAR(255) NOT NULL UNIQUE,
joined_at TIMESTAMP,
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
INDEX idx_nickname (nickname)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- Rooms 테이블
CREATE TABLE IF NOT EXISTS rooms (
id VARCHAR(255) PRIMARY KEY,
name VARCHAR(255) NOT NULL,
max_players INT NOT NULL DEFAULT 8,
status VARCHAR(50) NOT NULL DEFAULT 'AVAILABLE',
host_user_id VARCHAR(255) NOT NULL,
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
INDEX idx_status (status),
INDEX idx_host (host_user_id),
FOREIGN KEY (host_user_id) REFERENCES users(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- Room Members 테이블
CREATE TABLE IF NOT EXISTS room_members (
id VARCHAR(255) PRIMARY KEY,
room_id VARCHAR(255) NOT NULL,
user_id VARCHAR(255) NOT NULL,
role VARCHAR(50) NOT NULL,
game_role VARCHAR(50),
is_alive BOOLEAN,
joined_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
UNIQUE KEY unique_room_user (room_id, user_id),
INDEX idx_room_id (room_id),
INDEX idx_user_id (user_id),
FOREIGN KEY (room_id) REFERENCES rooms(id) ON DELETE CASCADE,
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- Games 테이블
CREATE TABLE IF NOT EXISTS games (
id VARCHAR(255) PRIMARY KEY,
room_id VARCHAR(255) NOT NULL,
current_phase VARCHAR(50) NOT NULL,
day_count INT NOT NULL DEFAULT 1,
phase_start_time TIMESTAMP NOT NULL,
phase_duration_seconds INT NOT NULL,
winner_team VARCHAR(50),
started_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
finished_at TIMESTAMP,
defendant_user_id VARCHAR(255),
INDEX idx_room_id (room_id),
INDEX idx_finished_at (finished_at),
FOREIGN KEY (room_id) REFERENCES rooms(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- Game Players 테이블
CREATE TABLE IF NOT EXISTS game_players (
id VARCHAR(255) PRIMARY KEY,
game_id VARCHAR(255) NOT NULL,
user_id VARCHAR(255) NOT NULL,
role VARCHAR(50) NOT NULL,
is_alive BOOLEAN NOT NULL DEFAULT TRUE,
position INT NOT NULL,
died_at TIMESTAMP,
UNIQUE KEY unique_game_user (game_id, user_id),
INDEX idx_game_id (game_id),
INDEX idx_user_id (user_id),
INDEX idx_game_alive (game_id, is_alive),
INDEX idx_game_role (game_id, role),
FOREIGN KEY (game_id) REFERENCES games(id) ON DELETE CASCADE,
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- Game Actions 테이블
CREATE TABLE IF NOT EXISTS game_actions (
id VARCHAR(255) PRIMARY KEY,
game_id VARCHAR(255) NOT NULL,
day_count INT NOT NULL,
phase VARCHAR(50) NOT NULL,
type VARCHAR(50) NOT NULL,
actor_user_id VARCHAR(255) NOT NULL,
target_user_id VARCHAR(255) NOT NULL,
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
INDEX idx_game_day_type (game_id, day_count, type),
INDEX idx_game_day_phase (game_id, day_count, phase),
INDEX idx_actor (actor_user_id),
INDEX idx_target (target_user_id),
FOREIGN KEY (game_id) REFERENCES games(id) ON DELETE CASCADE,
FOREIGN KEY (actor_user_id) REFERENCES users(id) ON DELETE CASCADE,
FOREIGN KEY (target_user_id) REFERENCES users(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- Chat Messages 테이블
CREATE TABLE IF NOT EXISTS chat_messages (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
context_id VARCHAR(255) NOT NULL,
user_id VARCHAR(255) NOT NULL,
chat_type VARCHAR(20) NOT NULL,
message TEXT NOT NULL,
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
INDEX idx_context_created (context_id, created_at),
INDEX idx_context_type (context_id, chat_type, created_at),
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;