본문 바로가기
웹개발 수업/DB(oracle)

웹개발_DB 2

by gugigugi92 2023. 2. 23.
-- 테이블 만들어보기 

/*
 * 자동차
 * 
 * - 자동차 번호
 * - 자동차 브랜드
 * - 출시 날짜
 * - 색상
 * - 가격
 * 
 * */


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; // 테이블 삭제

CAR TABLE 생성
기본키 삭제
기본키 재생성

프로젝트에서 테이블을 더블클릭하여 Columns의 타입등을 빠르게 확인할수 있다
설정한 Constraints를 확인할 수 있다

 

/*테이블 만들어보기~
 * 동물 테이블 생성
 * 
 * - 고유 번호
 * - 종류
 * - 나이
 * - 먹이
 * 
 * */


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;

Columns 결과
Constraints 결과

 


무결성
   데이터의 정확성, 일관성, 유효성이 유지되는 것.

   정확성: 데이터가 애매하지 않아야 한다.
   일관성: 각 사용자가 일관된 데이터를 볼 수 있도록 해야한다.
   유효성: 데이터가 실제 존재하는 데이터여야 한다.

   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)
);

관계도 결과

'웹개발 수업 > DB(oracle)' 카테고리의 다른 글

웹개발_DB 6  (0) 2023.03.04
웹개발_DB 5  (0) 2023.03.03
웹개발_DB 4  (0) 2023.02.28
웹개발_DB 3  (0) 2023.02.27
웹개발_DB 1  (0) 2023.02.22

댓글