본문 바로가기

프로젝트

[게시판 프로젝트]MySQL Workbench로 DB설계(스키마, 테이블 생성, ERD)

https://javapotato.tistory.com/36

테이블 명세서에서 작성한대로 스키마와 테이블을 만들 예정이다. 

 

스키마 생성

utf8과 utf8_general_ci로 셋팅해주었다. 

CREATE SCHEMA `crudboard` DEFAULT CHARACTER SET utf8 ;

 

 

스키마 창에서 방금 전 생성한 스키마가 생긴 것을 확인할 수 있다. 

(만약 안뜬다면 마우스 우클릭 Refresh)

 


테이블 생성

 

[USER 테이블]

 

CREATE TABLE `crudboard`.`user` (
  `u_id` VARCHAR(15) NOT NULL,
  `u_pw` VARCHAR(10) NOT NULL,
  `u_name` VARCHAR(10) NOT NULL,
  `u_birth` INT NULL,
  `u_sex` VARCHAR(5) NULL,
  `u_number` VARCHAR(15) NOT NULL,
  `u_address` VARCHAR(50) CHARACTER SET 'utf8' COLLATE 'utf8_general_ci' NOT NULL,
  `u_profile` VARCHAR(100) NULL,
  PRIMARY KEY (`u_id`),
  UNIQUE INDEX `u_id_UNIQUE` (`u_id` ASC) VISIBLE)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8;

 

[BOARD 테이블]

 

CREATE TABLE `crudboard`.`board` (
  `b_no` INT NOT NULL AUTO_INCREMENT,
  `b_title` VARCHAR(45) NOT NULL,
  `b_content` VARCHAR(100) NOT NULL,
  `u_id` VARCHAR(15) NOT NULL,
  `b_regdate` DATETIME NOT NULL,
  `b_readcnt` INT NOT NULL,
  `b_del` INT NOT NULL,
  `b_img` VARCHAR(50) NULL,
  PRIMARY KEY (`b_no`),
  UNIQUE INDEX `b_no_UNIQUE` (`b_no` ASC) VISIBLE,
  INDEX `u_id_idx` (`u_id` ASC) VISIBLE,
  CONSTRAINT `u_id`
    FOREIGN KEY (`u_id`)
    REFERENCES `crudboard`.`user` (`u_id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8;

 

 

[B_REPLY 테이블]

 

 

CREATE TABLE `crudboard`.`b_reply` (
  `re_no` INT NOT NULL AUTO_INCREMENT,
  `u_id` VARCHAR(15) NOT NULL,
  `b_no` INT NOT NULL,
  `re_content` VARCHAR(50) NOT NULL,
  `re_date` DATETIME NOT NULL,
  PRIMARY KEY (`re_no`, `b_no`),
  INDEX `u_id_idx` (`u_id` ASC) VISIBLE,
  INDEX `b_no_idx` (`b_no` ASC) VISIBLE,
  CONSTRAINT `r_u_id`
    FOREIGN KEY (`u_id`)
    REFERENCES `crudboard`.`user` (`u_id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `r_b_no`
    FOREIGN KEY (`b_no`)
    REFERENCES `crudboard`.`board` (`b_no`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8;

 

[B_SCRAP 테이블]

 

 

CREATE TABLE `crudboard`.`b_scrap` (
  `u_id` VARCHAR(15) NOT NULL,
  `b_no` INT NOT NULL,
  `b_title` VARCHAR(45) NOT NULL,
  `s_cnt` INT NOT NULL,
  PRIMARY KEY (`u_id`, `b_no`),
  INDEX `b_no_idx` (`b_no` ASC) VISIBLE,
  CONSTRAINT `s_u_id`
    FOREIGN KEY (`u_id`)
    REFERENCES `crudboard`.`user` (`u_id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `s_b_no`
    FOREIGN KEY (`b_no`)
    REFERENCES `crudboard`.`board` (`b_no`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8;

 

스키마와 테이블 생성 완료

 


ERD(Entity Relationship Diagram)

- 엔티티간의 관계를 알기 쉽에 약속된 도형을 이용하여 그림으로 표현한 것

구성요소 : 엔티티(Entity), 관계(Relationship), 속성(Attribute)

 

게시판 ERD 다이어그램

위에 생성된 스키마와 테이블들로 ERD 다이어그램을 그렸다. 

 

[사용자(user) ↔ 게시글(board)]

사용자(user)는 게시글(board)와 1:N 관계이다.

  • 한 명의 사용자(user)는 1개 혹은 여러개의 게시글을 작성할 수 있다.
  • 게시글을 작성하지 않은 사용자가 있을 수 있다. (1:N 선택)
  • user 테이블의 u_id가 board 테이블에서 FK로 일반 속성으로 쓰이고 있다. <비식별 관계>   

 

[사용자(user) 댓글(b_reply)]

사용자(user)는 댓글(b_reply)와 1:N 관계이다.

  • 한 명의 사용자(user)는 1개 혹은 여러개의 댓글을 작성할 수 있다.
  • 댓글을 작성하지 않은 사용자가 있을 수 있다. (1:N 선택)
  • user 테이블의 u_id가 b_reply 테이블에서 FK로 일반 속성으로 쓰이고 있다. <비식별 관계>

 

[사용자(user)  스크랩(b_scrap)]

사용자(user)는 스크랩(b_scrap)과 1:N 관계이다.

  • 한 명의 사용자(user)는 1개 혹은 여러 개의 게시글들을 스크랩 할 수 있다. 
  • 스크랩하지 않은 사용자가 있을 수 있다. (1:N 선택)
  • user 테이블의 u_id가 b_scrap 테이블에서 FK이자 PK로 쓰이고 있다. <식별 관계> 

 

[게시글(board) ↔ 댓글(b_reply)]

게시글(board)은 댓글(b_reply)과 1:N 관계이다.

  • 한 개의 게시글(board)은 1개 혹은 여러 개의 댓글(b_reply)을 가질 수 있다. 
  • 댓글을 가지고 있지 않은 게시물이 있을 수 있다. (1:N 선택)
  • board 테이블의 b_no가 b_reply 테이블에서 FK로 일반 속성으로 쓰이고 있다. <비식별 관계>

 

[게시글(board) ↔ 스크랩(b_scrap)]

게시글(board)은 스크랩(b_scrap)과 1:N 관계이다.

  • 한 개의 게시글(board)은 1개 혹은 여러 개의 게시글을 스크랩할 수 있다. 
  • 스크랩 되지 않은 게시물이 있을 수 있다. (1:N 선택)
  • board 테이블의 b_no가 b_scrap 테이블에서 FK이자 PK로 쓰이고 있다. <식별 관계> 

 


그리고 테이블마다 더미데이터도 임의로 5개씩 넣어줬다^^

 

user table
board table
b_reply table
b_scrap table