-- 사용자 정보 테이블
CREATE TABLE users (
user_id BIGINT PRIMARY KEY AUTO_INCREMENT, -- 사용자 고유 ID
email VARCHAR(255) NOT NULL UNIQUE, -- 사용자 이메일 (중복 불가)
password VARCHAR(255) NOT NULL, -- 비밀번호 (암호화 권장)
nickname VARCHAR(100), -- 닉네임
phone_number VARCHAR(20) UNIQUE, -- 전화번호
is_phone_verified BOOLEAN DEFAULT FALSE, -- 전화번호 인증 여부
profile_image_url VARCHAR(512), -- 프로필 이미지 경로(URL)
profile_image_name VARCHAR(255), -- 실제 저장된 이미지 파일명
created_at DATETIME DEFAULT CURRENT_TIMESTAMP -- 가입일
);
-- 지도 게시판 테이블
CREATE TABLE map_posts (
post_id BIGINT PRIMARY KEY AUTO_INCREMENT, -- 게시글 ID
user_id BIGINT NOT NULL, -- 작성자 ID
pin_id BIGINT NOT NULL, -- 관련 핀 ID
title VARCHAR(255), -- 제목
content TEXT, -- 내용
updated_at DATETIME, -- 수정일
likes INT DEFAULT 0, -- 좋아요 수
FOREIGN KEY (user_id) REFERENCES users(user_id) ON DELETE CASCADE, -- 작성자 외래키
FOREIGN KEY (pin_id) REFERENCES user_pins(pin_id) ON DELETE CASCADE -- 핀 외래키
);
-- 게시판 좋아요 기록 테이블
CREATE TABLE post_likes (
like_id BIGINT PRIMARY KEY AUTO_INCREMENT, -- 좋아요 ID
user_id BIGINT NOT NULL, -- 좋아요 누른 사용자 ID
post_id BIGINT NOT NULL, -- 게시글 ID
FOREIGN KEY (user_id) REFERENCES users(user_id) ON DELETE CASCADE,
FOREIGN KEY (post_id) REFERENCES map_posts(post_id) ON DELETE CASCADE -- 게시글 외래키
);
-- 지도 게시판 이미지 저장 테이블
CREATE TABLE post_images (
image_id BIGINT PRIMARY KEY AUTO_INCREMENT, -- 이미지 고유 ID
post_id BIGINT NOT NULL,
image_url VARCHAR(500) NOT NULL, -- 이미지 URL
file_name VARCHAR(255) NOT NULL, -- 원본 이미지 파일 이름
FOREIGN KEY (post_id) REFERENCES map_posts(post_id) ON DELETE CASCADE -- 게시글 외래키
);
-- 핀 저장 테이블
CREATE TABLE user_pins (
pin_id BIGINT PRIMARY KEY AUTO_INCREMENT, -- 핀 고유 ID
user_id BIGINT NOT NULL, -- 핀을 생성한 사용자 ID
category_id BIGINT NOT NULL, -- 핀이 속한 카테고리 ID
latitude DOUBLE, -- 위도 좌표
longitude DOUBLE, -- 경도 좌표
title VARCHAR(100) NOT NULL, -- 핀 이름
description TEXT, -- 핀에 대한 설명
created_at DATETIME DEFAULT CURRENT_TIMESTAMP, -- 핀 생성 시각
FOREIGN KEY (user_id) REFERENCES users(user_id) ON DELETE CASCADE, -- 사용자 외래키
FOREIGN KEY (category_id) REFERENCES categories(category_id) ON DELETE CASCADE -- 카테고리 외래키
);
-- 핀 이미지 저장 테이블
CREATE TABLE pin_images (
image_id BIGINT PRIMARY KEY AUTO_INCREMENT, -- 이미지 고유 ID
pin_id BIGINT NOT NULL, -- 어떤 핀에 속하는지
image_url VARCHAR(500) NOT NULL, -- 이미지 URL
file_name VARCHAR(255) NOT NULL, -- 원본 이미지 파일 이름
uploaded_at DATETIME DEFAULT CURRENT_TIMESTAMP, -- 업로드 시각
FOREIGN KEY (pin_id) REFERENCES user_pins(pin_id) ON DELETE CASCADE
);
-- 댓글 테이블
CREATE TABLE comments (
comment_id BIGINT PRIMARY KEY AUTO_INCREMENT, -- 댓글 ID
user_id BIGINT NOT NULL, -- 작성자 ID
post_id BIGINT NOT NULL, -- 게시글 ID
content TEXT, -- 댓글 내용
updated_at DATETIME, -- 수정일
likes INT DEFAULT 0, -- 좋아요 수
FOREIGN KEY (user_id) REFERENCES users(user_id) ON DELETE CASCADE,
FOREIGN KEY (post_id) REFERENCES map_posts(post_id) ON DELETE CASCADE -- 게시글 외래키
);
-- 댓글 좋아요 기록 테이블
CREATE TABLE comment_likes (
like_id BIGINT PRIMARY KEY AUTO_INCREMENT, -- 좋아요 ID
user_id BIGINT NOT NULL, -- 좋아요 누른 사용자 ID
comment_id BIGINT NOT NULL, -- 게시글 ID
FOREIGN KEY (user_id) REFERENCES users(user_id) ON DELETE CASCADE,
FOREIGN KEY (comment_id) REFERENCES comments(comment_id) ON DELETE CASCADE -- 댓글 외래키
);
-- 카테고리 테이블
CREATE TABLE categories (
category_id BIGINT PRIMARY KEY AUTO_INCREMENT, -- 카테고리 고유 ID
user_id BIGINT NOT NULL, -- 카테고리를 생성한 사용자 ID
name VARCHAR(100) NOT NULL, -- 카테고리 이름 (예: 음식점, 카페 등)
created_at DATETIME DEFAULT CURRENT_TIMESTAMP, -- 카테고리 생성 시각
FOREIGN KEY (user_id) REFERENCES users(user_id) ON DELETE CASCADE -- 사용자 테이블과 외래키 연결
);