-- 테이블 만들어보기
/*
* 자동차
*
* - 자동차 번호
* - 자동차 브랜드
* - 출시 날짜
* - 색상
* - 가격
*
* */
CREATE TABLE TBL_CAR(
CAR_ID NUMBER PRIMARY KEY,
CAR_BRAND VARCHAR2(1000),
CAR_RELEASE_DATE DATE,
CAR_COLOR VARCHAR2(500),
CAR_PRICE NUMBER
);
ALTER TABLE TBL_CAR DROP CONSTRAINT SYS_C007014;
--PRIMARY KEY이름 제약 조건 삭제
ALTER TABLE TBL_CAR ADD CONSTRAINT PK_CAR PRIMARY KEY(CAR_ID);
--PRIMARY KEY 재 생성 CONSTRAINT로 재약조건 이름을 지어준다
DROP TABLE TBL_CAR; // 테이블 삭제
※
/*테이블 만들어보기~
* 동물 테이블 생성
*
* - 고유 번호
* - 종류
* - 나이
* - 먹이
*
* */
CREATE TABLE TBL_ANIMAL(
ANIMAL_ID NUMBER /*CONSTRAINT PK_ANIMAL PRIMARY KEY*/,
ANIMAL_KIND VARCHAR2(500),
ANIMAL_AGE NUMBER,
ANIMAL_FEED VARCHAR2(500),
CONSTRAINT PK_ANIMAL PRIMARY KEY(ANIMAL_ID) -- 이렇게 기본키 설정도 가능
);
DROP TABLE TBL_ANIMAL;
ALTER TABLE TBL_ANIMAL DROP CONSTRAINT PK_ANIMAL;
ALTER TABLE TBL_ANIMAL ADD CONSTRAINT PK_ANIMAL PRIMARY KEY(ANIMAL_ID);
/*
* 학생 테이블 생성
*
* - 학생 번호
* - 학생 아이디
* - 학생 이름
* - 전공
* - 성별
* - 생년월일
* - 학생 나이
* - 학생 학점
*
* */
CREATE TABLE TBL_STUDENT(
STUDENT_ID NUMBER CONSTRAINT PK_STUDENT PRIMARY KEY,
STUDENT_IDENTIFICATION VARCHAR2(500) CONSTRAINT UK_STUDENT UNIQUE NOT NULL,
STUDENT_NAME VARCHAR2(500) NOT NULL,
STUDENT_MAJOR VARCHAR2(500) NOT NULL,
STUDENT_GENDER CHAR(1) DEFAULT 'N' CONSTRAINT BAN_GENDER CHECK(STUDENT_GENDER IN ('M', 'W', 'N')),
-- DEFAULT 값을 설정하지 않아도 기본값 설정안함 N CHECK M,W,N 만 들어갈 수 있다
STUDENT_BIRTH DATE CONSTRAINT BAN_BIRTH CHECK(STUDENT_BIRTH >= TO_DATE('1985-01-01', 'YYYY-MM-DD')),
-- 85년생까지만 학생으로 받겠다 DATE 타입으로 설정해서 비교가능
STUDENT_AGE NUMBER,
STUDENT_GRADE VARCHAR2(10) CONSTRAINT BAN_GRADE CHECK(STUDENT_GRADE IN ('A+', 'A', 'B', 'B+', 'C', 'C+', 'D', 'D+', 'F'))
);
--테이블 수정
/*학생 아이디는 NULL을 허용한다.*/
ALTER TABLE TBL_STUDENT MODIFY STUDENT_IDENTIFICATION NULL;
/*기존 BAN_GENDER 제약조건을 없앤다.*/
ALTER TABLE TBL_STUDENT DROP CONSTRAINT BAN_GENDER ;
/*학생 성별에 'W'를 기본값으로 설정한다.*/
ALTER TABLE TBL_STUDENT MODIFY STUDENT_GENDER DEFAULT 'W';
/*학생 나이는 19세가 넘어야 한다.*/
ALTER TABLE TBL_STUDENT ADD CONSTRAINT BAN_AGE CHECK(STUDENT_AGE >19);
/*학생 나이는 NULL을 허용하지 않는다.*/
ALTER TABLE TBL_STUDENT MODIFY STUDENT_AGE NOT NULL;
무결성
데이터의 정확성, 일관성, 유효성이 유지되는 것.
정확성: 데이터가 애매하지 않아야 한다.
일관성: 각 사용자가 일관된 데이터를 볼 수 있도록 해야한다.
유효성: 데이터가 실제 존재하는 데이터여야 한다.
1. 개체 무결성
모든 테이블이 PK로 선택된 컬럼을 가져야 한다.
2. 참조 무결성
두 테이블의 데이터가 항상 일관된 값을 가지도록 유지하는 것.
3. 도메인 무결성
컬럼의 타입, NULL 값의 허용 등에 대한 사항을 정의하고
올바른 데이터가 입력되었는 지를 확인하는 것.
모델링(기획)
추상적인 주제를 DB의 구조에 맞게 설계하는 것.
1. 요구사항 분석
회원, 주문, 상품 : 3가지를 모두 관리하고 싶습니다.
2. 개념적 설계(개념 모델링)
회원 | 주문 | 상품 |
회원번호 | 주문번호 | 상품번호 |
회원 아이디 | 주문 날짜 | 상품 이름 |
회원 비밀번호 | 회원 번호 | 상품 가격 |
회원 이름 | 상품 번호 | 상품 가격 |
회원 주소 | 주문개수 | |
회원 이메일 | ||
회원생일 | ||
회원핸드폰 번호 |
3. 논리적 설계(논리 모델링)
회원 | 주문 | 상품 |
회원 번호PK | 주문 번호PK | 상품 범호PK |
회원 아이디UK | 주문날자NN | 상품이름NN |
회원비밀번호NN | 회원번호FK | 상품가격NN |
회원 이름NN | 상품 번호FK | 상품 재고NN,D(0) |
회원 주소NN | 주문 개수C,(>=1),D(1) | |
회원 이메일UK | ||
회원 생일 | ||
회원 핸드폰 번호UK |
4. 물리적 설계
TBL_MEMBER
-------------------------------
MEMBER_ID: NUMBER PK_MEMBER
-------------------------------
MEMBER_IDENTIFICATION: VARCHAR2 NOT NULL UNIQUE
MEMBER_PASSWORD: VARCHAR2 NOT NULL
MEMBER_NAME: VARCHAR2 NOT NULL
MEMBER_ADDRESS: VARCHAR2 NOT NULL
MEMBER_EMAIL: VARCHAR2 NOT NULL UNIQUE
MEMBER_BIRTH: DATE
MEMBER_PHONE: VARCHAR2 NOT NULL UNIQUE
1. 요구사항 분석
꽃 테이블과 화분 테이블 2개가 필요하고,
꽃을 구매할 때 화분도 같이 구매합니다.
꽃은 이름과 색상, 가격이 있고,
화분은 제품번호, 색상, 모양이 있습니다.
화분은 모든 꽃을 담을 수 없고 알맞은 꽃들을 담아야 합니다.
2. 개념적 설계
꽃 화분
꽃 이름 화분 제품 번호
꽃 색상 화분 색상
꽃 가격 화분 모양
꽃 이름
꽃 색상
꽃 | 화분 |
꽃 이름 | 화분 제품 번호 |
꽃 색상 | 화분 색상 |
꽃 가격 | 화분 모양 |
꽃 이름 | |
꽃 색상 | |
3. 논리적 설계
꽃 | 화분 |
꽃 이름PK | 화분 제품 번호PK |
꽃 색상PK | 화분 모양NN |
꽃 가격NN | 화분 색상NN |
꽃 이름FK | |
꽃 색상FK |
4. 물리적 설계
TBL_FLOWER
----------------------------------
FLOWER_NAME VARCHAR2 PK_FLOWER
FLOWER_COLOR VARCHAR2 PK_FLOWER
----------------------------------
FLOWER_PRICE NUMBER NOT NULL
TBL_POT
----------------------------------
POT_ID NUMBER PK_POT
----------------------------------
POT_SHAPE VARCHAR2 NOT NULL
POT_COLOR VARCHAR2 NOT NULL
FLOWER_NAME VARCHAR2 FOREIGN KEY NOT NULL
FLOWER_COLOR VARCHAR2 FOREIGN KEY NOT NULL
---------------------------------------------------------------------------------------------
5. 구현
/*
* TBL_FLOWER
----------------------------------
FLOWER_NAME VARCHAR2 PK_FLOWER
FLOWER_COLOR VARCHAR2 PK_FLOWER
----------------------------------
FLOWER_PRICE NUMBER NOT NULL
*
* */
CREATE TABLE TBL_FLOWER(
FLOWER_NAME VARCHAR2(500),
FLOWER_COLOR VARCHAR2(500),
FLOWER_PRICE NUMBER NOT NULL,
CONSTRAINT PK_FLOWER PRIMARY KEY(FLOWER_NAME, FLOWER_COLOR)
);
/*
*
TBL_POT
----------------------------------
POT_ID NUMBER PK_POT
----------------------------------
POT_SHAPE VARCHAR2 NOT NULL
POT_COLOR VARCHAR2 NOT NULL
FLOWER_NAME VARCHAR2 FOREIGN KEY NOT NULL
FLOWER_COLOR VARCHAR2 FOREIGN KEY NOT NULL
*
*/
CREATE TABLE TBL_POT(
POT_ID NUMBER CONSTRAINT PK_POT PRIMARY KEY,
POT_SHAPE VARCHAR2(500) NOT NULL,
POT_COLOR VARCHAR2(500) NOT NULL,
FLOWER_NAME VARCHAR2(500) NOT NULL,
FLOWER_COLOR VARCHAR2(500) NOT NULL,
CONSTRAINT FK_POT FOREIGN KEY(FLOWER_NAME, FLOWER_COLOR)
REFERENCES TBL_FLOWER(FLOWER_NAME, FLOWER_COLOR)
--두개의 컬럼은 REFERENCES FLOWER 테이블을 참조한다
);
1. 요구사항 분석
동물병원을 오픈하려고 합니다.
동물의 종과 이름, 나이, 병명이 필요하고
보호자의 이름, 나이, 주소, 핸드폰 번호가 필요합니다.
한 명의 보호자는 여러 동물을 등록할 수 있어야 합니다.
2. 개념적 설계
동물 | 보호자 |
이름 | 보호자 등록번호 |
보호자 등록번호 | 이름 |
나이 | 나이 |
병명 | 주소 |
종 | 핸드폰 번호 |
3. 논리적 설계
동물 | 보호자 |
이름PK | 보호자 등록번호PK |
보호자 등록번호FK | 이름NN |
나이NN | 주소NN |
병명NN | 나이NN |
종NN | 핸드폰번호NN |
4. 물리적 설게
TBL_PROTECTER
----------------------------------
PROTECTER_ID NUMBER PK_PROTECTER
----------------------------------
PROTECTER_NAME VARCHAR2 NOT NULL
PROTECTER_AGE NUMBER
PROTECTERR_ADDRESS VARCHAR2 NOT NULL
PROTECTER_PHONE VARCHAR2 NOT NULL
TBL_ANIMAL
----------------------------------
ANIMAL_NAME NUMBER PK_ANIMAL
----------------------------------
ANIMAL_SPEICES VARCHAR2 NOT NULL
ANIMAL_NAME VARCHAR2 NOT NULL
ANIMAL_AGE NUMBER NOT NULL
ANIMAL_DIAGNOSE_NAME VARCHAR2 NOT NULL
PROTECTER_ID NUMBER FOREIGN KEY FK_ANIMAL_OWNER
5. 구현
CREATE TABLE TBL_PROTECTER(
PROTECTER_ID VARCHAR2(1000) CONSTRAINT PK_PROTECTER PRIMARY KEY,
PROTECTER_NAME VARCHAR2(1000) NOT NULL,
PROTECTER_ADD VARCHAR2(1000)NOT NULL,
PROTECTER_AGE NUMBER NOT NULL,
PROTECTER_PHONE NUMBER NOT NULL
);
CREATE TABLE TBL_ANIMAL(
ANIMAL_NAME VARCHAR2(1000) CONSTRAINT PK_ANIMAL PRIMARY KEY,
PROTECTER_ID VARCHAR2(1000) NOT NULL,
ANIMAL_DIAGNOSE VARCHAR2(1000) NOT NULL,
ANIMAL_AGE NUMBER NOT NULL,
ANIMAL_SPECIES VARCHAR2(1000) NOT NULL,
CONSTRAINT FK_ANIMAL FOREIGN KEY (PROTECTER_ID)
REFERENCES TBL_PROTECTER (PROTECTER_ID)
);
댓글