본문 바로가기

개발 실습/CRUD 게시판 만들기

[JAVA]13. 게시판 작성 화면 구현 : 테이블 구조 수정

반응형
[ 목차 ]

1. 테이블 구조 수정의 이유

2. 테이블 구조의 비교
    2-1. 기존 테이블 구조
    2-2. 변경된 테이블 구조

3. 워크벤치를 통한 쿼리 추출
    3-1. 쿼리 추출 옵션 설정

4. 쿼리 실행 및 결과 확인

 

1. 테이블 구조 수정의 이유

간단하고 빠르게 CRUD 기능을 구현하려고 하니, 로그인과 회원가입 기능은 굳이 필요 없다고 판단했습니다.

따라서 불필요한 테이블이나 컬럼을 제거하고 꼭 필요한 부분만 남기는 방향으로 테이블 구조를 수정했습니다.

 

2. 테이블 구조의 비교

2-1. 기존 테이블 구조

먼저 기존 테이블 구조입니다.

 

 

2-2. 변경된 테이블 구조

다음은 수정 후 테이블 구조입니다.

 

 

💡  이미 만들었던 ERD를 다시 열고 싶다면 상단 메뉴의 File > Open Model 을 눌러 원하는 ERD를 선택해주세요.

 

이제부터 어떤 점이 달라졌는지 표로 살펴보겠습니다.

구분 기존 테이블 구조 변경된 테이블 구조 변경 이유
테이블 제거 BOARD_USER_TB X 회원을 따로 관리할 필요가 사라짐
회원 연동 컬럼 UESR_ID USER_NM, USER_PW 회원 아이디가 불필요해짐
FK 변경 USER_ID, POST_ID POST_ID 회원 아이디가 불필요해짐

 

 

3. 워크벤치를 통한 쿼리 추출

3-1. 쿼리 추출 옵션 설정

쿼리 추출 방식에 대한 자세한 설명은 다른 글에서 다뤘으므로, 여기서는 워크벤치의 Forward Engineer 시 체크할 주요 옵션만 간단히 정리하겠습니다.

  • Disable FK Checks for Inserts : SET FOREIGN_KEY_CHECKS=0;를 넣어 FK 제약을 무시하고 INSERT를 실행 가능하게 한다.
  • Drop Objects Before Each Create Object : 각 객체를 실행하기 전에 DROP TABLE IF EXISTS를 넣어준다.
  • Generate Drop Schema : 스키마 자체를 DROP 하는 구문이다.
  • Include Model Attached Scripts : 모델에 연결된 SQL 스크립트도 포함한다.

 

 

옵션을 설정한 뒤 Next 버튼을 눌러 단계를 진행하다 보면, 쿼리 스크립트가 나타납니다.

이 스크립트를 복사한 뒤 창을 닫고 SQL 창에 붙여넣습니다.

 

4. 쿼리 실행 및 결과 확인

 

붙여넣은 쿼리를 확인한 후에 상단의 번개 아이콘을 선택해서 전체 실행을 합니다.

💡  전체 실행 단축키는 Ctrl + Shift + Enter 입니다.

 

-- MySQL Workbench Forward Engineering

SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';

-- -----------------------------------------------------
-- Schema mydb
-- -----------------------------------------------------
DROP SCHEMA IF EXISTS `mydb` ;

-- -----------------------------------------------------
-- Schema mydb
-- -----------------------------------------------------
CREATE SCHEMA IF NOT EXISTS `mydb` DEFAULT CHARACTER SET utf8 ;
USE `mydb` ;

-- -----------------------------------------------------
-- Table `mydb`.`BOARD_USER_TB`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `mydb`.`BOARD_USER_TB` ;

CREATE TABLE IF NOT EXISTS `mydb`.`BOARD_USER_TB` (
  `USER_ID` VARCHAR(20) NOT NULL,
  `USER_PW` VARCHAR(80) NOT NULL,
  `USER_NM` VARCHAR(100) NOT NULL,
  PRIMARY KEY (`USER_ID`),
  UNIQUE INDEX `USER_NM_UNIQUE` (`USER_NM` ASC) VISIBLE)
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `mydb`.`BOARD_POST_TB`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `mydb`.`BOARD_POST_TB` ;

CREATE TABLE IF NOT EXISTS `mydb`.`BOARD_POST_TB` (
  `POST_ID` INT NOT NULL AUTO_INCREMENT,
  `USER_NM` VARCHAR(45) NOT NULL,
  `USER_PW` VARCHAR(100) NOT NULL,
  `TITLE` VARCHAR(45) NOT NULL,
  `CONTENT` VARCHAR(1000) NOT NULL,
  `VIEW_CNT` INT NOT NULL DEFAULT 0,
  `REG_DT` DATE NOT NULL,
  `MOD_DT` DATE NULL,
  PRIMARY KEY (`POST_ID`))
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `mydb`.`BOARD_COMMENT_TB`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `mydb`.`BOARD_COMMENT_TB` ;

CREATE TABLE IF NOT EXISTS `mydb`.`BOARD_COMMENT_TB` (
  `COMMENT_ID` INT NOT NULL AUTO_INCREMENT,
  `POST_ID` INT NOT NULL,
  `USER_NM` VARCHAR(45) NOT NULL,
  `USER_PW` VARCHAR(100) NOT NULL,
  `CONTENT` VARCHAR(1000) NOT NULL,
  `REG_DT` DATE NOT NULL,
  `MOD_DT` DATE NULL,
  PRIMARY KEY (`COMMENT_ID`),
  INDEX `fk_BOARD_COMMENT_TB_BOARD_POST_TB1_idx` (`POST_ID` ASC) VISIBLE,
  CONSTRAINT `fk_BOARD_COMMENT_TB_BOARD_POST_TB1`
    FOREIGN KEY (`POST_ID`)
    REFERENCES `mydb`.`BOARD_POST_TB` (`POST_ID`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;


SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;

 

정상적으로 다 실행되었다면, select 문을 통해 각각의 테이블이 잘 생성되었는지 확인합니다.

 

오늘은 테이블 구조의 수정과 그 이유에 대해 알아보았습니다.

수고하셨습니다.


📌 참고

https://silverji.tistory.com/259

 

[JAVA]10. MySQL Workbench를 활용한 ERD 기반 테이블 설계

목차1. 프로젝트 개요2. ERD 모델링 및 테이블 설계 2-1. 새 모델 생성 및 다이어그램 추가 2-2. 테이블 추가 및 컬럼 정의 - 사용자 테이블 (BOARD_USER_TB) - 게시글 테이블 (BOARD_POST_TB) - 댓글 테이블 (BOAR

silverji.tistory.com

 

반응형