본문 바로가기

SQL관련

게시판 테이블 생성에 대한 질문을 해보았다.

질문 : 게시판을 만들고 싶은데, 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  | 수정 일자 |