게시판 테이블 생성에 대한 질문을 해보았다.
질문 : 게시판을 만들고 싶은데, dataase 테이블을 만들꺼야. 회원 가입을 위한 회원정보 테이블을 만들어줘, 자료형, 이름, 설명 등으로 해줘 그리고 게시판 테이블도 만들어줘, 제목, 목록, 작성자 등등 최대한 많은 정보를 담을 수 있는 테이블로, 마지막으로 게시판 테이블에 연계되는 댓글 테이블도 만들어줘, 게시판번호, 댓글, 작성자 등 많은 정보를 담을 수 있는 테이블로 말야. 게시판은 사진과 첨부파일을 추가할 수 있고, 댓글은 대댓글도 작성할 수 있게말이야
답변 :
회원정보 테이블을 만들기 위해서는 다음과 같은 구조를 가진 테이블을 생성할 수 있습니다.
CREATE TABLE users (
id INT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(50) NOT NULL UNIQUE,
password VARCHAR(100) NOT NULL,
email VARCHAR(100) NOT NULL UNIQUE,
name VARCHAR(50) NOT NULL,
age INT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
위의 테이블에서는 회원 가입을 위한 필수적인 정보인 username, password, email, name 필드를 추가하였고, 선택적인 정보인 age 필드를 추가하였습니다. created_at 필드는 회원 가입 날짜를 저장하기 위한 필드로, DEFAULT CURRENT_TIMESTAMP 옵션을 사용하여 자동으로 현재 시간을 입력하도록 하였습니다.
게시판 테이블을 만들기 위해서는 다음과 같은 구조를 가진 테이블을 생성할 수 있습니다.
게시판 테이블을 만들기 위해서는 다음과 같은 구조를 가진 테이블을 생성할 수 있습니다.
CREATE TABLE posts (
id INT PRIMARY KEY AUTO_INCREMENT,
title VARCHAR(100) NOT NULL,
content TEXT NOT NULL,
writer_id INT NOT NULL,
image_url VARCHAR(200),
file_url VARCHAR(200),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (writer_id) REFERENCES users(id) ON DELETE CASCADE
);
위의 테이블에서는 title 필드와 content 필드로 게시물의 제목과 내용을 저장하고, writer_id 필드로 게시물 작성자를 저장합니다. image_url 필드와 file_url 필드는 게시물에 첨부된 이미지와 파일의 URL을 저장합니다. created_at 필드는 게시물이 작성된 날짜를 저장하고, updated_at 필드는 게시물이 수정된 날짜를 저장합니다. FOREIGN KEY 제약 조건을 사용하여 writer_id 필드가 users 테이블의 id 필드와 연결되도록 하였습니다. 이를 통해 게시물 작성자가 회원 정보 테이블과 연결됩니다.
댓글 테이블을 만들기 위해서는 다음과 같은 구조를 가진 테이블을 생성할 수 있습니다.
CREATE TABLE comments (
id INT PRIMARY KEY AUTO_INCREMENT,
post_id INT NOT NULL,
parent_id INT,
writer_id INT NOT NULL,
content TEXT NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (post_id) REFERENCES posts(id) ON DELETE CASCADE,
FOREIGN KEY (parent_id) REFERENCES comments(id) ON DELETE CASCADE,
FOREIGN KEY (writer_id) REFERENCES users(id) ON DELETE CASCADE
);
댓글 테이블도 만들어보겠습니다. 댓글 테이블은 다음과 같이 설계될 수 있습니다.
댓글 테이블 (Comment)
- CommentID (PK, int): 댓글 고유 ID
- BoardID (FK, int): 게시글 고유 ID
- ParentID (FK, int): 부모 댓글 ID (대댓글의 경우 사용)
- CommentContent (nvarchar(MAX)): 댓글 내용
- WriterID (FK, int): 댓글 작성자 고유 ID
- CreatedAt (datetime): 댓글 작성 일시
위와 같은 테이블을 생성하면 게시판에 댓글을 작성하고 조회할 수 있게 됩니다. 또한, 대댓글 기능을 추가하려면 ParentID 필드를 이용하여 부모 댓글 ID를 저장해두면 됩니다.
사진과 첨부파일을 추가할 수 있는 기능을 구현하기 위해서는 추가적인 테이블이 필요할 수 있습니다. 예를 들어, 사진과 첨부파일을 저장할 수 있는 테이블을 따로 생성하고 게시판 테이블과 연계하여 사용할 수 있습니다.
또한, 이렇게 설계된 테이블들을 어떻게 활용할지에 대해서는 프로그래밍 언어나 프레임워크에 따라 다를 수 있습니다. 예를 들어, Django 프레임워크를 사용한다면 모델 클래스를 정의하고 필드와 연계하여 사용할 수 있습니다.
회원정보 테이블
| Column 이름 | 데이터 타입 | 설명 |
|-------------|-----------|------|
| id | INTEGER | 회원 고유 ID |
| username | VARCHAR(50) | 회원 이름 |
| email | VARCHAR(100) | 회원 이메일 주소 |
| password | VARCHAR(100) | 회원 비밀번호 |
게시판 테이블
| Column 이름 | 데이터 타입 | 설명 |
|-------------|-----------|------|
| id | INTEGER | 게시판 고유 ID |
| title | VARCHAR(200) | 게시판 제목 |
| content | TEXT | 게시판 내용 |
| author_id | INTEGER | 작성자 고유 ID |
| created_at | DATETIME | 작성 일자 |
| updated_at | DATETIME | 수정 일자 |
| image_path | VARCHAR(200) | 게시판 이미지 경로 |
| attachment_path | VARCHAR(200) | 첨부 파일 경로 |
댓글 테이블
| Column 이름 | 데이터 타입 | 설명 |
|-------------|-----------|------|
| id | INTEGER | 댓글 고유 ID |
| board_id | INTEGER | 댓글이 작성된 게시판의 ID |
| content | TEXT | 댓글 내용 |
| author_id | INTEGER | 작성자 고유 ID |
| parent_id | INTEGER | 상위 댓글 ID |
| created_at | DATETIME | 작성 일자 |
| updated_at | DATETIME | 수정 일자 |