현재 오즈코딩스쿨 강의를 통해 프론트엔드를 학습하고 있습니다.
본 포스트는 해당 강의에 대한 내용 정리를 목적으로 합니다.

데이터 모델링_영화 후기 플랫폼(CASE STUDY)

1. 후기(Review)

영화에 대한 후기를 저장하기 위한 테이블이다.
각 후기는 작성자, 영화, 내용, 작성 시간 등의 정보를 포함한다.

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
);

2. 댓글(Comment) 기능

후기에 대해 댓글을 작성하거나 다른 댓글에 대한 대댓글을 작성하기 위한 테이블이다.
댓글은 논리 삭제가 가능하도록 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)
);

3. 반응(Reaction) 기능

댓글에 대해 사용자가 좋아요 또는 싫어요와 같은 반응을 남길 수 있도록 하는 기능이다.
하나의 댓글에 대해 한 사용자는 하나의 반응만 등록할 수 있도록 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 구분


4. 멘션(Mention) 기능

댓글 내에서 특정 사용자를 @아이디 형태로 언급할 수 있는 기능이다.
멘션은 분석된 결과로 별도로 기록하여 알림 기능과 연동되도록 한다.

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)
);

5. 알림(Notification) 기능

멘션, 대댓글, 반응 등의 행위가 발생했을 때 대상 사용자에게 알림을 제공하는 기능이다.
알림은 읽음 여부를 포함하며, 알림의 종류는 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)
);

6. 사용자(Users) 및 영화(Movies)

댓글, 후기, 알림 등 대부분의 기능이 사용자 정보와 연결되므로 사용자 테이블이 필요하다.
리뷰가 연결되는 대상 영화의 정보도 필요하다.

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)
);
profile
UI/UX디자이너의 코딩 공부

0개의 댓글