[ 목차 ]
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
'개발 실습 > CRUD 게시판 만들기' 카테고리의 다른 글
| [JAVA]15. 게시판 작성 화면 구현 : JSP 입력 폼(form) 구성 (28) | 2025.08.30 |
|---|---|
| [JAVA]14. 게시판 작성 화면 구현 : 영역 나누기(div) (20) | 2025.08.24 |
| [JAVA]12. 게시판 목록 화면 구현 : 테이블과 forEach를 활용한 게시글 출력 (22) | 2025.08.10 |
| [JAVA]11. 게시판 목록 화면 구현 : 제목 태그(title, h2) (28) | 2025.08.03 |
| [JAVA]10. MySQL Workbench를 활용한 ERD 기반 테이블 설계 (26) | 2025.07.11 |