
현재 오즈코딩스쿨 강의를 통해 프론트엔드를 학습하고 있습니다.
본 포스트는 해당 강의에 대한 내용 정리를 목적으로 합니다.
영화에 대한 후기를 저장하기 위한 테이블이다.
각 후기는 작성자, 영화, 내용, 작성 시간 등의 정보를 포함한다.
CREATE TABLE Reviews (
id INT PRIMARY KEY AUTO_INCREMENT,
user_id INT NOT NULL,
movie_id INT NOT NULL,
content TEXT NOT NULL,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
후기에 대해 댓글을 작성하거나 다른 댓글에 대한 대댓글을 작성하기 위한 테이블이다.
댓글은 논리 삭제가 가능하도록 is_deleted 필드를 포함한다.
CREATE TABLE Comments (
id INT PRIMARY KEY AUTO_INCREMENT,
review_id INT NOT NULL, -- 대상 후기
user_id INT NOT NULL, -- 작성자
parent_id INT NULL, -- 대댓글이면 부모 댓글 ID
content TEXT NOT NULL,
is_deleted BOOLEAN DEFAULT FALSE,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (review_id) REFERENCES Reviews(id),
FOREIGN KEY (user_id) REFERENCES Users(id),
FOREIGN KEY (parent_id) REFERENCES Comments(id)
);
댓글에 대해 사용자가 좋아요 또는 싫어요와 같은 반응을 남길 수 있도록 하는 기능이다.
하나의 댓글에 대해 한 사용자는 하나의 반응만 등록할 수 있도록 UNIQUE 제약을 설정하였다.
CREATE TABLE CommentReactions (
id INT PRIMARY KEY AUTO_INCREMENT,
comment_id INT NOT NULL,
user_id INT NOT NULL,
reaction_type ENUM('like', 'dislike') NOT NULL,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
UNIQUE (comment_id, user_id), -- 중복 방지
FOREIGN KEY (comment_id) REFERENCES Comments(id),
FOREIGN KEY (user_id) REFERENCES Users(id)
);
reaction_type은 enum을 사용하여 like/dislike 구분
댓글 내에서 특정 사용자를 @아이디 형태로 언급할 수 있는 기능이다.
멘션은 분석된 결과로 별도로 기록하여 알림 기능과 연동되도록 한다.
CREATE TABLE CommentMentions (
id INT PRIMARY KEY AUTO_INCREMENT,
comment_id INT NOT NULL,
mentioned_user_id INT NOT NULL,
FOREIGN KEY (comment_id) REFERENCES Comments(id),
FOREIGN KEY (mentioned_user_id) REFERENCES Users(id)
);
멘션, 대댓글, 반응 등의 행위가 발생했을 때 대상 사용자에게 알림을 제공하는 기능이다.
알림은 읽음 여부를 포함하며, 알림의 종류는 ENUM으로 구분한다.
CREATE TABLE Notifications (
id INT PRIMARY KEY AUTO_INCREMENT,
recipient_user_id INT NOT NULL,
sender_user_id INT NOT NULL,
type ENUM('mention', 'reaction', 'reply') NOT NULL,
reference_id INT NOT NULL,
is_read BOOLEAN DEFAULT FALSE,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (recipient_user_id) REFERENCES Users(id),
FOREIGN KEY (sender_user_id) REFERENCES Users(id)
);
댓글, 후기, 알림 등 대부분의 기능이 사용자 정보와 연결되므로 사용자 테이블이 필요하다.
리뷰가 연결되는 대상 영화의 정보도 필요하다.
CREATE TABLE Users (
id INT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(30) NOT NULL UNIQUE,
email VARCHAR(100),
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE Movies (
id INT PRIMARY KEY AUTO_INCREMENT,
title VARCHAR(255) NOT NULL,
release_date DATE,
genre VARCHAR(100)
);