-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathschema.sql
More file actions
476 lines (415 loc) · 16.9 KB
/
Copy pathschema.sql
File metadata and controls
476 lines (415 loc) · 16.9 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
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
-- 테이블이 존재할 경우 삭제
DROP TABLE IF EXISTS keep_song;
DROP TABLE IF EXISTS song_info;
DROP TABLE IF EXISTS artist;
DROP TABLE IF EXISTS keep_list;
DROP TABLE IF EXISTS member;
DROP TABLE IF EXISTS comment;
DROP TABLE IF EXISTS comment_like;
DROP TABLE IF EXISTS report;
DROP TABLE IF EXISTS song_review;
DROP TABLE IF EXISTS song_review_option;
-- member 테이블 생성
CREATE TABLE IF NOT EXISTS member (
member_id BIGINT AUTO_INCREMENT PRIMARY KEY,
nickname VARCHAR(255),
email VARCHAR(50) NOT NULL,
gender VARCHAR(20),
birthyear INT,
provider VARCHAR(20) NOT NULL,
UNIQUE(email, provider), -- 이메일과 제공자는 유니크하도록 설정
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
deleted_at TIMESTAMP NULL DEFAULT NULL
);
ALTER TABLE member MODIFY email VARCHAR(150);
-- keepList 테이블 생성
CREATE TABLE IF NOT EXISTS keep_list (
keep_list_id BIGINT AUTO_INCREMENT PRIMARY KEY,
member_id BIGINT NOT NULL,
keep_name VARCHAR(255),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
deleted_at TIMESTAMP NULL DEFAULT NULL
);
-- artistInfo 테이블 생성
CREATE TABLE IF NOT EXISTS artist (
artist_id BIGINT AUTO_INCREMENT PRIMARY KEY,
artist_name VARCHAR(255) NOT NULL,
artist_type VARCHAR(100),
related_artists TEXT,
country VARCHAR(255),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
deleted_at TIMESTAMP NULL DEFAULT NULL
);
-- songInfo 테이블 생성
CREATE TABLE IF NOT EXISTS song_info (
song_info_id BIGINT AUTO_INCREMENT PRIMARY KEY,
song_name VARCHAR(255) NOT NULL,
artist_id BIGINT,
artist_name VARCHAR(255) NOT NULL,
artist_type VARCHAR(100),
is_mr BOOLEAN DEFAULT FALSE,
is_chosen_22000 BOOLEAN DEFAULT FALSE,
related_artists TEXT,
country VARCHAR(255),
album VARCHAR(255),
song_number INT NOT NULL,
octave VARCHAR(10),
tj_link VARCHAR(255),
tags VARCHAR(255),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
deleted_at TIMESTAMP NULL DEFAULT NULL
);
ALTER TABLE song_info ADD COLUMN video_link TEXT;
-- keepSong 테이블 생성
CREATE TABLE IF NOT EXISTS keep_song (
keep_song_id BIGINT AUTO_INCREMENT PRIMARY KEY,
keep_list_id BIGINT NOT NULL,
song_info_id BIGINT NOT NULL,
song_number INT NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
deleted_at TIMESTAMP NULL DEFAULT NULL
);
CREATE TABLE IF NOT EXISTS song_review_option (
song_review_option_id BIGINT AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(100),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
deleted_at TIMESTAMP NULL DEFAULT NULL
);
CREATE TABLE IF NOT EXISTS song_review (
song_review_id BIGINT AUTO_INCREMENT PRIMARY KEY,
song_info_id BIGINT NOT NULL,
member_id BIGINT NOT NULL,
song_review_option_id BIGINT NOT NULL,
gender VARCHAR(20),
birthyear INT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
deleted_at TIMESTAMP NULL DEFAULT NULL
);
CREATE TABLE IF NOT EXISTS comment (
comment_id BIGINT AUTO_INCREMENT PRIMARY KEY,
parent_comment_id BIGINT,
song_info_id BIGINT NOT NULL,
member_id BIGINT NOT NULL,
content TEXT,
is_recomment BOOLEAN DEFAULT FALSE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
deleted_at TIMESTAMP NULL DEFAULT NULL
);
ALTER TABLE comment
ADD CONSTRAINT fk_member_id
FOREIGN KEY (member_id) REFERENCES member(member_id)
ON DELETE CASCADE ON UPDATE CASCADE;
CREATE TABLE IF NOT EXISTS comment_like (
comment_like_id BIGINT AUTO_INCREMENT PRIMARY KEY,
comment_id BIGINT NOT NULL,
member_id BIGINT NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
deleted_at TIMESTAMP NULL DEFAULT NULL
);
ALTER TABLE comment_like
ADD CONSTRAINT fk_comment_id
FOREIGN KEY (comment_id) REFERENCES comment(comment_id)
ON DELETE CASCADE ON UPDATE CASCADE;
CREATE TABLE IF NOT EXISTS report (
report_id BIGINT AUTO_INCREMENT PRIMARY KEY,
comment_id BIGINT NOT NULL,
reporter_member_id BIGINT NOT NULL,
subject_member_id BIGINT NOT NULL,
report_reason VARCHAR(255),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
deleted_at TIMESTAMP NULL DEFAULT NULL
);
ALTER TABLE comment ADD COLUMN likes int DEFAULT NULL;
ALTER TABLE comment MODIFY COLUMN likes int DEFAULT 0;
UPDATE comment SET likes = 0 WHERE likes IS NULL;
-- 현재 설정된 인덱스들
CREATE INDEX idx_song_info_song_number ON song_info(song_number);
CREATE INDEX idx_keep_list_member_id ON keep_list(member_id);
CREATE INDEX idx_keep_song_keep_list_id ON keep_song(keep_list_id);
CREATE INDEX idx_member_email_provider ON member(email, provider);
CREATE TABLE IF NOT EXISTS member_action (
member_action_id BIGINT AUTO_INCREMENT PRIMARY KEY,
member_id BIGINT NOT NULL,
gender VARCHAR(20),
birthyear INT,
song_info_id BIGINT NOT NULL,
action_type VARCHAR(20) NOT NULL,
action_score FLOAT NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
deleted_at TIMESTAMP NULL DEFAULT NULL
);
-- soft delete시 재가입을 고려하여 기존 (email, provider) 유니크 인덱스 삭제
ALTER TABLE member DROP INDEX email;
ALTER TABLE member
ADD not_archived BOOLEAN
GENERATED ALWAYS AS (IF(deleted_at IS NULL, 1, NULL)) VIRTUAL;
ALTER TABLE member
ADD CONSTRAINT UNIQUE (email, provider, not_archived);
-- song_review_option 테이블에 영어 enum 추가
ALTER TABLE song_review_option ADD COLUMN enum VARCHAR(20);
CREATE TABLE IF NOT EXISTS blacklist (
blacklist_id BIGINT AUTO_INCREMENT PRIMARY KEY,
blocker_member_id BIGINT NOT NULL,
blocked_member_id BIGINT NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
deleted_at TIMESTAMP NULL DEFAULT NULL
);
ALTER TABLE song_info ADD COLUMN melon_song_id VARCHAR(255);
UPDATE song_info SI
JOIN raw_song_info RSI ON SI.song_info_id = RSI.song_info_id
SET SI.melon_song_id = RSI.melon_song_id;
ALTER TABLE song_info ADD COLUMN is_live BOOLEAN DEFAULT FALSE;
ALTER TABLE song_info ADD UNIQUE INDEX (song_number, song_name, artist_name);
-- 커뮤니티 기능 추가
CREATE TABLE IF NOT EXISTS board (
board_id BIGINT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
deleted_at TIMESTAMP NULL DEFAULT NULL
);
INSERT INTO board (name) VALUES ('자유 게시판');
CREATE TABLE IF NOT EXISTS post (
post_id BIGINT AUTO_INCREMENT PRIMARY KEY,
board_id BIGINT NOT NULL,
member_id BIGINT NOT NULL,
title VARCHAR(100) NOT NULL,
content TEXT,
likes INT NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
deleted_at TIMESTAMP NULL DEFAULT NULL
);
CREATE TABLE post_comment (
post_comment_id BIGINT AUTO_INCREMENT PRIMARY KEY,
post_id BIGINT NOT NULL,
member_id BIGINT NOT NULL,
content TEXT,
likes INT NOT NULL,
is_recomment BOOLEAN DEFAULT FALSE,
parent_post_comment_id BIGINT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
deleted_at TIMESTAMP NULL DEFAULT NULL
);
ALTER TABLE post_comment
ADD CONSTRAINT fk_post_comment_post_id
FOREIGN KEY (post_id) REFERENCES post(post_id)
ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE post_comment
ADD CONSTRAINT fk_post_comment_member_id
FOREIGN KEY (member_id) REFERENCES member(member_id)
ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE post
ADD CONSTRAINT fk_post_member_id
FOREIGN KEY (member_id) REFERENCES member(member_id)
ON DELETE CASCADE ON UPDATE CASCADE;
CREATE TABLE IF NOT EXISTS post_song(
post_song_id BIGINT AUTO_INCREMENT PRIMARY KEY,
post_id BIGINT NOT NULL,
song_info_id BIGINT NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
deleted_at TIMESTAMP NULL DEFAULT NULL
);
ALTER TABLE post_song
ADD CONSTRAINT fk_post_song_post_id
FOREIGN KEY (post_id) REFERENCES post(post_id)
ON DELETE CASCADE ON UPDATE CASCADE;
CREATE TABLE IF NOT EXISTS post_comment_song (
post_comment_song_id BIGINT AUTO_INCREMENT PRIMARY KEY,
post_comment_id BIGINT NOT NULL,
song_info_id BIGINT NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
deleted_at TIMESTAMP NULL DEFAULT NULL
);
ALTER TABLE post_comment_song
ADD CONSTRAINT fk_post_comment_song_post_comment_id
FOREIGN KEY (post_comment_id) REFERENCES post_comment(post_comment_id)
ON DELETE CASCADE ON UPDATE CASCADE;
CREATE TABLE post_like (
post_like_id BIGINT AUTO_INCREMENT PRIMARY KEY,
member_id BIGINT NOT NULL,
post_id BIGINT NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
deleted_at TIMESTAMP NULL DEFAULT NULL
);
CREATE TABLE post_comment_like (
post_comment_like_id BIGINT AUTO_INCREMENT PRIMARY KEY,
member_id BIGINT NOT NULL,
post_comment_id BIGINT NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
deleted_at TIMESTAMP NULL DEFAULT NULL
);
CREATE TABLE post_report (
post_report_id BIGINT AUTO_INCREMENT PRIMARY KEY,
reporter_member_id BIGINT NOT NULL,
subject_member_id BIGINT NOT NULL,
post_id BIGINT NOT NULL,
report_reason VARCHAR(255),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
deleted_at TIMESTAMP NULL DEFAULT NULL
);
CREATE TABLE post_comment_report (
post_comment_report_id BIGINT AUTO_INCREMENT PRIMARY KEY,
reporter_member_id BIGINT NOT NULL,
subject_member_id BIGINT NOT NULL,
post_comment_id BIGINT NOT NULL,
report_reason VARCHAR(255),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
deleted_at TIMESTAMP NULL DEFAULT NULL
);
ALTER TABLE `member`
MODIFY `email` varchar(255) NOT NULL;
CREATE TABLE llm_search_log (
llm_search_log_id BIGINT AUTO_INCREMENT PRIMARY KEY,
member_id BIGINT NOT NULL,
search_text VARCHAR(255) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
deleted_at TIMESTAMP NULL DEFAULT NULL
);
ALTER TABLE llm_search_log
ADD CONSTRAINT fk_llm_search_log_member_id
FOREIGN KEY (member_id) REFERENCES member(member_id);
ALTER TABLE song_info
DROP COLUMN tags,
DROP COLUMN artist_id,
DROP COLUMN octave;
ALTER TABLE song_info
ADD COLUMN tj_score FLOAT,
ADD COLUMN genre VARCHAR(100),
ADD COLUMN year INT,
ADD COLUMN lyrics_video_link VARCHAR(255),
ADD COLUMN artist_gender VARCHAR(50),
ADD COLUMN octave VARCHAR(50),
ADD COLUMN tj_youtube_link VARCHAR(255);
ALTER TABLE song_info
ADD COLUMN classics BOOL DEFAULT FALSE,
ADD COLUMN finale BOOL DEFAULT FALSE,
ADD COLUMN high BOOL DEFAULT FALSE,
ADD COLUMN low BOOL DEFAULT FALSE,
ADD COLUMN rnb BOOL DEFAULT FALSE,
ADD COLUMN breakup BOOL DEFAULT FALSE,
ADD COLUMN ballads BOOL DEFAULT FALSE,
ADD COLUMN dance BOOL DEFAULT FALSE,
ADD COLUMN duet BOOL DEFAULT FALSE,
ADD COLUMN ssum BOOL DEFAULT FALSE,
ADD COLUMN carol BOOL DEFAULT FALSE,
ADD COLUMN rainy BOOL DEFAULT FALSE,
ADD COLUMN pop BOOL DEFAULT FALSE,
ADD COLUMN office BOOL DEFAULT FALSE,
ADD COLUMN wedding BOOL DEFAULT FALSE,
ADD COLUMN military BOOL DEFAULT FALSE;
ALTER TABLE keep_list ADD COLUMN likes INT DEFAULT 0;
CREATE TABLE keep_list_like (
keep_list_like_id BIGINT AUTO_INCREMENT PRIMARY KEY,
member_id BIGINT NOT NULL,
keep_list_id BIGINT NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
deleted_at TIMESTAMP NULL DEFAULT NULL,
FOREIGN KEY (member_id) REFERENCES member(member_id) ON DELETE CASCADE,
FOREIGN KEY (keep_list_id) REFERENCES keep_list(keep_list_id) ON DELETE CASCADE
);
CREATE TABLE keep_list_subscribe (
keep_list_subscribe_id BIGINT AUTO_INCREMENT PRIMARY KEY,
member_id BIGINT NOT NULL,
keep_list_id BIGINT NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
deleted_at TIMESTAMP NULL DEFAULT NULL,
FOREIGN KEY (member_id) REFERENCES member(member_id) ON DELETE CASCADE,
FOREIGN KEY (keep_list_id) REFERENCES keep_list(keep_list_id) ON DELETE CASCADE
);
ALTER TABLE song_info
ADD COLUMN hiphop BOOL DEFAULT FALSE,
ADD COLUMN jpop BOOL DEFAULT FALSE,
ADD COLUMN musical BOOL DEFAULT FALSE,
ADD COLUMN band BOOL DEFAULT FALSE;
-- appVersion 테이블 생성
drop table app_version;
CREATE TABLE IF NOT EXISTS app_version (
app_version_id BIGINT AUTO_INCREMENT PRIMARY KEY,
platform VARCHAR(10) NOT NULL,
latest_version VARCHAR(20) NOT NULL,
force_update_version VARCHAR(20) NOT NULL,
update_url VARCHAR(255) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
deleted_at TIMESTAMP NULL DEFAULT NULL
);
CREATE TABLE search_log (
search_log_id BIGINT AUTO_INCREMENT PRIMARY KEY,
member_id BIGINT NOT NULL,
search_text VARCHAR(255) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
deleted_at TIMESTAMP NULL DEFAULT NULL,
FOREIGN KEY (member_id) REFERENCES member(member_id) ON DELETE CASCADE
);
CREATE TABLE song_recording (
song_recording_id BIGINT AUTO_INCREMENT PRIMARY KEY,
song_info_id BIGINT NOT NULL,
member_id BIGINT NOT NULL,
recording_link VARCHAR(255) NOT NULL,
description VARCHAR(255),
title VARCHAR(255) NOT NULL,
is_public BOOL DEFAULT FALSE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
deleted_at TIMESTAMP NULL DEFAULT NULL,
FOREIGN KEY (song_info_id) REFERENCES song_info(song_info_id) ON DELETE CASCADE,
FOREIGN KEY (member_id) REFERENCES member(member_id) ON DELETE CASCADE
);
CREATE TABLE member_device_token (
member_device_token_id BIGINT AUTO_INCREMENT PRIMARY KEY,
member_id BIGINT NOT NULL,
device_token VARCHAR(255) NOT NULL,
is_activate BOOL DEFAULT TRUE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
deleted_at TIMESTAMP NULL DEFAULT NULL
);
ALTER TABLE member_device_token
ADD CONSTRAINT fk_member_device_token_member_id
FOREIGN KEY (member_id) REFERENCES member(member_id);
CREATE TABLE notification_history (
notification_history_id BIGINT AUTO_INCREMENT PRIMARY KEY,
member_id BIGINT NOT NULL,
title VARCHAR(255) NOT NULL,
body VARCHAR(255) NOT NULL,
screen_type VARCHAR(10),
screen_type_id BIGINT,
is_read BOOL DEFAULT FALSE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
deleted_at TIMESTAMP NULL DEFAULT NULL
)
CREATE INDEX idx_keep_song_deleted_song_created
ON keep_song (deleted_at, song_info_id, created_at DESC);
CREATE INDEX idx_comment_song_created ON comment (song_info_id, created_at DESC);
ALTER TABLE song_info
ADD COLUMN song_name_chosung VARCHAR(255) DEFAULT '',
ADD COLUMN artist_name_chosung VARCHAR(255) DEFAULT '';
ALTER TABLE song_info ADD FULLTEXT INDEX idx_song_name (song_name);
ALTER TABLE song_info ADD FULLTEXT INDEX idx_artist_name (artist_name);
ALTER TABLE song_info ADD FULLTEXT INDEX idx_song_name_chosung (song_name_chosung);
ALTER TABLE song_info ADD FULLTEXT INDEX idx_artist_name_chosung (artist_name_chosung);