중간 프로젝트 때는 MYSQL을 이용했지만 이번에는 ORACLE을 이용하려고 한다.
그러기 위해서는 DBMS 이관이 필요하다.
MYSQL → ORACLE
테이블 생성문을 수정하면서 가장 크게 고려한 점은 DBMS 간 호환성 및 이식성 !!
DBMS를 저렴한 쪽으로 이관하는 경우가 많기 때문에 최대한 변경사항 없이 옮길 수 있도록 작성하는 것이 좋다.
그래서 최대한 SQL 표준 함수를 사용하고 ORACLE이나 MYSQL에서만 사용하는 AUTO_INCREMENT, NOW 등은 사용하지 않으려고 했다.
1. VARHCAR2 대신 VARCHAR 사용 (이식성호환성 고려)
오라클에서는 VARCHAR2를 사용하도록 권장하고 있는 것 같지만 다른 DBMS에는 없어서 호환성이 좋지 않음.
그래서 VARCHAR 사용
2. 관리자 여부, 탈퇴 여부 NUMBER(1) 사용
Boolean 자료형이 오라클에는 없기 때문에 NUMBER(1)을 사용해 숫자 1자리만 저장하게 한 후 0, 1로 여부를 저장할 예정이다.
3. 자료형 LONG대신 NUMBER
NUMBER(19) == LONG == BIGINT ?
원래 LONG을 사용하고 있었는데 MySQL에서는 BIGINT에 해당한다고 한다.
근데 오라클에는 BIGINT가 없기 때문에 LONG과 자릿수가 동일한 NUMBER(19)를 사용하기로 결정했다.
4. Sequence 사용
전에는 IFNULL(MAX)+1을 통해서 수동 증가시켰는데 이번에는 시퀀스를 사용하려고 한다.
왜냐하면 원래처럼 구현하면 동시성 제어가 안되기 때문이다.
찾아보니 뭘 따로 파서.. 제어하면 된다는데.. 넘 복잡해지니까 시퀀스 사용하기로
5. DATE 저장 시 NOW 사용 X
오라클에는 NOW가 없어서 변경했다
[ 변경 전 MySQL ]
-- 1. MEMBER 테이블
CREATE TABLE MEMBER (
MEMBER_NUMBER BIGINT PRIMARY KEY,
MEMBER_ID VARCHAR(15) NOT NULL,
MEMBER_PASSWORD VARCHAR(15) NOT NULL,
MEMBER_NAME VARCHAR(15) NOT NULL,
MEMBER_BIRTH DATE NOT NULL,
MEMBER_PHONE_NUMBER VARCHAR(20) NOT NULL,
MEMBER_ADDRESS_MAIN VARCHAR(200),
MEMBER_ADDRESS_DETAIL VARCHAR(100),
MEMBER_EMAIL_ID VARCHAR(15) NOT NULL,
MEMBER_EMAIL_DOMAIN VARCHAR(15) NOT NULL,
MEMBER_REGISTER_DATE TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
MEMBER_IS_ADMIN TINYINT DEFAULT 1,
MEMBER_IS_WITHDRAW TINYINT DEFAULT 1
);
-- 2. PRODUCT_SINGLE 테이블
CREATE TABLE PRODUCT_SINGLE(
PRODUCT_SINGLE_NUMBER BIGINT PRIMARY KEY,
PRODUCT_SINGLE_NAME VARCHAR(20) NOT NULL,
PRODUCT_SINGLE_PRICE INT NOT NULL,
PRODUCT_SINGLE_STOCK INT NOT NULL,
PRODUCT_SINGLE_IMAGE VARCHAR(300) NOT NULL,
PRODUCT_SINGLE_STORE VARCHAR(20) NOT NULL,
PRODUCT_SINGLE_CATEGORY VARCHAR(20) NOT NULL,
PRODUCT_SINGLE_INFORMATION VARCHAR(100)
);
-- 3. PRODUCT_COMBO 테이블
CREATE TABLE PRODUCT_COMBO(
PRODUCT_COMBO_NUMBER BIGINT PRIMARY KEY,
PRODUCT_COMBO_NAME VARCHAR(20) NOT NULL,
PRODUCT_COMBO_IMAGE VARCHAR(300),
PRODUCT_COMBO_STORE INT,
PRODUCT_COMBO_CATEGORY VARCHAR(20),
PRODUCT_COMBO_INFORMATION VARCHAR(200) NOT NULL,
);
-- 4. PRODUCT_COMBO_COMPONENT 테이블
CREATE TABLE PRODUCT_COMBO_COMPONENT(
PRODUCT_COMBO_COMPONENT_NUMBER BIGINT PRIMARY KEY,
PRODUCT_COMBO_COMPONENT_ONE BIGINT NOT NULL,
PRODUCT_COMBO_COMPONENT_TWO BIGINT NOT NULL,
PRODUCT_COMBO_COMPONENT_THREE BIGINT,
PRODUCT_COMBO_NUMBER BIGINT,
PRODUCT_SINGLE_NUMBER BIGINT
);
-- 5. REVIEW 테이블
CREATE TABLE REVIEW(
REVIEW_NUMBER BIGINT PRIMARY KEY,
REVIEW_SCORE INT NOT NULL,
REVIEW_REGISTER_DATE TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
REVIEW_CONTENT VARCHAR(200),
MEMBER_NUMBER BIGINT NOT NULL,
PRODUCT_COMBO_NUMBER BIGINT
);
-- 6. BOARD_COMBO 테이블
CREATE TABLE BOARD_COMBO(
BOARD_COMBO_NUMBER BIGINT PRIMARY KEY,
BOARD_COMBO_TITLE VARCHAR(100) NOT NULL,
BOARD_COMBO_CONTENT TEXT,
BOARD_COMBO_REGISTER_DATE TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
BOARD_COMBO_VIEW_COUNT BIGINT DEFAULT 0,
MEMBER_NUMBER BIGINT
);
-- 7. BOARD_COMBO_LIKED 테이블
CREATE TABLE BOARD_COMBO_LIKED(
BOARD_COMBO_LIKED_NUMBER BIGINT PRIMARY KEY,
MEMBER_NUMBER BIGINT NOT NULL,
BOARD_COMBO_NUMBER BIGINT NOT NULL
);
-- 8. PURCHASE 테이블
CREATE TABLE PURCHASE(
PURCHASE_NUMBER BIGINT PRIMARY KEY,
PURCHASE_TERMINAL_ID VARCHAR(20) NOT NULL,
PURCHASE_TOTAL_PRICE BIGINT NOT NULL,
MEMBER_NUMBER BIGINT
);
-- 9. PURCHASE_DETAIL 테이블
CREATE TABLE PURCHASE_DETAIL(
PURCHASE_DETAIL_NUMBER BIGINT PRIMARY KEY,
PURCHASE_PRODUCT_COUNT BIGINT NOT NULL,
PRODUCT_SINGLE_NUMBER BIGINT,
PRODUCT_COMBO_NUMBER BIGINT,
PURCHASE_NUMBER BIGINT
);
[ 변경 후 Oracle ]
-- 1. MEMBER 테이블
CREATE TABLE MEMBER (
MEMBER_NUMBER NUMBER(19) PRIMARY KEY,
MEMBER_ID VARCHAR(15) NOT NULL,
MEMBER_PASSWORD VARCHAR(15) NOT NULL,
MEMBER_NAME VARCHAR(15) NOT NULL,
MEMBER_BIRTH DATE NOT NULL,
MEMBER_PHONE_NUMBER VARCHAR(20) NOT NULL,
MEMBER_ADDRESS_MAIN VARCHAR(200),
MEMBER_ADDRESS_DETAIL VARCHAR(100),
MEMBER_EMAIL_ID VARCHAR(15) NOT NULL,
MEMBER_EMAIL_DOMAIN VARCHAR(15) NOT NULL,
MEMBER_REGISTER_DATE TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
MEMBER_IS_ADMIN NUMBER(1) DEFAULT 1,
MEMBER_IS_WITHDRAW NUMBER(1) DEFAULT 1
);
-- 2. PRODUCT_SINGLE 테이블
CREATE TABLE PRODUCT_SINGLE(
PRODUCT_SINGLE_NUMBER NUMBER(19) PRIMARY KEY,
PRODUCT_SINGLE_NAME VARCHAR(20) NOT NULL,
PRODUCT_SINGLE_PRICE NUMBER NOT NULL,
PRODUCT_SINGLE_STOCK NUMBER NOT NULL,
PRODUCT_SINGLE_IMAGE VARCHAR(300) NOT NULL,
PRODUCT_SINGLE_STORE VARCHAR(20) NOT NULL,
PRODUCT_SINGLE_CATEGORY VARCHAR(20) NOT NULL,
PRODUCT_SINGLE_INFORMATION VARCHAR(100)
);
-- 3. PRODUCT_COMBO 테이블
CREATE TABLE PRODUCT_COMBO(
PRODUCT_COMBO_NUMBER NUMBER(19) PRIMARY KEY,
PRODUCT_COMBO_NAME VARCHAR(20) NOT NULL,
PRODUCT_COMBO_IMAGE VARCHAR(300),
PRODUCT_COMBO_STORE NUMBER,
PRODUCT_COMBO_CATEGORY VARCHAR(20),
PRODUCT_COMBO_INFORMATION VARCHAR(200) NOT NULL
);
-- 4. PRODUCT_COMBO_COMPONENT 테이블
CREATE TABLE PRODUCT_COMBO_COMPONENT(
PRODUCT_COMBO_COMPONENT_NUMBER NUMBER(19) PRIMARY KEY,
PRODUCT_COMBO_COMPONENT_ONE NUMBER(19) NOT NULL,
PRODUCT_COMBO_COMPONENT_TWO NUMBER(19) NOT NULL,
PRODUCT_COMBO_COMPONENT_THREE NUMBER(19),
PRODUCT_COMBO_NUMBER NUMBER(19),
PRODUCT_SINGLE_NUMBER NUMBER(19)
);
-- 5. REVIEW 테이블
CREATE TABLE REVIEW(
REVIEW_NUMBER NUMBER(19) PRIMARY KEY,
REVIEW_SCORE NUMBER NOT NULL,
REVIEW_REGISTER_DATE TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
REVIEW_CONTENT VARCHAR(200),
MEMBER_NUMBER NUMBER(19) NOT NULL,
PRODUCT_COMBO_NUMBER NUMBER(19)
);
-- 6. BOARD_COMBO 테이블
CREATE TABLE BOARD_COMBO(
BOARD_COMBO_NUMBER NUMBER(19) PRIMARY KEY,
BOARD_COMBO_TITLE VARCHAR(100) NOT NULL,
BOARD_COMBO_CONTENT CLOB,
BOARD_COMBO_REGISTER_DATE TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
BOARD_COMBO_VIEW_COUNT NUMBER(19) DEFAULT 0,
MEMBER_NUMBER NUMBER(19)
);
-- 7. BOARD_COMBO_LIKED 테이블
CREATE TABLE BOARD_COMBO_LIKED(
BOARD_COMBO_LIKED_NUMBER NUMBER(19) PRIMARY KEY,
MEMBER_NUMBER NUMBER(19) NOT NULL,
BOARD_COMBO_NUMBER NUMBER(19) NOT NULL
);
-- 8. PURCHASE 테이블
CREATE TABLE PURCHASE(
PURCHASE_NUMBER NUMBER(19) PRIMARY KEY,
PURCHASE_TERMINAL_ID VARCHAR(20) NOT NULL,
PURCHASE_TOTAL_PRICE NUMBER(19) NOT NULL,
MEMBER_NUMBER NUMBER(19)
);
-- 9. PURCHASE_DETAIL 테이블
CREATE TABLE PURCHASE_DETAIL(
PURCHASE_DETAIL_NUMBER NUMBER(19) PRIMARY KEY,
PURCHASE_PRODUCT_COUNT NUMBER(19) NOT NULL,
PRODUCT_SINGLE_NUMBER NUMBER(19),
PRODUCT_COMBO_NUMBER NUMBER(19),
PURCHASE_NUMBER NUMBER(19)
);
'웹 개발' 카테고리의 다른 글
JSP/Servlet → Spring Boot 이관 중 배운 점 (0) | 2025.04.21 |
---|---|
web.xml, applicationContext.xml (0) | 2025.04.20 |
[Spring] 2일차 (1) | 2025.04.18 |
[Spring] 1일차 (0) | 2025.04.16 |
싱글톤 패턴이란? (0) | 2025.04.15 |