데이터 베이스/Bootcamp 데이터베이스

SQL - CREATE TABLE , PRIMARY KEY, FOREIGN KEY, NOT NULL, UNIQUE

whyHbr 2024. 3. 23. 19:02
728x90
반응형

 

CREATE  TABLE PRODUCT (
PRODUCT_IDENTIFICATION_NUMBER INT PRIMARY KEY, //상품 식별 번호, 말 그대로 NUMBER 라 INT 지정, PK설정을해 NOT NULL + UNIQUE 보장해줬다.
PRODUCT_ID  VARCHAR(20) UNIQUE NOT NULL, //상품 ID,문자. UNIQUE 설정 해줬다.상품의 이름이 같아도 찾을 수 있게
PRODUCT_NAME  VARCHAR( 50 )  NOT NULL, // 상품 이름, 문자. 같은 이름의 상품이 존재 할 수 있다. 
PRODUCT_PRICE  INT NOT NULL, //상품 가격, 숫자. 
PRODUCT_DISCOUNT_PRICE  INT NULL,// 할인된 상품 가격, 할인 상품이 아닐 수 있으니 NULL 가능하게 지정.
PRODUCT_CATEGORY  VARCHAR( 100) NOT NULL, //상품 카테고리, 문자. 기타 라는 카테고리가 있으니 NOT NULL 지정
PRODUCT_THUMBNAIL BLOB  NOT NULL, // 상품 이미지, 이미지. 
PRODUCT_FREE_DELIVERY BOOLEAN  NOT NULL // 무료 배송 정보, 0 = 유료배송, 1= 무료배송
); 

할인가 제외 모두 필수 정보라고 생각해 NOT NULL 설정을 했다.

쇼핑몰 메인 페이지인 PRODUCT 생성

INSERT INTO PRODUCT (PRODUCT_IDENTIFICATION_NUMBER, PRODUCT_ID, PRODUCT_NAME, PRODUCT_PRICE, PRODUCT_DISCOUNT_PRICE, PRODUCT_CATEGORY, PRODUCT_THUMBNAIL, PRODUCT_FREE_DELIVERY)
VALUES 
(1001, 'PDigital-0', 'iPhone', 1000000, 900000, 'Digital', 'thumbnail1.jpg', 1),
(1002, 'PDigital-1', 'iPad', 800000, 700000, 'Digital', 'thumbnail2.jpg', 0),
(2000, 'PFood-0', 'coffee', 5000, 4800, 'Food', 'thumbnail3.jpg', 1),
(2001, 'PFood-1', 'cherry', 12000, NULL, 'Food', 'thumbnail4.jpg', 1),
(3000, 'PBook-0', 'The old man and the Sea', 10000,  NULL, 'Book', 'thumbnail5.jpg', 0),
(3001, 'PBook-1', 'Stoner', 23000, 20000, 'Book', 'thumbnail6.jpg', 1),
(4000, 'PSports-0', 'bat', 80000,NULL, 'Sports', 'thumbnail7.jpg', 1),
(4001, 'PSports-1', 'ball', 50000, NULL, 'Sports', 'thumbnail8.jpg', 0),
(5000, 'PFashion-0', 'top', 50000, 49900, ' Fashion', 'thumbnail9.jpg', 1),
(5001, 'PFashion-1', 'outer', 130000, NULL, ' Fashion', 'thumbnail10.jpg', 1);

//CREATE 시 NULL 설정 해둔 것은 NULL 을 설정 할 수 있다. 
//NULL 설정하고 싶지 않다면 자료형을 맞춰 값 넣어주기
SELECT PRODUCT_ID,PRODUCT_NAME,PRODUCT_PRICE  FROM PRODUCT
ORDER BY PRODUCT_ID;
//모든 상품의 ID, 이름, 가격을 ID 순으로 조회하는 SQL문

 

 

 

쇼핑몰 상세 페이지인 PRODUCT_DETAIL TABLE

CREATE TABLE PRODUCT_DETAIL (
PRODUCT_DETAIL_IDENTIFICATION_NUMBER INT PRIMARY KEY, //상품 상세 식별 번호, 숫자, 기본키로 설정해 unique + no null.
PRODUCT_DETAIL_ID VARCHAR( 20 ) UNIQUE NOT NULL, //상품 상세 아이디. 문자, unique, not null설정.
PRODUCT_DETAIL_NAME  VARCHAR( 50)  NOT NULL, // 상품 상세 이름. 같은 상품의 이름이 존재 할 수 있다. 위의 unique 설정 들을 이용해 식별 가능
PRODUCT_DETAIL_DESCRIPTION  TEXT NOT NULL, //상품 상세 설명. 긴 글이 올 수 있어 text 문자 설정.
PRODUCT_DETAIL_QUANTITY  INT  NOT NULL, // 상품 수량. 구매 할 수량을 설정. 숫자.
PRODUCT_DETAIL_PRICE  INT NOT NULL, //상품 상세 가격. 숫자
PRODUCT_DETAIL_DISCONT_PRICE  INT, //상품 상세 할인 가격. 숫자.
PRODUCT_DETAIL_TOTAL_ORDER_PRICE  INT  NOT NULL, // 상품 상세 합계 가격. 숫자. 
FOREIGN KEY (PRODUCT_DETAIL_ID)  REFERENCES PRODUCT (PRODUCT_ID )
); // PRODUCT_DETAIL_ID 열이 PRODUCT 테이블의 PRODUCT_ID 열을 참조하는 외래키로 지정.
//FK는 PRODUCT, PRODUCT_DETAIL 간 관계를 설정. 데이터 일관성을 유지하는데 사용. 
//할인 가격 제외, 필수 정보라고 생각해 null 값을 허용하지 않았다.

 

SELECT PRODUCT_DETAIL_ID,PRODUCT_DETAIL_NAME,PRODUCT_DETAIL_TOTAL_ORDER_PRICE
FROM PRODUCT_DETAIL
ORDER BY PRODUCT_DETAIL_ID;
//모든 상품의 상세 ID, 상세 이름, 총 가격을 ID 순으로 조회하는 SQL문

728x90

'데이터 베이스 > Bootcamp 데이터베이스' 카테고리의 다른 글

트랜잭션  (0) 2024.03.22
데이터베이스  (0) 2024.02.08