개발/교육

(데이터베이스)25일차

kakk789 2022. 4. 29. 18:12

PL/SQL 조건식

IF 조건식 THEN
...
ELSE
...
END IF

책 이름이 존재한다면 가격을 'UPDATE'

책 이름이 존재하지 않는다면 'INSERT' 

    CREATE OR REPLACE PROCEDURE BookInsertOrUpdate(
        p_bookid IN number,
        p_bookname IN VARCHAR2,
        p_publisher IN varchar2,
        p_price IN varchar2
    )
    AS
        mycount NUMBER;
    BEGIN
        SELECT COUNT(*) INTO mycount FROM book WHERE bookname=p_bookname;

        IF mycount !=0 THEN
            UPDATE BOOK SET price = p_price WHERE bookname =p_bookname;
        ELSE
            INSERT INTO book VALUES(p_bookid, p_bookname, p_publisher, p_price);
        END IF;
    END;
    /

주문이 발생하면 상품 테이블의 재고 수량이 감소하는 트리거

    CREATE TABLE 주문(

        주문번호 NUMBER PRIMARY key,
        상품번호 NUMBER REFERENCES 상품(상품번호),
        고객번호 NUMBER,
        주문수량 NUMBER,
        주문일 DATE
    );

    ------- 주문이 발생하면 상품 테이블의 재고 수량이 감소하는 트리거  -------
    CREATE OR REPLACE TRIGGER iforderedDecrease재고수량
    AFTER INSERT ON 주문 FOR EACH ROW
    DECLARE 
    BEGIN
        UPDATE 상품 SET 재고수량 = 재고수량 - :NEW.주문수량
        WHERE :new.상품번호 = 상품번호;
    END;
    /

    INSERT INTO 주문 VALUES(1, 100, 1, 10, sysdate);
    SELECT * FROM 상품;
    SELECT * FROM 주문;

결과

BEFORE 가 꼭 와야할 경우?

예시
자식 테이블에 INSERT가 발생하였음
헌데, INSERT 값이 부모 테이블로 반드시 참조되는 컬럼인 경우에는 부모 테이블에 없다면 추가할 수 없다.
해당 경우에는 먼저 실행되어 부모테이블에 레코드를 추가 해야 할 경우 이때에는 before 시점이 와야 한다.

PL/SQL의 대입 연산자

:=  (콜론 =)

PL/SQL의 문자열 + 연산자

|| (파이프 파이프)

FUNCTION (사용자 정의함수)

  • 사용자가 select 절에 사용할 수 있는 사용자가 필요한 함수를 만들 수 있음
  • SUM, MAX, MIN, COUNT 이러한 함수들은 모두 select절에 사용할 수 있음
  • select 절에 사용되어야 하니 반드시 반환 값이 필요
CREATE OR REPLACE FUNCTION 함수명 (매개변수명 자료형) RETURN 자료형
IS
   변수선언
BEGIN
  함수가 해야 할 문장(들)
  RETURN 값:
END;

판매금액을 별 이익금 반환 함수

    /* 판매금액을 매개변수로 전달받아 이익금을 반환하는 함수
      판매금액이 30000원이상이면 10% 그렇지 않으면 5%가 이익금.*/

    create or replace function margin(saleprice number) 
    return number
    is
        result number;
    begin
        if saleprice >= 30000 then
            result := saleprice * 0.1;
        else
            result := saleprice * 0.05;
        end if;
        return result;
    end;
    /
    SELECT orderid, saleprice, margin(saleprice) FROM orders;

데이터모델링

  • 데이터베이스를 구축 전 필요한 테이블들을 도출하고 각테이블을 어떠한 속성으로 구성되는지 도출하고 각 테이블을 어떤 속성으로 관꼐가 있는지 설계하는 과정

데이터모델링 결과의 산출물

테이블 명세서
인스턴스 명세서
ERD

과정

요구사항 분석

개념적 설계
- DBMS에 독립적인 개념적 구조 설계
- 사용자의 요구사항을 분석한 결과를 ERD로 표현한다.
결과물 : ERD

논리적 설계
- DBMS에 적합한 논리적 구조 설계
결과물 : 논리적 스키마(릴레키션 스키마)

테이블  릴레이션  
속성  열의 이름  
도메인  속성이 취할 수 있는 값들의 집합  


: 릴레이션에서 

튜플 : 릴레이션에서 한행

개체 (네모)
속성 (동그라미)
관계 (마름모) - 동사로 이루어져있음

물리적 설계
DBMS로 구현 가능한 물리적 설계
결과물 : 물리적 스키마

데이터베이스 구축

 

정규화 (Nomalization)

데이터의 중복을 최소화하고 데이터의 안정성을 확보하기 위해 테이블을 분리하는 작업

그니까 동일 컬럼이 여러 테이블에 존재하면 안된다는 것임.

 

무정규화 상태 (한 테이블에 다 때려넣을 때)

추가, 삭제, 수정 시 이상현상이 발생한다

anomaly(이상 현상)

 

이상현상을 제가ㅓ화는 과정을 정규화라고 한다

종속관꼐를 분석하여 여러개의 릴레이션으로 분해하여 해결한다

 

반응형