데이터베이스

Hyun Lee·2023년 4월 3일
0

University

목록 보기
3/9

<1장 데이터베이스 시스템>

  • 데이터베이스: 조직체의 응용 시스템들이 공유해서 사용하는 운영 데이터 들이 구조적으로 통합된 모임이다.
    데이터베이스의 구조는 사용되는 데이터 모델에 의해 결정된다.

  • 데이터베이스 관리 시스템(DBMS): 데이터베이스를 정의하고, 질의어를 지원하고, 리포트를 생성하는 등의 작 업
    을 수행하는 소프트웨어

  • 데이터베이스 스키마/ 내포(intension) : 전체적인 데이터베이스 구조를 뜻.
    데이터베이스의 모든 가능한 상태를 미리 정의. 메타데이터

  • 데이터베이스 상태/ 외연(extension) : 특정 시점의 데이터베이스의 내용을 의미하며, 계속해서 바뀜

  • 화일시스템: 데이터가많은화일에중복해서저장됨/동시성제어X/질의어제공X/보안미흡/회복기능X/ 프로그램-데이더 독립성X / 검색, 갱신 절차 복잡 / 데이터 공유와 융통성 부족

  • DBMS : 중복성과 불일치가 감소 / 시스템을 개발하고 유지하는 비용이 감소 / 표준화를 시행하기가 용이 /
    보안 향상/ 무결성이 향상됨 / 다양한 유형의 고장으로부터 데이터베이스를 회복/ 데베 공유와 동시접근 ( 단점: 추가적인 하드웨어 구입 비용/ DBMS 자체의 비용/ 직원들의 교육 비용/ 비밀과 프라이버시 노출 )

  • 데이터 모델: 데이터베이스의 구조를 기술하는데 사용되는 개념들의 집합인 구조(데이터 타입과 관계), 연산자들, 무결성 제약조건들
    고수준 또는 개념적 데이터 모델: 엔티티-관계(ER), 객체지향, 객체 관계 데이터 모델
    표현(구현) 데이터 모델: 계층 데이터 모델, 네트워크 데이터 모델, 관계 데이터 모델
    저수준 또는 물리적인 모델: ISAM, VSAM

  • DBMS 언어
    -> 데이터 정의어(DDL): CREATE, ALTER, DROP
    -> 데이터 조작어(DML): SELECT, UPDATE, DELETE, INSERT. (절차/비절차적 언어)
    -> 데이터 제어어(DCL): 데이터베이스 트랜잭션을 명시하고 권한을 부여하거나 취소

  • DBMS 사용자
    -> 데이터베이스 관리자(DBA) : 일관성 있는 데이터베이스 스키마 생성 유지
    -> 응용 프로그래머: 특정 응용이나 인터페이스를 구현하는 사람. 내포된 조작어 사용. 기작성 트랜잭션(초보 사용자들이 이를 반복 수행)을 작성
    -> 최종 사용자: 데이터베이스 사용하는 사람. 캐주얼 사용자& 초보 사용자
    -> 데이터베이스 설계자
    -> 오퍼레이터: DBMS가 운영되고 있는 컴퓨터 시스템과 전산실을 관리

  • ANSI/SPARC 아키텍처
    -> 외부단계:각사용자의뷰
    -> 개념 단계: 사용자 공동체의 뷰, 조직체 전체에 관한 스키마 포함. 데베마다 오직1개 à 내부단계:물리적또는저장뷰.인덱스,해싱등접근경로나데이터압축기술

  • 스키마 간의 사상: 외부/개념 사상, 개념/내부 사상

  • 논리적데이터독립성:개념스키마변화로외부스키마영향안받음

  • 물리적 데이터 독립성: 내부 스키마 변화로 개념,외부 스키마 영향 안 받음

  • 데이터베이스 시스템 아키텍처

  • 데이터 정의어 컴파일러(DDL compiler) 모듈

  • 질의 처리기(query processor) 모듈

  • 런타임 데이터베이스 관리기(run-time database manager)

  • 트랜잭션 관리(transaction management) : 모듈 동시성 제어 모듈, 회복 모듈

  • 데이터베이스 API => ODBC(Open Database Connectivity) 서로 상대방의 데이터베이스를 접근

  • 중앙 집중식 데이터베이스 시스템: 하나의 컴퓨터 시스템에서 운영됨

  • 분산 데이터베이스 시스템: 네트워크로 연결된 여러 사이트에 데이터베이스 자체가 분산,
    여러 컴퓨터 시스템에서 운영됨. 사용자는 하나인줄ᄏᄏ

  • 클라이언트-서버 데이터베이스 시스템: 자체 컴퓨팅 능력을 가진 클라이언트를 통해 데이터베이스 서버를 접근. 데이터베이스가 하나의 데이터베이스 서버에 저장 (데베를 넓은 지역에서 접근, 보안은 좀 취약)

<2장 관게데이터모델과 무결성 제약 조건>

  • 사용자는 원하는 데이터(what)만 명시하고, 어떻게 이 데이터를 찾을 것인가(how)는 명시할 필요가 없음

  • 도메인(domain): 한 애트리뷰트에 나타날 수 있는 값들의 집합. 데이터 타입과 유사함.
    복합 애트리뷰트나 다치 애트리뷰트는 허용되지 않음 CREATE DOMAIN DNO INTERGER

  • 릴레이션 스키마(내포) : 릴레이션이름(애트리뷰트1, 애트리뷰트2, ... 애트리뷰트N)

  • 릴레이션 인스턴스(외연) : 어느 시점에 들어 있는 투플들의 집합

  • 관계 데이터베이스 스키마: 하나 이상의 릴레이션 스키마들로 이루어짐

  • 관계 데이터베이스 인스턴스: 릴레이션 인스턴스들의 모임으로 구성됨

  • 릴레이션 : 투플들의 집합. 동일한 투플이 두 개 이상 없음. 한 투플의 각 애트리뷰트는 원자값 가짐(한칸한값)

릴레이션의 키

  • 수퍼키: 한 릴레이션에서 투플을 고유하게 식별하는 하나의 애트리뷰느 또는 애트리뷰트들의 집합 à 후보키: 각 투플을 고유하게 식별하는 최소한의 애트리뷰트들의 모임, 두개 이상이면 ‘복합키’
  • 기본키:후보키가두개이상있으면이들중에서하나를기본키로선정
  • 대체키:기본키가아닌후보키
  • 왜래키: 어떤 릴레이션의 기본 키를 참조하는 애트리뷰트

무결성 제약조건

도메인 제약조건

애트리뷰트 값의 값을 지정하거나, 지정할 수 있음
데이터 형식을 통해 값들의 유형을 제한하고, CHECK 제약 조건을 통해 값들의 범위를 제한할 수 있음

키 제약조건

키 애트리뷰트에 값이 안됨

기본 키와 엔티티 무결성 제약조건

  • 릴레이션의 기본 키를 구성하는 어떤 애트리뷰트도 널값을 가질 수 없음
  • 대체 키에는 적용되지 않음
  • 사용자는 릴레이션을 생성하는 데이터 정의문에서 어떤 애트리뷰트가 릴레이션의 기본 키의 구성요소인가를 DBMS에게 알려줌
  • PRIMARY KEY (ENPNO);

왜래 키와 참조 무결성 제약조건

  • 참조 무결성 제약조건은 두 릴레이션의 연관된 투플들 사이의 일관성을 유지하는데 사용됨
  • 관계 데이터베이스가 릴레이션들로만 이루어지고, 릴레이션 사이의 관계들이 다른 릴레이션의 기본 키를 참조하는 것을 기반으로 하여 묵시적으로 표현되기 때문에 외래 키의 개념이 중요

<3장 관계대수와 SQL>

관계 대수

  • 관계해석 : 원하는 데이터만 명시하는 선언적인 언어
  • 관계 대수: 어떻게 질의를 수행할 것인가를 명시하는 절차적 언어, SQL의 기초,
    산술 연산자와 유사하게 단일 이나 두 개의 을 입력으로 받아 하나의 결과 릴레이션을 생성함

셀렉션 연산자

  • σ(실렉션 조건식)(R)

  • 릴레이션 R에서 실렉션 조건식을 만족하는 투플만을 선택하여 반환

  • 실렉션 조건을 프레디키트(predicate)라고도 함

  • ex)
    σ중간성적<기말성적(성적)
    σ이름=‘홍길동’(성적)
    σ(중간성적<기말성적)AND(이름=‘홍길동’)(성적)
    σ학년=4(성적)

프로젝션

  • π(애트리뷰트 리스트)(R)

  • 애트리뷰트 값으로만 구성된 투플을 반환, 중복 있을 있음.

  • ex) π EMPNO, EMPNAME, TITLE(EMPLOYEE)

합집합 호환

  • 두 릴레이션 R1(A1, A2, ..., An)과 R2(B1, B2, ..., Bm)이 합집합 호환
    일 필요 충분 조건은 , 모든 1<=i<=n에 대해 domain(Ai) = domain(Ai)

  • ex) π DNO(EMPLOYEE) 과 π DEPTNO(DPARTMENT)

합집합 연산자

  • R ∪ S

  • R 또는 S에 있거나 R과 S 모두에 속한 투플들로 이루어진 릴레이션, 중복 제외

  • ex) RESULT3 <- RESULT1 ∪ RESULT2

교집합 연산자

  • R ∩ S

  • R과 S 모두에 속한 투플들로 이
    루어진 릴레이션

  • 결과 릴레이션의 차수는 R 또는 S의 차수와 같음

  • ex) RESULT3 <- RESULT1 ∩ RESULT2

차집합 연산자

카티션 곱 연산자

  • R과 S의 투플들의 모든 가능한 조합으로 이루어진 릴레이션

관계 대수의 완전성

: 임의의 질의어가 적어도 필수적인 관계 대수 연산자들(셀렉션, 프로젝션, 합집합, 차집합, 카티션 곱) 만큼의 표현력을 갖고 있으면 관계적으로 완전하다고 말함

조인 연산자

: 두 개의 릴레이션으로부터 연관된 투플들을 결합하는 연산자
세타 조인(theta join), 동등 조인(equijoin), 자연 조인(natural join), 외부 조인(outer join), 세미 조인(semijoin) 등

세타 조인

동등 조인

자연 조인

디비전 연산자

  • R ÷ S => S에 속하는 모든 투플 u에 대하여 투플 tu (투플 t와 투플 u을 결합한 것)가 R에 존재 하는 투플 t들의 집합

집단 함수 연산자

  • SUM/ AVG/ COUNT/ MAX. AVG (salary) (EMPLOYEE)

그룹화

  • 각 부서별 DNO g AVG (salary) (EMPLOYEE)

외부조인

왼쪽 외부조인
오른쪽 외부조인
완전 외부 조인

왼쪽 세미 조인

오른쪽 세미 조인

SQL 개요

  • SQL: 비절차적 언어(선언적 언어)이므로 사용자는 자신이 원하는 바 (what)만 명시하며, 원하는 것을 처리하는 방법(how)은 명시할 수 없음

  • 관계 DBMS는 사용자가 입력한 SQL문을 번역하여 사용자가 요구한 데 이터를 찾는데 필요한 모든 과정을 담당

  • 대화식 SQL(interactive SQL), 내포된 SQL(embedded SQL)

  • 오라클 SQL의 구성요소
    : 데이터 검색/ 데이터 조작어/ 데이터 정의어/ 트랜잭션 제어/ 데이터 제어어

4.3 데이터 정의어와 무결성 제약조건

  • 스키마 생성과 제거

    CREATE SCHEMA my_db;
    DROP SCHEMA my_db;

  • 릴레이션 정의

  • MySQL 숫자형 데이터타입

  • MySQL 문자형 데이터타입

  • MySQL 숫자형 데이터타입

  • 릴레이션 제거

    DROP TABLE DEPARTMENT;

  • 애트리뷰트 추가

    ALTER TABLE EMPLOYEE ADD [COLUMN] PHONE CHAR(13);
    ALTER TABLE EMPLOYEE MODIFY [COLUMN] PHONE CHAR(10);
    ALTER TABLE EMPLOYEE DROP [COLUMN] PHONE;

  • 인덱스 생성 및 제거

    CREATE INDEX EMPNAME_IDX ON EMPLOYEE(EMPNAME);
    DROP INDEX EMPNAME_IDX ON EMPLOYEE;

  • 참조 무결성 제약조건 유지

    ON DELETE NO ACTION
    ON DELETE RESTRICT
    ON DELETE CASCADE -> 기본키의 삭제가 왜래키에도 파급됨
    ON DELETE SET NULL -> 삭제하고 NULL 넣음. 왜래키에도 적용
    ON DELETE SET DEFAULT -> (기능x)

    ON UPDATE NO ACTION
    ON UPDATE RESTRICT
    ON UPDATE CASCADE -> 기본키 업데이트. 왜래키도 적용
    ON UPDATE SET NULL -> 업데이트를 NULL함. 기본키 왜래키 모두 적용

  • 무결성 제약조건의 추가 및 삭제

    ALTER TABLE STUDENT ADD CONSTRAINT STUDENT_PK
    PRIMARY KEY (STNO);
    ALTER TABLE STUDENT DROP CONSTRAINT STUDENT_PK;
    ALTER TABLE STUDENT DROP FOREIGN KEY STUDENT_FK;
    ALTER TABLE STUDENT ADD CONSTRAINT STUDENT_FK FOREIGN KEY(DNO) REFERENCES DEPARTMENT(DEPTNO)
    ON DELETE CASCADE;

4.4 SELECT문

관계 데이터베이스에서 정보를 검색하는 SQL문
관계 대수의 실렉션과 의미가 완전히 다름
관계 대수의 실렉션, 프로젝션, 조인, 카티션 곱 등을 결합한 것
관계 데이터베이스에서 가장 자주 사용됨

  • 별칭(alias)
    : 서로 다른 릴레이션에 동일한 이름을 가진 애트리뷰트가 속해 있을 때 애트리뷰트의 이름을 구분하는 방법

    EMPLOYEE.DNO
    FROM EMPLOYEE AS E, DEPARTMENT AS D
    FROM EMPLOYEE E

  • 릴레이션의 모든 애트리뷰트나 일부 애트리뷰트들을 검색

    SELECT *
    FROM DEPARTMENT;

  • 원하는 애트리뷰트들의 이름 얻기

    SELECT DEPTNO, DEPTNAME
    FORM DEPARTMNET;

  • 상이한 값들을 검색, 중복 제거

    SELECT DISTINCT TITLE
    FORM EMPLOYEE;

  • 특정한 투플들의 검색

    SELECT *
    FROM DEPARTMENT
    WHERE DNO = 2;

  • 문자열 비교

    SELECT ENPNAME, TITLE, DNO
    FROM EMPLOYEE
    WHERE EMPNAME LIKE '이%';

    LIKE ‘S%’ => s로 시작하는 문자열
    LIKE ‘J_ _ _ _’ => 5글자 중 J로 시작
    LIKE ‘%x’ => x로 끝나는 문자열
    LIKE '_A%’ => 1글자 + A + 임의의 문자열

  • 다수의 검색 조건

    SELECT ENPNAME, SALARY
    FROM EMPLOYEE
    WHERE TITLE = 'RHKWKD' AND DNO = 1;

  • 부정 검색 조건

    SELECT ENPNAME, SALARY
    FROM EMPLOYEE
    WHERE TITLE = 'RHKWKD' AND DNO <> 1;

  • 범위를 사용한 검색

    SELECT ENPNAME, SALARY
    FROM EMPLOYEE
    WHERE SALARY BETWEEN 300 AND 450;

    WHERE SALARY >= 300 AND SALARY <= 450;

  • 리스트를 사용한 검색

    (1번이나 3번 부서 속한 사원 모든 정보)
    SELECT *
    FROM EMPLOYEE
    WHERE DNO IN (1, 3);

  • SELECT절에서 산술 연산자 (+, -, *, /) 사용

    SELECT ENPNAME, SALARY, SALARY * 1.1 AS NEWSALARY

  • 널값
    널값을 포함한 다른 값과 널값을 +, - 등을 사용하여 연산하면 결과는 널

    SELECT ENPNAME, SALARY, SALARY * 1.1
    FROM EMPLOYEE;

    COUNT(*)를 제외한 집단 함수들은 널값을 무시함

    SELECT COUNT(*), COUNT(DNO)
    FROM EMPLOYEE;

    어떤 애트리뷰트에 들어 있는 값이 널인가 비교하기 위해서 ‘DNO=NULL’, ‘DNO<>NULL’처럼 나타내면 안됨

    SELECT *
    FROM EMPLOYEE
    WHERE DNO is NULL;

    WHERE DNO is not NULL;

    다음과 같은 비교 결과는 모두 거짓
    NULL > 300, NULL = 300, NULL <> 300, NULL = NULL, NULL <> NULL

  • ORDER BY 절
    하나 이상의 애트리뷰트를 사용하여 검색 결과를 정렬 할 수 있음 (원래 투플들이 삽입된 순서대로 사용자에게 제시됨)
    SELECT문에서 가장 마지막에 사용되는 절
    디폴트 정렬 순서는 (ASC)

    SELECT SALARY, TITLE, EMPNAME
    FROM EMPLOYEE
    WHERE DNO = 2
    ORDER BY SALARLY;

    DESC를 지정하여 정렬 순서를 내림차순으로 지정할 수 있음
    널값은 오름차순에서는 가장 앞에 나타나고, 내림차순에서는 가장 뒤에 나타남

    ORDER BY DNO, SALARLY DESC;

  • 집단 함수
    한 릴레이션의 한 개의 애트리뷰트에 적용되어 단일 값을 반환함
    SELECT절과 HAVING절에만 나타날 수 있음

    SELECT AVG(SALARY) AS AVGSAL
    FROM EMPLOYEE;

    COUNT(*)를 제외하고는 널값을 제거한 후 남아 있는 값들에 대해서 집단 함수의 값을 구함

    SELECT COUNT(SALARY), SUM(SALARY)
    FROM EMPLOYEE;

    키워드 DISTINCT가 집단 함수에 사용되면 집단 함수가 적용되기 전에 먼저 중복을 제거함

    SELECT COUNT(DISTINCT DNO), SUM(DISTINCT SALARY)
    FROM EMPLOYEE;

  • 그룹화
    GROUP BY절에 사용된 애트리뷰트에 동일한 값을 갖는 투플들이 각각 하 나의 그룹으로 묶임. 이 애트리뷰트를 (grouping attribute)라고 함

    SELECT DNO, AVG(SALARY) AS AVGSAL, MAX(SALARY) AS MAXSSAL
    FROM EMPLOYEE
    GROUP BY DNO;

  • HAVING절
    어떤 조건을 만족하는 그룹들에 대해서만 집단 함수를 적용할 수 있음
    그룹화 애트리뷰트에 같은 값을 갖는 투플들의 그룹에 대한 조건을 나타내고, 이 조건을 만족하는 그룹들만 질의 결과에 나타남
    HAVING절에 나타나는 애트리뷰트는 반드시 GROUP BY절에 나타나거나 집단 함수에 포함되어야 함

    SELECT DNO, AVG(SALARY) AS AVGSAL, MAX(SALARY) AS MAXSSAL
    FROM EMPLOYEE
    GROUP BY DNO
    HAVING DNO < 3;

  • 집합 연산
    집합 연산을 적용하려면 두 릴레이션이 합집합 호환성(두 애트리뷰트 속성 같음)을 가져야 함
    UNION(합집합) => 중복 제거
    UNION ALL(합집합) => 중복 포함

    (SELECT DNO
    FROM EMPLOYEE
    WHERE EMPNAME = '김창섭';)
    UNION
    (SELECT DEPTNO
    FROM DPARTMENT
    WHERE DEPTNAME = '개발';)

  • 조인
    두 개 이상의 릴레이션으로부터 연관된 투플들을 결합
    조인 조건은 두 릴레이션 사이에 속하는 애트리뷰트 값들을 비교 연산자로 연결한 것으로 가장 흔히 사용되는 비교 연산자는 =
    조인 조건을 생략했을 때와 틀리게 표현했을 때는 카티션 곱이 생성됨
    애트리뷰트 이름 앞에 릴레이션 이름을 사용하는 것이 바람직하며, 두 릴레이션의 조인 애트리뷰트 이름이 동일하다면 반드시 애트리뷰트 이름 앞에 릴레이션 이름을 사용해야 함

    SELECT ENPNAME,DEPTNAME
    FROM EMPLOYEE AS E, DEPARTMENT AS D
    WHERE E.DNO = D.DEPTNO;

  • 자체 조인(self join)
    한 릴레이션에 속하는 투플을 동일한 릴레이션에 속하는 투플들과 조인하는 것.
    그 릴레이션에 대한 별칭을 두 개 지정 해야 함

    SELECT E.ENPNAME,M.ENPNAME
    FROM EMPLOYEE E, EMPLOYEE M
    WHERE E.MANAGER = M.EMPNO;

  • 조인과 ORDER BY의 조합

    SELECT DEPTNAME, ENPNAME, TITLE, SALARY
    FROM EMPLOYEE E, DEPARTMENT D
    WHERE E.DNO = D.DEPTNO;
    ORDER BY DEPTNAME, SALARY DESC;

  • 중첩 질의(nested query) = 부질의(subquery)
    외부 질의의 WHERE절에 다시 SELECT ... FROM ... WHERE 형태로
    포함된 SELECT문
    INSERT,DELETE,UPDATE문에도 사용될 수 있음

    1) 한개의 스칼라 값이 반환되는 경우

    SELECT ENPNAME, TITLE
    FROM EMPLOYEE
    WHERE TITLE =
    ( SELECT TITLE
    FROM EMPLOYEE
    WHERE ENPNAME = '박영권');

    2) 한 개의 애트리뷰트로 이루어진 릴레이션이 반환되는 경우
    중첩 질의의 결과로 한 개의 애트리뷰트로 이루어진 다수의 투플들이 반환될 수 있음
    외부 질의의 WHERE절에서 IN, ANY, ALL, EXISTS와 같은 연산자를 사용해야함

    • IN : 한 애트리뷰트가 값들의 집합에 속하는가 / NOT IN

      SELECT ENPNAME
      FROM EMPLOYEE
      WHERE DNO IN
      ( SELECT DEPTNO
      FROM DEPARTMENT
      WHERE DEPNAME = '영업' OR DEPNAME = '개발');

      조인 질의로 나타내면,,,
      SELECT ENPNAME
      FROM EMPLOYEE E, DEPARTMENT D
      WHERE E.DNO = D.DEPTNO
      AND (D.DEPTNAME = '영업' OR D.DEPNAME = '개발');

    • ANY: 한 애트리뷰트가 어떤 값들의 집합에 속하는 하나 이상의 값들과 어떤 관계를 갖는가를 테스트하는 경우 =ANY, >ANY , <ANY , <>ANY

      SELECT ENPNAME, DNO
      FROM EMPLOYEE
      WHERE DNO < ANY
      ( SELECT DEPTNO
      FROM DEPARTMENT
      WHERE DEPNAME = '영업' OR DEPNAME = '개발');

    • ALL: 값들의 집합에 속하는 모든 값들과 어떤 관계를 갖는가. 모두 만족시켜야 함
      =ALL, >ALL , <ALL , <>ALL

      SELECT ENPNAME, DNO
      FROM EMPLOYEE
      WHERE DNO <> ALL
      ( SELECT DEPTNO
      FROM DEPARTMENT
      WHERE DEPNAME = '영업' OR DEPNAME = '개발');

3) 여러 애트리뷰트들로 이루어진 릴레이션이 반환되는 경우
EXISTS 연산자를 사용하여 중첩 질의의 결과가 빈 릴레이션인지 여부를 검사함
중첩 질의의 결과가 빈 릴레이션이 아니면 참이 되고, 그렇지 않으면 거짓

SELECT ENPNAME
FROM EMPLOYEE E
WHERE EXISTS
( SELECT *
FROM DEPARTMENT D
WHERE E.DNO = D.DEPTNO
AND ( DEPNAME = '영업' OR DEPNAME = '개발'));

  • 상관 중첩 질의
    중첩 질의의 WHERE절에 있는 프레디키트에서 외부 질의에 선언된 릴레이션의 일부 애트리뷰트를 참조하는 질의
    외부 질의로 한 번만 결과를 반환하면 상관 중첩 아님
    상관 중첩 질의는 외부 질의를 만족하는 투플 수만큼 여러 번 수행될 수 있음

    SELECT ENPNAME, DNO, SALARY
    FROM EMPLOYEE E
    WHERE SALARY >
    ( SELECT AVG(SALARY)
    FROM EMPLOYEE
    WHERE DNO = E.DNO );

4.5 INSERT, DELETE, UPDATE 문

  • INSERT: 기존의 릴레이션에 투플을 삽입

    • 릴레이션에 한 번에 한 투플씩 삽입하는 INSERT문

      INSERT INTO DEPARTMENT
      VALUES ( 5,'연구', NULL );

      INSERT INTO DEPARTMENT (DEPTNO, DEPTNAME)
      VALUES ( 6,'인사');

    • 릴레이션에 한 번에 여러 개의 투플들을 삽입하는 INSERT문

      INSERT INTO HIGH_SALARY (ENAME, TITLE, SAL)
      SELECT ENPNAME, TITLE, SALARY
      FROM EMPLOYEE
      WHERE SALARY >= 30000;

  • DELETE: 한 릴레이션으로부터 한 개 이상의 투플들을 삭제함

    DELETE FROM DEPARTMENT
    WHERE DEPTNO = 4;

  • UPDATE: 한 릴레이션에 들어 있는 투플들의 애트리뷰트 값들을 수정

    UPDATE EMPLOYEE
    SET DNO = 3, SALARY = SALARY*1.05
    WHERE EMPNO = 2016;

4.6 저장 프로시저(stored procedure)

  • 대부분의 데이터베이스는 저장 프로시저라는 기능을 제공

  • 관계 데이터베이스를 위한 표준 데이터 언어인 SQL에 절차적인 언어의 기능(예를 들어, IF-THEN, WHILE 루프 등)을 추가하여 확장한 언어

  • MS SQL Server : 트랜잭트(Transact)-SQL
    ORACLE : PL/SQL

    DELIMITER $$
    CREATE PROCEDURE 스토어드 프로시저이름(IN 또는 OUT 파라미터)
    BEGIN
          SQL프로그래밍 코딩
    END $$
    DELIMITER ;

    CALL 스토어드 프로시저이름();

  • IN 입력매개변수이름 데이터형식

  • OUT 출력매개변수이름 데이터형식

    DELIMITER $$
    CREATE PROCEDURE GetEmployee (IN Name char(10), OUT Sal int)
    BEGIN
    SELECT salary INTO Sal
    FROM EMPLOYEE
    WHERE EMPNAME = Name;
    END $$
    DELIMITER ;

    CALL GetEmployee ('김상원', @Sal);
    SELECT @sal

  • 변수 선언, IF 문

    DELIMITER $$
    CREATE PROCEDURE GetEmployee (IN Name char(10))
    BEGIN
    DECLARE VDno INT;
    DECLARE vDnoavg INT;
    DECLARE Salary INT;
    ------------------------------------------변수 선언
    SELECT DO INTO VDno
    FROM EMPLOYEE
    WHERE EMPNAME=Name;
    ----------------------------------------------1
    SELECT AVG(SALARY) INTO vDnoavg
    FROM EMPLOYEE
    WHERE DNO=vDnO;
    ----------------------------------------------2
    SELECT SALARY INTO Salary
    FROM EMPLOYEE
    WHERE EMPNAME=Name;
    ----------------------------------------------3
    IF (vSalary > VDnoavg) THEN
          SELECT 평균보다 밀급이 많군요'
    ELSE
          SELECT '평균보다. 및급이 많지 않군요';
    END IF;
    ----------------------------------------------if else
    END $$
    DELIMITER ;

4.7 트리거

: 명시된 이벤트(데이터베이스의 갱신)가 발생할 때마다 DBMS가 자동적으로 수행하는, 사용자가 정의하는 문(프로시저)

  • 데이터베이스의 무결성을 유지하기 위한 일반적이고 강력한 도구

  • 테이블 정의 시 표현할 수 없는 기업의 비즈니스 규칙들을 시행하는 역할

  • 트리거를 명시하려면 트리거를 활성화시키는 사건인 이벤트(insert, delete, update),
    트리거가 활성화되고 조건이 참일 때 수행되는 문(프로시저)인 동작을 표현해야 함

  • SQL3 표준에 포함되었으며 대부분의 상용 관계 DBMS에서 제공됨

    DELIMITER //
    CREATE TRIGGER testTrg
          AFTER DELETE
          ON EMPLOYEE
          FOR EACH ROW
    BEGIN
          SET @msg = '직원이 삭제됨';
    END //
    DELIMITER ;

    DELETE FROM EMPLOYEE
    WHERE EMPNAME=' 김상원 ';
    SELECT @msg;

  • 삭제된 데이터 가져오기

    CREATE TABLE D_NAME( DNAME CHAR(10) );

    DELIMITER //
    CREATE TRIGGER testTrg
          AFTER DELETE
          ON EMPLOYEE
          FOR EACH ROW
    BEGIN
          INSERT INTO D_NAME VALUES(OLD.ENPNAME);
    END //
    DELIMITER ;

    DELETE FROM EMPLOYEE
    WHERE EMPNAME=' 김상원 ';
    SELECT @msg;

<5장 데이터베이스 설계와 ER 모델>

  • 데이터베이스 설계: 개념적 설계/ 물리적 설계
  • 개념적 모델은 엔티티-관계 (ER) 모델 -> 구현 데이터 모델은 관계 데이터 모델
  • 설계:
  1. 요구사항 수집과 분석 : 엔티티, 애트리뷰트 무엇인가
  2. 개념적 설계: 요구사항 명세로부터 개념적 스키마가 만들어짐 (ER) 모델
  3. DBMS 선정:
  4. 논리적 설계: 개념적 스키마를 관계데이터베이스 스키마(논리적 스키마)로 사상, 정규화 과정 적용
  5. 물리적 설계: 저장 구조와 접근 경로 결정
  6. 트랜잭션 설계: 트랜잭션은 완성될 데이터베이스에서 동작할 응용 프로그램

ER 모델: 엔티티, 애트리뷰트, 엔티티들 간의 관계로 그래픽하게 표현함. 쉽게 관계 데이터 모델로 사상됨

엔티티: 엔티티 타입- 엔티티들의 틀 (내포) / 엔티티 집합- 엔티티들의 모임 (외연)

  • 엔티티 타입:
    -> 강한 엔티티 타입: 키 애트리뷰트를 사용하여 고유하게 엔티티들을 식별
    -> 약한 엔티티 타입: 키를 형성하기에 충분한 애트리뷰트들을 갖지 못한 엔티티 타입. (이중선 사각형)
    약한 엔티티 타입에(부양가족)게 키 애트리뷰트를 제공하는 엔티티 타입을 소유 엔티티 타입 또는 식별 엔티티 타입(직원)이라 함.
    부분키: 부양 가족의 이름, 유도된 애트리뷰트

애트리뷰트

-> 단순 애트리뷰트: 더 이상 다른 애트리뷰트로 나눌 수 없는 애트리뷰트
-> 복합 애트리뷰트: 두 개 이상의 애트리뷰트로 이루어진 애트리뷰트
-> 단일 값 애트리뷰트: 각 엔티티마다 정확하게 하나의 값을 갖는 애트리뷰트 = 단순 애트리뷰트 è다치애트리뷰트:각엔티티마다여러개의값을가질수있는애트리뷰트,취미, (이중선타원) è 저장된 애트리뷰트: 독립적으로 존재 = 단순 애트리뷰트
-> 유도된 애트리뷰트: 다른 애트리뷰트의 값으로부터 얻어진 애트리뷰트, (점선 타원)

관계: 관계 집합은 동질의 관계들의 집합/ 관계 타입은 동질의 관계들의 틀. 동사. 다이아몬드

  • 관계의 애트리뷰트: 관계의 특징 기술. 키 애트리뷰트를 갖지 않음

차수

: 관계로 연결된 엔티티 타입들의 개수. 1진/2진/3진/ n진 관계

카디날리티

: 한 엔티티 타입의 몇개의 엔티티가 다른 엔티티 타입의 몇개의 엔티티와 연결되어 있는가
-> 1:1
-> 1:N
-> N:N

참여

-> 전체
-> 부분

다중

순환적관계

:하나의 엔티티타입이 동일한 관계타입에 두번이상 참여하는 것...>역할표시
관계: 두 엔티티 타입 사이에 두 개 이상의 관계 타입이 존재할 수 있음

*역할: 관계 타입의 의미를 명확하게 하기 위해 사용. 특히 하나의 관계 타입에 하나의 엔티티 타입이 여 러 번 나타나는 경우에는 반드시 역할을 표기

새발 표기법

: 내부는 참여, 외부는 카디날리티

ER 스키마를 관계 모델의 릴레이션으로 사상 =>7단계

  1. 정규 엔티티 타입과 단일 값 애트리뷰트 (다치 제외!!!)
  2. 약한 엔티티 타입과 단일 값 애트리뷰트. => 기본키: 부분키+외래키
  3. 2진1:1관계타입 =>완전참여애트리뷰트에..왜래키추가/r새로운릴레이션
  4. 정규 2진 1:N 관계 타입 => N측 애트리뷰트에.. 왜래키 추가 /r 새로운 릴레이션
  5. 2진 M:N 관계 타입 => r 새로운 릴레이션.....왜래키+외래키=기본키
  6. 3진 이상의 관계 타입 => r 새로운 릴레이션.....왜래키+외래키+외래키=기본키 ( 1:n:m 이면 1인 왜래키는 기본키에서 제외)
  7. 다치 애트리뷰트 => r 새로운 릴레이션......왜래키+다치=기본키
profile
01 | Computer Science.

0개의 댓글