-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathcl.sql
More file actions
167 lines (143 loc) · 6.03 KB
/
cl.sql
File metadata and controls
167 lines (143 loc) · 6.03 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
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
-- ========================================
-- CloudCraft Database Schema V2
-- AWS 학습 플랫폼 데이터베이스 스키마
-- ========================================
-- ========================================
-- 기본 테이블
-- ========================================
-- 사용자 테이블
CREATE TABLE `user` (
`id` int PRIMARY KEY AUTO_INCREMENT,
`email` varchar(255) UNIQUE NOT NULL,
`created_at` datetime DEFAULT CURRENT_TIMESTAMP,
`updated_at` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
-- 문제 테이블
CREATE TABLE `problem` (
`id` int PRIMARY KEY AUTO_INCREMENT,
`problem_type` ENUM('unit', 'cookbook', 'scenario') NOT NULL COMMENT '문제 유형',
`service_type` varchar(50) NOT NULL COMMENT 'AWS 서비스 종류 (ec2, s3, vpc 등)',
`title` varchar(255) NOT NULL,
`description` text NOT NULL,
`difficulty` ENUM('beginner', 'intermediate', 'advanced') NOT NULL COMMENT '난이도',
`estimated_time` int COMMENT '예상 소요 시간(분)',
`created_at` datetime DEFAULT CURRENT_TIMESTAMP,
`updated_at` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
-- 솔루션 테이블
CREATE TABLE `solution` (
`id` int PRIMARY KEY AUTO_INCREMENT,
`problem_id` int NOT NULL,
`config_type` varchar(50) NOT NULL COMMENT '설정 유형',
`config_info` JSON NOT NULL COMMENT '전체 정답 구성',
`created_at` datetime DEFAULT CURRENT_TIMESTAMP,
`updated_at` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
-- 치트시트 테이블
CREATE TABLE `cheetsheet` (
`id` int PRIMARY KEY AUTO_INCREMENT,
`title` varchar(255),
`description` text,
`created_at` datetime DEFAULT CURRENT_TIMESTAMP,
`updated_at` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
-- ========================================
-- Cookbook/Unit 구조 테이블
-- ========================================
-- Cookbook 문제 구성 테이블
CREATE TABLE `cookbook_composition` (
`id` int PRIMARY KEY AUTO_INCREMENT,
`cookbook_id` int NOT NULL COMMENT 'Cookbook 문제 ID',
`unit_problem_id` int NOT NULL COMMENT '포함된 Unit 문제 ID',
`step_order` int NOT NULL COMMENT '단계 순서',
`is_required` boolean DEFAULT true COMMENT '필수 단계 여부',
UNIQUE KEY `unique_cookbook_step` (`cookbook_id`, `step_order`)
);
-- 문제 입력 필드 테이블
CREATE TABLE `problem_field` (
`id` int PRIMARY KEY AUTO_INCREMENT,
`problem_id` int NOT NULL,
`field_order` int NOT NULL COMMENT '필드 표시 순서',
`field_key` varchar(100) NOT NULL COMMENT '프로그래밍 key (예: instanceType)',
`field_label` varchar(255) NOT NULL COMMENT 'UI 라벨 (예: 인스턴스 타입)',
`ui_component` ENUM('select', 'input', 'checkbox', 'radio', 'textarea', 'multi-select') NOT NULL,
`options` JSON COMMENT 'select/radio의 선택지 배열',
`placeholder` varchar(255),
`help_text` text COMMENT '필드 설명',
`is_required` boolean DEFAULT true,
UNIQUE KEY `unique_problem_field` (`problem_id`, `field_key`)
);
-- 필드 검증 테이블
CREATE TABLE `field_validation` (
`id` int PRIMARY KEY AUTO_INCREMENT,
`field_id` int NOT NULL,
`validation_type` ENUM('exact', 'regex', 'graph', 'custom') NOT NULL COMMENT '검증 타입',
`validation_config` JSON NOT NULL COMMENT '검증 설정',
`success_message` text,
`error_message` text NOT NULL,
`hint` text COMMENT '힌트'
);
-- ========================================
-- 다이어그램 관련 테이블
-- ========================================
-- 다이어그램 템플릿 테이블 (선택적)
CREATE TABLE `diagram_template` (
`id` int PRIMARY KEY AUTO_INCREMENT,
`service_type` varchar(50) NOT NULL COMMENT '서비스 종류',
`layout_config` JSON COMMENT 'React Flow 레이아웃 설정',
`node_rules` JSON COMMENT '노드 생성 규칙',
`edge_rules` JSON COMMENT '엣지 생성 규칙',
UNIQUE KEY `unique_service_template` (`service_type`)
);
-- ========================================
-- 기존 관계 테이블 (유지)
-- ========================================
-- 치트시트-문제 매핑 테이블
CREATE TABLE `cheetsheet_problem` (
`cheetsheet_id` int,
`problem_id` int,
`problem_number` int COMMENT '치트시트 내 문제 순서',
PRIMARY KEY (`cheetsheet_id`, `problem_id`)
);
-- 관련 문제 매핑 테이블
CREATE TABLE `related_problem` (
`problem_id` int,
`related_problem_id` int,
PRIMARY KEY (`problem_id`, `related_problem_id`)
);
-- ========================================
-- Foreign Key 제약 조건
-- ========================================
-- solution FK
ALTER TABLE `solution`
ADD CONSTRAINT `FK_solution_problem`
FOREIGN KEY (`problem_id`) REFERENCES `problem` (`id`) ON DELETE CASCADE;
-- cookbook_composition FK
ALTER TABLE `cookbook_composition`
ADD CONSTRAINT `FK_cookbook_composition_cookbook`
FOREIGN KEY (`cookbook_id`) REFERENCES `problem` (`id`) ON DELETE CASCADE;
ALTER TABLE `cookbook_composition`
ADD CONSTRAINT `FK_cookbook_composition_unit`
FOREIGN KEY (`unit_problem_id`) REFERENCES `problem` (`id`) ON DELETE CASCADE;
-- problem_field FK
ALTER TABLE `problem_field`
ADD CONSTRAINT `FK_problem_field_problem`
FOREIGN KEY (`problem_id`) REFERENCES `problem` (`id`) ON DELETE CASCADE;
-- field_validation FK
ALTER TABLE `field_validation`
ADD CONSTRAINT `FK_field_validation_field`
FOREIGN KEY (`field_id`) REFERENCES `problem_field` (`id`) ON DELETE CASCADE;
-- related_problem FK
ALTER TABLE `related_problem`
ADD CONSTRAINT `FK_related_problem_problem`
FOREIGN KEY (`problem_id`) REFERENCES `problem` (`id`) ON DELETE CASCADE;
ALTER TABLE `related_problem`
ADD CONSTRAINT `FK_related_problem_related`
FOREIGN KEY (`related_problem_id`) REFERENCES `problem` (`id`) ON DELETE CASCADE;
-- cheetsheet_problem FK
ALTER TABLE `cheetsheet_problem`
ADD CONSTRAINT `FK_cheetsheet_problem_cheetsheet`
FOREIGN KEY (`cheetsheet_id`) REFERENCES `cheetsheet` (`id`) ON DELETE CASCADE;
ALTER TABLE `cheetsheet_problem`
ADD CONSTRAINT `FK_cheetsheet_problem_problem`
FOREIGN KEY (`problem_id`) REFERENCES `problem` (`id`) ON DELETE CASCADE;