IT 프로젝트/쇼핑몰 만들기

[Spring Boot] 스프링 부트 프로젝트/쇼핑몰 만들기 - 데이터베이스 모델 설계

happygram 2019. 7. 7. 16:59

데이터베이스 모델 설계를 진행합니다.

MySQL 5.7을 사용합니다.

테이블 목록

논리명 물리명
사용자 users
권한 authorities
상품 product
장바구니 basket
주문 order
게시판 board
카테고리 category

테이블 정의

users

CREATE TABLE `users` (
  `username` varchar(50) NOT NULL,
  `password` varchar(500) NOT NULL,
  `enabled` tinyint(4) NOT NULL,
  `create_timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `update_timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`username`)
)
논리명 물리명
username 사용자 식별자
password 비밀번호
enabled 사용 여부
create_timestamp 생성 날짜
update_timestamp 업데이트 날짜

authorities

CREATE TABLE `authorities` (
  `username` varchar(50) NOT NULL,
  `authority` varchar(50) NOT NULL,
  `create_timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `update_timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`username`,`authority`),
  CONSTRAINT `authorities_FK` FOREIGN KEY (`username`) REFERENCES `users` (`username`) ON DELETE CASCADE ON UPDATE CASCADE
)
논리명 물리명
username 사용자 식별자
authority 권한
create_timestamp 생성 날짜
update_timestamp 업데이트 날짜

product

CREATE TABLE `product` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(500) NOT NULL,
  `price` int(10) unsigned NOT NULL,
  `description` varchar(2000) NOT NULL,
  `image_url` varchar(200) NOT NULL,
  `color` varchar(200) NOT NULL,
  `size` varchar(200) NOT NULL,
  `discount` int(11) NOT NULL,
  `category_id` int(11) NOT NULL,
  `create_timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `update_timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  KEY `product_FK` (`category_id`),
  CONSTRAINT `product_FK` FOREIGN KEY (`category_id`) REFERENCES `category` (`id`)
)
논리명 물리명
id 상품 식별자
name 상품명
price 상품 가격
description 상품 설명
image_url 상품 이미지 URL
color 색상
size 사이즈
discount 할인율
category_id 메뉴 식별자
create_timestamp 생성 날짜
update_timestamp 업데이트 날짜

basket

CREATE TABLE `basket` (
  `username` varchar(50) NOT NULL,
  `product_id` int(11) NOT NULL,
  `count` int(10) unsigned NOT NULL,
  `create_timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `update_timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`username`),
  KEY `basket_FK_product_id` (`product_id`),
  CONSTRAINT `basket_FK` FOREIGN KEY (`product_id`) REFERENCES `product` (`id`),
  CONSTRAINT `basket_FK_username` FOREIGN KEY (`username`) REFERENCES `users` (`username`) ON DELETE CASCADE ON UPDATE CASCADE
)
논리명 물리명
username 사용자 식별자
product_id 상품 식별자
count 갯수
create_timestamp 생성 날짜
update_timestamp 업데이트 날짜

order

CREATE TABLE `order` (
  `id` varchar(20) NOT NULL,
  `username` varchar(50) NOT NULL,
  `product_id` int(11) NOT NULL,
  `status` enum('ready','delivery','complete') NOT NULL,
  `create_timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `update_timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  KEY `order_FK` (`product_id`),
  KEY `order_FK_1` (`username`),
  CONSTRAINT `order_FK` FOREIGN KEY (`product_id`) REFERENCES `product` (`id`),
  CONSTRAINT `order_FK_1` FOREIGN KEY (`username`) REFERENCES `users` (`username`) ON DELETE CASCADE ON UPDATE CASCADE
)
논리명 물리명
id 주문 식별자
username 사용자 식별자
product_id 상품 식별자
status 상태
create_timestamp 생성 날짜
update_timestamp 업데이트 날짜

board

CREATE TABLE `board` (
  `id` varchar(20) NOT NULL,
  `username` varchar(50) NOT NULL,
  `type` varchar(20) NOT NULL,
  `content` blob NOT NULL,
  `create_timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `update_timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  KEY `board_FK` (`username`),
  CONSTRAINT `board_FK` FOREIGN KEY (`username`) REFERENCES `users` (`username`) ON DELETE CASCADE ON UPDATE CASCADE
)
논리명 물리명
id 게시판 식별자
username 사용자 식별자
type 유형
content 내용
create_timestamp 생성 날짜
update_timestamp 업데이트 날짜

category

CREATE TABLE `category` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `id_parent` int(11) NOT NULL DEFAULT '0',
  `title` varchar(200) NOT NULL,
  `icon` varchar(200) NOT NULL,
  `description` varchar(2000) DEFAULT '',
  `create_timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `update_timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
)
논리명 물리명
id 카테고리 식별자
id_parent 부모 카테고리 식별자
title 카테고리 명칭
icon 카테고리 아이콘
description 설명
create_timestamp 생성 날짜
update_timestamp 업데이트 날짜

ERD

References

[Spring Boot] 스프링 부트 Web Security 설정 방법

https://dbeaver.io/