Skip to main content

데이터베이스 모델링 설계_게시판 설계

데이터베이스 모델링 설계 : 게시판 설계

설계 과정

게시판 DB를 설계해보겠다.

게시판 샘플

우선 위 사진을 토대로 게시판을 설계해 보았다.

게시판에는 자유게시판, 공지사항 등 여러 게시판이 있다.

게시판의 종류를 설정해주는 board라는 table을 만들어 게시판의 번호와 이름을 추가해준다.

CREATE TABLE IF NOT EXISTS `board`.`board` (
`id` INT NOT NULL COMMENT '게시판 번호',
`name` VARCHAR(45) NULL COMMENT '게시판 이름',
PRIMARY KEY (`id`))
ENGINE = InnoDB;

이렇게 게시판을 생성하였으면 게시글을 작성하는 user를 설계해보자.

user에는 많은 정보들이 들어갈 수 있다. 아이디, 비밀번호, 성별, 전화번호, 이메일 등 다양한 정보가 들어갈 수 있지만 이 글은 게시판을 설계하는 내용이기 때문에 꼭 필요한 정보들만 추가하였다.

user의 번호, 아이디를 뜻하는 name, 비밀번호를 뜻하는 password를 추가해준다.

CREATE TABLE IF NOT EXISTS `board`.`user` (
`id` INT NOT NULL COMMENT '사용자 번호',
`name` VARCHAR(45) NULL COMMENT '사용자 아이디',
`password` VARCHAR(45) NULL COMMENT '사용자 비밀번호',
PRIMARY KEY (`id`))
ENGINE = InnoDB;

게시판의 핵심 기능인 게시글(article) 기능을 설계해보자.

게시글에 보통 존재하는 정보들은 제목, 내용, 작성자, 등록일, 조회수가 있다. 간혹 비밀글을 작성하고 싶은 작성자들을 위하여 비밀번호 기능도 추가하였다.

게시글은 게시판이 정해져있으므로 board 테이블에서 board_id를 foreign key로 받아오고 게시글 작성자를 user 테이블에서 user_id를 받아온다.

CREATE TABLE IF NOT EXISTS `board`.`article` (
`id` INT NOT NULL COMMENT '게시글 번호',
`subject` VARCHAR(45) NULL COMMENT '게시글 제목',
`password` VARCHAR(45) NULL COMMENT '게시글 비밀번호',
`content` VARCHAR(2000) NULL COMMENT '게시글 내용',
`regtime` DATE NULL COMMENT '게시글 등록일',
`hit` INT NULL COMMENT '게시글 조회수',
`board_id` INT NOT NULL COMMENT '게시판 번호',
`user_id` INT NOT NULL COMMENT '작성자 아이디',
PRIMARY KEY (`id`, `board_id`, `user_id`),
INDEX `fk_article_board_idx` (`board_id` ASC),
INDEX `fk_article_user1_idx` (`user_id` ASC),
CONSTRAINT `fk_article_board`
FOREIGN KEY (`board_id`)
REFERENCES `board`.`board` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `fk_article_user1`
FOREIGN KEY (`user_id`)
REFERENCES `board`.`user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;

마지막으로 게시글에 댓글 기능을 추가해보도록 하자.

댓글 기능에는 댓글을 달 게시글의 번호와 게시글의 작성자, 그리고 게시글의 게시판 번호가 필요하다. 이것들은 article table에서 foreign key로 받아온다. 또한, 댓글 작성자를 user table에서 foreign key로 받아오고, 댓글의 내용과 댓글의 등록일이 필요하다.

CREATE TABLE IF NOT EXISTS `board`.`comment` (
`id` INT NOT NULL COMMENT '댓글 번호',
`content` VARCHAR(2000) NULL COMMENT '댓글 내용',
`regtime` DATE NULL COMMENT '댓글 등록일',
`article_id` INT NOT NULL COMMENT '게시글 번호',
`article_board_id` INT NOT NULL COMMENT '게시글의 게시판 번호',
`article_user_id` INT NOT NULL COMMENT '게시글의 작성자 번호',
`user_id` INT NOT NULL COMMENT '댓글 작성자',
PRIMARY KEY (`id`, `article_id`, `article_board_id`, `article_user_id`, `user_id`),
INDEX `fk_comment_article1_idx` (`article_id` ASC, `article_board_id` ASC, `article_user_id` ASC),
INDEX `fk_comment_user1_idx` (`user_id` ASC),
CONSTRAINT `fk_comment_article1`
FOREIGN KEY (`article_id` , `article_board_id` , `article_user_id`)
REFERENCES `board`.`article` (`id` , `board_id` , `user_id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `fk_comment_user1`
FOREIGN KEY (`user_id`)
REFERENCES `board`.`user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;

ER-Diagram

위의 sql문들을 ER-Diagram으로 작성하게 된다면 아래와 같이 설계된 ER-Diagram이 완성된다.

ER-Diagram

추가적으로 게시판에서 설계할 수 있는 기능들에는 대댓글 기능, 게시글 좋아요 기능, 댓글 좋아요 기능, 게시글 파일 첨부기능 등이 있다.

보통의 게시판의 기능만 추가해 놓았고 더 추가하고 싶은 기능이 있다면 위의 추가 기능들을 사용하여 DB를 더 복잡하게 설계하는 연습을 해보자.

나올 수 있는 면접 질문

  • 게시판을 설계하고 설명하시오.

참고 url

기여자


HelloNaks

📦