Kim VamPa

[Spring][쇼핑몰 프로젝트][18] 상품 등록 - 테이블 생성 본문

스프링 프레임워크/쇼핑몰 프로젝트

[Spring][쇼핑몰 프로젝트][18] 상품 등록 - 테이블 생성

Kim VamPa 2021. 3. 22. 12:40
728x90
반응형
프로젝트 Github : https://github.com/sjinjin7/Blog_Project
프로젝트 포스팅 색인(index) : https://kimvampa.tistory.com/188

목표

상품 테이블, 카테고리 테이블 생성

 이번 포스팅부터는 상품 등록 기능을 구현하고자 합니다. 전체적인 구현 방향은 "회원 등록", "작과 등록"과 동일하지만 "상품 등록" 구현에서는 '팝업창을 통한 작가 선택', '제이쿼리 캘린더 라이브러리 활용', 'JSON을 활용한 캘린더 데이터 출력', '위지윅' 적용과 같은 기능들을 적용시킬 것입니다.

 

 이번 포스팅에선 '상품'과 '상품 카테고리'에 사용될 DB 테이블 생성을 목표로 합니다.

 

 

 

순서

1. 상품 테이블 

2. 카테고리 테이블

 

 

 

1. 상품 등록 테이블

 상품 테이블을 구성할 컬럼들을 다음과 같이 정하였습니다.

 

 '상품Id', '상품 이름', '작가 id', '출판일', '출판사', '카테고리 코드', '책 가격', '책(상품) 재고', '할인율', '책 소개', '책 내용(목차)', '등록 날짜', '수정 날짜', 

 

 정해진 컬럼 구성을 가지고 아래와 같이 '상품 테이블' 생성 쿼리를 입력하여 테이블을 생성합니다.

 

-- Oracle
-- 상품 테이블 
create table vam_book(
    bookId number generated as identity (start with 1) primary key,
    bookName varchar2(50)   not null,
    authorId number,
    publeYear Date not null,
    publisher varchar2(70) not null,
    cateCode varchar2(30),
    bookPrice number not null,
    bookStock number not null,
    bookDiscount number(2,2),
    bookIntro clob,
    bookContents clob,
    regDate date default sysdate,
    updateDate date default sysdate
);


MySQL
-- 상품 테이블 
create table vam_book(
    bookId int primary key auto_increment,
    bookName varchar(50)   not null,
    authorId int,
    publeYear Date not null,
    publisher varchar(70) not null,
    cateCode varchar(30),
    bookPrice int not null,
    bookStock int not null,
    bookDiscount decimal(2,2),
    bookIntro text,
    bookContents text,
    regDate timestamp default now(),
    updateDate timestamp default now()
);

 

 - 출판일(publeYear)경우 Date 타입으로 지정을 하였습니다. 행 데이터를 삽입할 때 "yyyy-mm-dd"와 같은 형식으로 삽입을 하면 됩니다.

 

 - 상품Id(bookId) 경우 자동으로 숫자가 삽입되도록 Oracle의 경우 'identity'를 MySQL은 'autoincrement'를 사용하였습니다. 

 

 - 할인율(bookDiscount)은 소수 둘째 자리까지 허용하는 고정 소수점 타입으로 지정하였습니다. 자연수 1~99까지 허용하는 숫자 타입으로 지정하여도 상관없다고 생각합니다. 어떤 타입을 하든 서버 단계에서 할인율 데이터를 가공하여 사용해야 하기 때문입니다.

 

 - 책소개(bookIntro), 책 내용(bookContents) 경우 위지윅을 활용하여 작성된 데이터를 등록시키려고 합니다. 위지윅을 사용하게 되면 태그가 자동으로 삽입되게 되어 길지 않은 길이의 글을 작성하더라도 DB에 등록 시에는 태그를 포함하면 매우 많은 데이터들이 등록되게 됩니다. 따라서 대량의 데이터를 등록할 수 있도록 Orace의 경우 CLOB타입을 MySQL의 경우 TEXT타입을 사용하였습니다. (각 타입의 데이터 크기를 비교하여 자신이 원하는 타입을 사용하면 됩니다.)

 

 - 작가Id(authorId), 카테고리 코드(cateCode) 각각 '작가 테이블(vam_author)'과 '카테고리 테이블(vam_bcate)'에 있는 데이터만 등록되도록 외래 키를 지정해주어야 합니다. 하지만 외래 키 등록은 작업의 편의를 위해서 '작가 팝업창 등록', '카테고리 리스트 출력' 기능을 '상품 등록'페이지에 적용한 뒤에 등록해주도록 하겠습니다.

 

 

2. 카테고리 테이블

테이블 생성

 

 아래의 쿼리를 입력하여 카테고리 테이블(vam_bcate)을 생성합니다.

 

-- Oracle
-- 카테고리 테이블
create table vam_bcate(
    tier number(1) not null,
    cateName varchar2(30) not null,
    cateCode varchar2(30) not null,
    cateParent varchar2(30) ,
    primary key(cateCode),
    foreign key(cateParent) references vam_bcate(cateCode) 
);

-- MySQL
create table vam_bcate(
    tier int(1) not null,
    cateName varchar(30) not null,
    cateCode varchar(30) not null,
    cateParent varchar(30) ,
    primary key(cateCode),
    foreign key(cateParent) references vam_bcate(cateCode) 
);

 

 - 기본키는 cateCode를 지정해주었습니다.

 

 - cateParent 컬럼에 들어갈 값은 cateCode에 있는 값만 등록할 수 있도록 외래 키 설정을 해주었습니다.

 

 

카테고리 코드 규칙

 

 책 상품을 3가지 단계로 분류 할 것입니다(책 상품에 대한 분류는 '교보문고'를 참고하였습니다). 1단계 분류는 '국내','국외'의 구분입니다. 2단계는 '소설', '교양', '인문', '과학', '철학'과 같이 큰 범주의 책 분야로 분류이고, 3단계는 2단계의 분류에서 좀 더 세분화된 분야의 범주로 분류하였습니다.

 

 이러한 3개의 분류를 가지고 카테고리 코드의 규칙을 아래와 같이 정하였습니다. 

 

그림 2-1

 

 위의 '카테고리 코드' 와 더불어 "카테고리 테이블(vam_bcate)"에는 '카테고리 이름(cateName)', '상위 카테고리(cateParent)', '카테고리 등급(tier)' 칼럼들로 구성할 것입니다.

 

 - '상위 카테고리(cateParent)'는 어떠한 상위 카토게리의 하위 카테고리인지를 알 수 있는 역할을 합니다.

 

- '카테고리 등급(tier)'경우 해당 카테고리 번호가 위에서 분류한 1단계, 2단계, 3단계 중 어떠한 단계인지를 표시합니다.

 

 

데이터 삽입

 

 '카테고리 코드'를 사용자가 등록하고 수정할 수 있도록 해주는 것이 좋지만, 이는 '작가 데이터 등록'과 똑같은 과정이기 때문에 생략하고 데이터베이스 명령을 통해 직접 카테고리 코드 데이터를 삽입 하겠습니다.

 

 

 위의 카테고리 코드 규칙에 근거하여 아래의 데이터를 삽입하였습니다.  (Oracle의 경우 반드시 아래의 명령을 실행한뒤 "commit"을 실행해야합니다.)

 

-- 데이터 삽입
insert into vam_bcate(tier, cateName, cateCode) values (1, '국내', '100000');
    insert into vam_bcate(tier, cateName, cateCode, cateParent) values (2, '소설', '101000','100000');    
        insert into vam_bcate(tier, cateName, cateCode, cateParent) values (3, '한국소설', '101001','101000');
        insert into vam_bcate(tier, cateName, cateCode, cateParent) values (3, '영미소설', '101002','101000');
        insert into vam_bcate(tier, cateName, cateCode, cateParent) values (3, '일본소설', '101003','101000');
    insert into vam_bcate(tier, cateName, cateCode, cateParent) values (2, '시/에세이', '102000','100000');    
        insert into vam_bcate(tier, cateName, cateCode, cateParent) values (3, '한국시', '102001','102000');    
        insert into vam_bcate(tier, cateName, cateCode, cateParent) values (3, '해외시', '102002','102000');    
    insert into vam_bcate(tier, cateName, cateCode, cateParent) values (2, '경제/경영', '103000','100000');    
        insert into vam_bcate(tier, cateName, cateCode, cateParent) values (3, '경영일반', '103001','103000');    
        insert into vam_bcate(tier, cateName, cateCode, cateParent) values (3, '경영이론', '103002','103000');    
        insert into vam_bcate(tier, cateName, cateCode, cateParent) values (3, '경제일반', '103003','103000');    
        insert into vam_bcate(tier, cateName, cateCode, cateParent) values (3, '경제이론', '103004','103000');    
    insert into vam_bcate(tier, cateName, cateCode, cateParent) values (2, '자기계발', '104000','100000');    
        insert into vam_bcate(tier, cateName, cateCode, cateParent) values (3, '성공/처세', '104001','104000');    
        insert into vam_bcate(tier, cateName, cateCode, cateParent) values (3, '자기능력계발', '104002','104000');    
        insert into vam_bcate(tier, cateName, cateCode, cateParent) values (3, '인간관계', '104003','104000');    
    insert into vam_bcate(tier, cateName, cateCode, cateParent) values (2, '인문', '105000','100000');    
        insert into vam_bcate(tier, cateName, cateCode, cateParent) values (3, '심리학', '105001','105000');    
        insert into vam_bcate(tier, cateName, cateCode, cateParent) values (3, '교육학', '105002','105000');    
        insert into vam_bcate(tier, cateName, cateCode, cateParent) values (3, '철학', '105003','105000');    
    insert into vam_bcate(tier, cateName, cateCode, cateParent) values (2, '역사/문화', '106000','100000');
        insert into vam_bcate(tier, cateName, cateCode, cateParent) values (3, '역사일반', '106001','106000');
        insert into vam_bcate(tier, cateName, cateCode, cateParent) values (3, '세계사', '106002','106000');
        insert into vam_bcate(tier, cateName, cateCode, cateParent) values (3, '한국사', '106003','106000');
    insert into vam_bcate(tier, cateName, cateCode, cateParent) values (2, '과학', '107000','100000');
        insert into vam_bcate(tier, cateName, cateCode, cateParent) values (3, '과학이론', '107001','107000');
        insert into vam_bcate(tier, cateName, cateCode, cateParent) values (3, '수학', '107002','107000');
        insert into vam_bcate(tier, cateName, cateCode, cateParent) values (3, '물리학', '107003','107000');
insert into vam_bcate(tier, cateName, cateCode) values (1, '국외', '200000');
    insert into vam_bcate(tier, cateName, cateCode, cateParent) values (2, '문학', '201000','200000');    
        insert into vam_bcate(tier, cateName, cateCode, cateParent) values (3, '소설', '201001','201000');    
        insert into vam_bcate(tier, cateName, cateCode, cateParent) values (3, '시', '201002','201000');    
        insert into vam_bcate(tier, cateName, cateCode, cateParent) values (3, '희곡', '201003','201000');    
    insert into vam_bcate(tier, cateName, cateCode, cateParent) values (2, '인문/사회', '202000','200000');    
        insert into vam_bcate(tier, cateName, cateCode, cateParent) values (3, '교양', '202001','202000');    
        insert into vam_bcate(tier, cateName, cateCode, cateParent) values (3, '철학', '202002','202000');    
    insert into vam_bcate(tier, cateName, cateCode, cateParent) values (2, '경제/경영', '203000','200000');    
        insert into vam_bcate(tier, cateName, cateCode, cateParent) values (3, '경제학', '203001','203000');    
        insert into vam_bcate(tier, cateName, cateCode, cateParent) values (3, '경영학', '203002','203000');    
        insert into vam_bcate(tier, cateName, cateCode, cateParent) values (3, '투자', '203003','203000');    
    insert into vam_bcate(tier, cateName, cateCode, cateParent) values (2, '과학/기술', '204000','200000');    
        insert into vam_bcate(tier, cateName, cateCode, cateParent) values (3, '교양과학', '204001','204000');    
        insert into vam_bcate(tier, cateName, cateCode, cateParent) values (3, '물리학', '204002','204000');    
        insert into vam_bcate(tier, cateName, cateCode, cateParent) values (3, '수학', '204003','204000');  

 

 

REFERENCE

  •  

DATE

  • 2020.03.22
728x90
반응형
Comments