11.18.(금) OracleDB(8): 실습테이블(1)
실습테이블 작성
우리가 흔히 아는 책 사이트(예스24, 교보문고 등)을 들어가보면 책에 대한 어떠한 정보들이 있는가?
대표적으로 책 이름, 가격, 작가, 출판사 등이 있다.
만약 우리가 이러한 사이트의 DB를 구성한다고 가정하면 이를 테이블에 어떻게 정리할 것인지 생각해보자.
하지만 모든 정보를 하나의 테이블에 담기엔 비효율적이라고 생각이 든다.
작가 한 명이 책을 여러개 쓰기 마련이고, 출판사도 하나의 책만 출판하는게 아니기 때문에, 중복된 정보를 일일이 관리하는 것은 굉장히 귀찮을 것이다.
이게 모델링이 중요한 이유이다. 책을 효율적으로 등록하고 관리하기 위해서는 여러개의 테이블을 만들어서 연결시켜주어야한다. 일단 무슨 기준으로 테이블을 나눌건지 생각해보자.
테이블 나누기
우선적으로 책에 대한 테이블이 필요하다.
책에 대한 데이터를 작성할때 작가에 대한 정보를 추가하고 싶다면, 작가 테이블에서 뽑아와서 추가할 수 있겠다.
마찬가지로 출판사에 대한 정보도 별도의 테이블에서 관리하면 수정이 쉬울 것 같다.
이제 테이블마다 어떤 정보를 추가하면 좋을지 구상해보자.
테이블 구성
책 테이블의 칼럼은 다음 항목으로 구성해보자.
책 고유번호, 제목, 가격, 장르, 출판일, 페이지 수, 등록일
CREATE TABLE book_tbl(
isbn NUMBER(13) PRIMARY KEY,
title VARCHAR2(100) NOT NULL,
price NUMBER(10,2) NOT NULL,
genre VARCHAR2(20),
pub_date DATE,
pages NUMBER(4),
author_code NUMBER(5) NOT NULL,
pub_code NUMBER(5) NOT NULL,
reg_date DATE DEFAULT SYSDATE
);
출판사 테이블의 구성은 다음과 같다.
출판사코드, 전화번호, 이메일, 대표이름, 출판사이름, 등록일
CREATE TABLE pub_tbl(
pub_code NUMBER(5) PRIMARY KEY,
pub_tel VARCHAR2(15),
pub_email VARCHAR2(50),
pub_rep VARCHAR2(30),
publisher VARCHAR2(30) NOT NULL,
reg_date DATE DEFAULT SYSDATE
);
작가 테이블
작가코드, 이름, 이메일, 데뷔작, 데뷔년도, 등록일
CREATE TABLE author_tbl(
author_code NUMBER(5) PRIMARY KEY,
author VARCHAR2(30) NOT NULL,
auth_email VARCHAR2(50),
debut VARCHAR2(100),
debut_year DATE,
reg_date DATE DEFAULT SYSDATE
);
각 테이블의 데이터중 하나의 칼럼은 고유의 값을 가지는 PRIMARY KEY로 지정했다.
책 테이블에선 isbn(책 고유번호), 출판사 테이블에선 출판사코드, 작가 테이블에선 작가코드.
이렇게 설정해주는 이유는 테이블을 연결시킬때 기준점이 필요해서다.
앞으로 이 테이블에 살을 붙이면서 완성해나가보자.