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 다이어그램을 그렸다.
[사용자(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개씩 넣어줬다^^
'프로젝트' 카테고리의 다른 글
[Spring]게시판 페이징 처리 - (MySQL offset, limit 방식) (0) | 2023.03.20 |
---|---|
[게시판 프로젝트] 게시판 레이아웃 작업 (0) | 2023.02.11 |
[게시판 프로젝트] 문서화 작업(테이블 명세서, 요구사항 정의서, 잡리스트) (0) | 2023.02.02 |
[Spring/Maven] MySQL, MyBatis 연동 및 설정 (5) | 2023.01.30 |
[Spring/Eclipse/Maven] 프로젝트 셋팅하기(버전관리) (0) | 2023.01.28 |