데이터베이스 설계

  • 개념적 데이터베이스 설계 : 정보 사용의 모델을 개발하는 과정으로 실세계를 바탕으로 추상화 모델을 구축한다.
    • 엔티티-관계 (ER: Entity-Relationship)모델이 주로 사용된다.
  • 물리적 데이터베이스 설계 : 물리적인 저장 장치와 접근 방식을 다룸
  • 엔티티 : 서로 구분이 되며 조직체에서 DB에 나타내려는 객체를 의미
  • 관계 : 두 개 이상의 엔티티들 간의 연관
  • 프로세스 : 관련된 활동
  • 무결성 제약조건 : 데이터의 정확성과 비즈니스 규칙을 의미
데이터베이스 설계의 개요
한 조직체의 운영과 목적을 지원하기 위해 DB를 생성하는 과정이다. 
목적은 모둔 주요 응용과 사용자들이 요구하는 데이터, 관계를 표현하는 것

데이터베이스 설계의 주요단계
- 요구사항 분석, 개념적 설계, DBMS의 선정, 논리적 설계, 물리적 설계, 트랜잭션 설계
  • 요구사항 수집 및 분석 : 기존의 문서 조사, 인터뷰나 설문 → 엔티티, 애트리뷰트, 관계 파악
    • 데이터 처리에 관한 요구사항 → 연산의 종류, 데이터의 양 분석
  • 개념적 설계 : 조직체에서 사용되는 정보의 모델을 구축
    • 사용자의 요구사항 명세로부터 개념적 스키마가 만들어짐
    • ER모델과 같은 높은 추상화 수준의 데이터 모델을 기반으로 구조 명시
    • 엔티티 타입, 애트리뷰트 도메인, 키 애트리뷰트를 결정
  • DBMS 선정 : 기술적, 정치적, 경제적 요인을 검토하여 선정
  • 논리적 설계 : 개념적 스키마에 알고리즘을 적용해 논리적 스키마를 생성, 스키마로 사상하는 과정
  • 물리적 설계 : 응답 시간, 트랜잭션 처리율 등의 성능 기준으로 요구사항을 만족시키는 구조를 결정
  • 트랜잭션 설계 : 완성될 DB에서 동작할 응용 프로그램에 대한 설계를 진행
ER 모델 : 개념적 설계를 위한 모델, 실세계를 엔티티, 애트리뷰트, 관계로 표현함
- 관계 데이터 모델로 사상하기 용이하며 엔티티, 관계, 애트리뷰트 및 카디날리티, 제약조건 등의 구문이 있다.

엔티티
  • 실세계에 독립적으로 존재하며 고유하게 식별이 가능한 객체
  • 생각이나 개념과 같이 추상적인 것도 있다.
  • 엔티티 타입은 동일한 애트리뷰트들을 가진 엔티티들의 틀
  • 엔티티 집합은 동일한 애트리뷰트들을 가진 엔티티들의 모임
  • 엔티티 타입은 내포, 엔티티 집합은 외연에 해당된다.
  • ER 다이어그램에서 직사각형으로 나타냄
  • 강한 엔티티 타입 ; 자신의 키 애트리뷰트를 사용하여 고유하게 엔티티들을 식별할 수 있는 엔티티 타입
  • 약한 엔티티 타입 : 키를 형성하기에 충분한 애트리뷰트들을 갖지 못한 엔티티 타입. 소유 엔티티 타입이 필요하다.
애트리뷰트
  • 하나의 엔티티는 연관 애트리뷰트들의 집합으로 설명된다.
    • 사원 엔티티는 사원번호, 이름, 직책, 급여 등의 애트리뷰트를 갖는다.
  • 애트리뷰트의 도메인은 그 애트리뷰트가 가질 수 있는 모든 값들의 집합으로, 여러 애트리뷰트가 동일한 도메인을 공유할 수 있다.
  • 키 애트리뷰트는 한 엔티티 타입 내에서 각 엔티티를 고유하게 식별한다.
  • 요구사항 명세에서 명사나 형용사로 표현된다.
  • ER 다이어그램에서 타원형
  • 단순 애트리뷰트 : 더 이상 다른 애트리뷰트로 나눌 수 없는 애트리뷰트
  • 복합 애트리뷰트 : 두 개 이상의 애트리뷰트로 이루어진 애트리뷰트. 밀접히 연관된 것을 모아놓은 것이다.
  • 단일 값 애트리뷰트 : 각 엔티티마다 정확히 하나의 값을 갖는 애트리뷰트 (대부분)
  • 다치 애트리뷰트 : 각 엔티티마다 여러 개의 값을 가질 수 있는 애트리뷰트. 이중선 타원으로 표현한다.
  • 저장된 애트리뷰트 : 다른 애트리뷰트와 독립적으로 존재하는 애트리뷰트
  • 유도된 애트리뷰트 : 다른 애트리뷰트의 값으로부터 얻어진 애트리뷰트. 점선 타원으로 표현한다. 
관계와 관계 타입 : 엔티티들 사이에 존재하는 연관, 연결로서 다이아몬드로 표현된다.
차수 : 관계로 연결된 엔티티 타입들의 개수. 2진 관계가 가장 흔하다.
카디날리티 : 하나의 엔티티가 참여할 수 있는 관계의 수를 말한다.
  • 1:1 관계, 1:N 관계, M:N 관계
  • 관계 실선 위에 최솟값과 최댓값이 표시된다. * (아스테리카) 표시는 n을 나타낸다.



ER 스키마를 관계 모델의 릴레이션으로 사상
  • 엔티티 타입과 단일 값 애트리뷰트 
    • 단계1_정규 엔티티 : 각 정규 엔티티 타입에 있던 단순 애트리뷰트를 릴레이션에 포함, 복합 애트리뷰트는 단순 애트리뷰트만 포함
    • 단게2_약한 엔티티 : 약한 엔티티 타입에 있던 단순 애트리뷰트를 릴레이션에 포함, 부분 키와 소유 엔티티의 기본 키를 외래키로 포함시켜 기본 키 구성 
  • 2진 관계 타입 
    • 단계3_2진 1:1관계 : 둘 중 하나의 릴레이션에서 기본 키를 나머지 릴레이션의 외래 키로 포함시키거나 다른 릴레이션을 만들어 포함
    • 단계4_2진 1:N관계 : 1측의 릴레이션 기본 키를 N측의 외래 키로 포함시킨다.
    • 단계5_2진 M:N관계 : 릴레이션을 새로 생성해서 M과 N측의 기본 키를 외래 키로 포함시킨다. 외래 키의 조합이 새로운 릴레이션의 기본 키가 된다.
  • 3진 이상 관계 타입
    • 단계6 : 새로운 릴레이션을 생성하고, 각 참여 릴레이션의 기본 키를 새로운 릴레이션의 외래 키로 포함. 이 외래 키의 조합이 기본 키가 된다.
    • 1:N:N의 경우는 1측의 기본 키를 참조하는 외래 키를 제외한 나머지 외래 키들의 조합이 기본 키가 된다.
  • 다치 애트리뷰트
    • 각 다치 애트리뷰트에 대해 새로운 릴레이션을 생성


INSERT문

  • 기존의 릴레이션에 투플을 삽입
  • 참조되는 릴레이션에 삽입되는 경우 문제 없음.
  • 참조하는 릴레이션에 삽입되는 경우 참조 무결성 제약조건 위배가능
  • INSERT  INTO 릴레이션 (애트리뷰트1, ..., 애트리뷰트n)  VALUES (값1, ..., 값n);
  • 릴레이션에 한 번에 여러 개의 투플들을 삽입하는 경우 WHERE절을 이용해 지정해주면 된다.
DELETE문
  • 한 릴레이션으로부터 한 개 이상의 투플들을 삭제
  • 참조되는 릴레이션은 참조 무결정 제약조건 위배가능
  • 참조하는 릴레이션을 삭제하는 경우 문제 없음
  • DELETE  FROM 릴레이션  WHERE 조건;
UPDATE문
  • 한 릴레이션에 들어 있는 투플들의 애트리뷰트 값들을 수정
  • 기본 키나 외래 키에 속하는 애트리뷰트의 값이 수정되면 참조 무결성 제약조건을 위배할 수 있음
  • UPDATE 릴레이션  SET 애트리뷰트 = 값  WHERE 조건;
트리거 : 명시된 이벤트가 발생할 때마다 DBMS가 자동적으로 수행하는, 사용자가 정의하는 문으로 DB의 무결성을 유지하기 위한 일반적이고 강력한 도구이다.
트리거 활성(이벤트) -> 수행되는 조건(컨디션) -> 조건이 참일 때 수행되는 동작 (액션) ☞ 이벤트-조건-동작(ECA)규칙


내포된 SQL (embedded SQL)

  • SQL이 호스트 언어의 완전한 표현력을 갖고 있지 않기 때문에 모든 질의를 표현할 수는 없다.
  • SQL은 조건문과 반복문, 입출력, GUI등의 기능이 미약하다.
  • 따라서 C나 자바를 이용한 프로그램에 SQL문을 삽입하여, DB에 접근하는 부분은 SQL이 맡고 SQL에 없는 기능은 호스트 언어로 작성하는 형태를 내포된 SQL이라고 한다.
  • 데이터 구조의 불일치 문제(impedance mismatch)가 발생할 수 있다.
  • 호스트 변수는 SQL문에 포함된 C프로그램의 변수이다. 둘 사이의 통신을 위해 사용 (EXEC SQL ~)
    • 정적인 SQL문 : C프로그램에 내포된 오나전한 SQL문
    • 동적인 SQL문 : 불완전한 SQL문으로서 일부 또는 전부를 질의가 수행될 때 입력할 수 있다.
  • 커서 : 호스트 언어와 SQL문 사이의 불일치 문제를 해결하기 위해 사용된다. 한 번에 한 투플씩 가져오는 수단이다.
WHENEVER절 : 자동적인 에러 검사와 에러 처리를 위한 구문
- WHENEVER <조건> <동작> 형식으로 사용된다.

SQL 통신 영역 (SQLCA) : C프로그램에 내포된 SQL문에 발생하는 에러들을 사용자에게 알려준다.
오라클 통신 영역 (ORACA) : SQLCA 표준을 오라클에서 확장한 구조체




SQL : 현재 관계 DBMS 시장에서 널리 사용되는 ANSI (미국 표준 기구) 표준 언어

  • 비절차적 언어이므로 원하는 바만 명시, 처리하는 방법은 명시하지 않음
  • 대화식 SQL과 내포된 SQL이 있다.
  • 관계 DBMS는 사용자가 입력한 SQL문을 번역, 요구한 데이터를 찾는데 모든 과정을 담당한다.

데이터 정의어

  • 스키마의 생성 : CREATE (DOMAIN, TABLE, VIEW...)
    • CREATE SCHEMA MY_DB
  • 스키마의 제거 : DROP (DOMAIN, TABLE, VIEW...)
    • DROP SCHEMA MY_DB
  • 릴레이션의 정의에 사용되는 오라클 데이터 타입
    • INT, NUMBER(n, s) : 정수와 소수점
    • CHAR(n), VARCHAR(n) : 문자열과 가변 문자열
  • 제약조건
    • NOT NULL, UNIQUE, CHECK ...
  • 참조 무결성 제약조건
    • ON DELETE NO ACTION
    • ON DELETE CASCADE : 기본 키 삭제시 외래 키도 삭제된다.
    • ON DELETE SET NULL : 참조되는 값 삭제시 참조하는 값을 NULL로 바꾼다.
    • ON DELETE SET DEFAULT : NULL이 아닌 DEFAULT값으로 바꾼다.
    • ON UPDATE NO ACTION

SELECT절
  • 관계 DB에서 정보를 검색하는 SQL문
    • 관계 대수의 실렉션, 프로젝션, 조인, 카티션 곱 등을 결합한 것으로 가장 자주 사용된다.
    • SELECT절과 FROM절은 필수적, 나머지는 선택 사항
    SELECT         [DISTINCT] 애트리뷰트(들)
    FROM          릴레이션(들)
    [WHERE        조건
           [중첩 질의]]
    [GROUP BY   애트리뷰트(들)]
    [HAVING      조건]
    [ORDER BY   애트리뷰트(들) [ASC|DESC]];

    • * (아스테리카)를 사용하면 전체에 대해 검색할 수 있다.
    • 보통은 애트리뷰트를 열거해 검색
    • DISTINCT를 사용하면 중복을 제거해 준다.
    • 산술 연산자를 이용할 수 있다.


    WHERE절 : 검색 조건을 명시

    • % (퍼센트 기호)를 이용해 문자열을 비교할 수 있다. 
      • WHERE EMPNAME LIKE '이%'   ☞  '이씨 성을 가진'
    • 부울 연산자 (AND, OR, <>(NOT))를 이용해 조건을 제시할 수 있다.
    • 범위 연산자도 가능
    • 리스트를 사용한 검색이 가능하다.
      • WHERE DNO IN (1, 3)  ☞  '1번 부서나 3번 부서에 소속된'
    • NULL값과의 직접적인 비교는 불가능하다. 
      • IS NULL, IS NOT NULL 등으로 사용가능

    ORDER BY절 :  오름차순(ASC)과 내림차순(DESC)으로 정렬할 때 사용한다. 
    - SELECT절에 명시한 애트리뷰트들을 사용해서 정렬해야 한다.

    AS문 : 서로 다른 릴레이션에 동일한 이름을 가진 애트리뷰트가 있을 때 구분하기 위한 방법
    - EMPLOYEE AS E, DEPARTMENT AS D

    집단 함수
    • DB에서 검색된 여러 투플들의 집단에 적용되는 함수
    • 한 개의 애트리뷰트에 적용되어 단일 값을 반환한다.
    • SELECT절과 HAVING절에만 나타날 수 있음
    • COUNT(*)는 릴레이션의 모든 행들의 총 개수
    • COUNT(애트리뷰트)는 해당 애트리뷰트에서 널값이 아닌 값들의 갯수
    • SUM, AVG, MAX, MIN ..
    그룹화 : GROUP BY절에 사용된 애트리뷰트에 동일한 값을 갖는 투플들이 묶인다.

    HAVING절 : 각 그룹이 만족해야 하는 조건을 명시
    - HAVING절에 나타나는 애트리뷰트는 반드시 GROUP BY절에 나타나거나 집단 함수에 포함되어야 한다.

    집합 연산 : 두 릴레이션이 합집합 호환성을 가져야 적용할 수 있다.
    - UNION(합집합), EXCEPT(차집합), INTERSECT(교집합)


    조인
    • 두 개 이상의 릴레이션으로부터 연관된 투플들을 결합
    • WHERE절에 애트리뷰트들을 비교하는 조인 조건이 포함
    • 조인 조건이 명확해지도록 애트리뷰트 이름 앞에 변수를 사용하는 것이 좋다.
    자체 조인 : 한 릴레이션에 속하는 투플을 동일한 릴레이션에 속하는 투플들과 조인.
    - 릴레이션에 대한 별칭을 두 개 지정해야 한다.


    중첩 질의
    • 질의의 WHERE 또는 FROM절에 다시 SELECT문이 괄호로 묶여 포함되는 것
    • 부질의(subquery)라고 한다.
    • 결과는 크게 세 종류가 있다.
      • 한 개의 스칼라값
      • 한 개의 애트리뷰트로 이루어진 릴레이션 : 외부 질의의 WHERE절에서 IN, ANY, ALL, EXISTS와 같은 연산자를 사용해야 한다.
        1. IN : 한 애트리뷰트가 값들의 집합에 속하는가
        2. ANY : 한 애트리뷰트가 값들의 집합에 속하는 하나 이상의 값들과 어떤 관계를 갖는가
        3. ALL : 한 애트리뷰트가 값들의 집합에 속하는 모든 값들과 어떤 관계를 갖는가
        4. EXISTS : 중첩 질의의 결과가 빈 릴레이션인지 여부를 검사
      • 여러 애트리뷰트로 이루어진 릴레이션
    • 상관 중첩 질의 : 중첩 질의의 WHERE절에서 외부 질의에 선언된 릴레이션의 일부 애트리뷰트를 참조


    관계 해석 : 원하는 데이터만 명시하고 질의를 어떻게 수행할 것인지는 명시하지 않는 선언적 언어

    관계 대수 : 어떻게 질의를 수행할 것인가를 명시하는 절차적 언어

              -> 상용 관계 DBMS에서 널리 사용되는 SQL의 기초로써 DBMS의 내부 언어로서도 사용된다.


    SQL : 사용자가 관계 DB 릴레이션에 정의, 검색, 갱신, 제약조건 등 여러가지 질의를 수행하기 위한 표준 질의어


    관계 대수의 특징

    • 기존 릴레이션들로부터 새로운 릴레이션을 생성
    • 릴레이션이나 관계 대수식에 연산자를 적용해 복잡한 관계 대수식을 만들 수 있음
    • 기본적인 연산자들의 집합
    • 결과 릴레이션은 또 다른 관계 연산자의 입력으로 사용될 수 있음

    필수적인 관계 연산자 : 실렉션, 프로젝션, 합집합, 차집합, 카티션 곱

    실렉션 연산자 (Selection)
    • δ<조건>릴레이션
    • 단항 연산자로서 릴레이션에서 조건을 만족하는 투플들의 부분 집합을 생성한다.
    • 결과 릴레이션의 차수는 입력 릴레이션의 차수와 같다.
    • 결과 릴레이션의 카디날리티는 항상 기존 릴레이션의 카디날리티보다 작거나 같다.
    • 임의의 애트리뷰트와 상수, 비교 연산자, 부울 연산자를 포함할 수 있다.
    • 중복 투플이 존재할 수 없음
    프로젝션 연산자 (Projection)
    • π<애트리뷰트 리스트>릴레이션
    • 릴레이션에서 애트리뷰트들의 부분 집합을 구한다.
    • 결과 릴레이션은 <애트리뷰트 리스트>에 명시된 애트리뷰트만 갖는다.
    • 중복 투플이 존재할 수 있음
    집합 연산자 : 합집합, 교집합, 차집합이 있으며 입력으로 사용되는 릴레이션은 합집합 호환이어야 한다.

    합집합 연산자 
    • 릴레이션1 ∪ 릴레이션2
    • 중복된 투플들은 제외된다.
    • 결과 릴레이션의 차수는 입력 릴레이션 중 하나의 차수와 같다.
    차집합 연산자
    • 릴레이션1 - 릴레이션2
    • 릴레이션1에는 속하지만 릴레이션2에는 속하지 않는 투플들로 이루어진 릴레이션
    • 결과 릴레이션의 차수는 입력 릴레이션 중 하나의 차수와 같다.
    카티션 곱 연산자 : 릴레이션1 × 릴레이션2 에서 릴레이션 1과 릴레이션2의 투플들의 모든 가능한 조합으로 이루어진 릴레이션이다.


    유도된 연산자 : 교집합, 세타 조인, 동등 조인, 자연 조인, 세미 조인, 디비전

    교집합 연산자
    • 릴레이션1 ∩ 릴레이션2
    • 결과 릴레이션의 차수는 입력 릴레이션 중 하나의 차수와 같다.
    조인 연산자 : 두 개의 릴레이션으로부터 연관된 투플들을 결합하는 연산자

    세타 조인
    • R ⋈<조인조건>S
    • 두 릴레이션 R과 S의 세타 조인의 결과는 두 릴레이션의 차수, 애트리뷰트를 합친 것이다.
    • 조인 조건은 비교 연산자를 이용한다.
    • 세타 조인 결과는 두 릴레이션의 카티션 곱에 조인 조건을 적용한 결과와 같다. 
    동등 조인 : 세타 조인 중에서 비교 연산자가 =인 조인

    자연 조인
    • R ⋈ S
    • 두 릴레이션의 공통된 애트리뷰트에 대해 동등 조인을 수행하고, 결과 릴레이션에 있는 조인 애트리뷰트 중 하나를 제외한 조인
    • 관계 DB에 있어서 대부분의 질의는 실렉션, 프로젝션과 자연 조인으로 표현이 가능하다.
    디비전 연산자
    • R ÷ S
    • 릴레이션 S의 모든 투플 값과 쌍을 이루는 릴레이션 R의 애트리뷰트 값
    • "모든 ~에 대해 ~하는" , "~하지 않는 ~가 없다" 형태의 질의에 사용될 수 있다.

    관계 대수의 한계 : 정렬을 나타낼 수 없고, 데이터베이스를 수정할 수 없으며 중복된 투플을 명시하지 못한다.

    추가된 관계 대수 연산자
    • 집단 함수 : AVG, SUM, MIN, MAX, COUNT
    • 그룹화 : 각 그룹에 대해 집단 함수를 적용
    • 외부 조인 : 상대 릴레이션에서 대응되는 투플을 갖지 못하거나 널값이 들어 있는 투플들을 다루기 위한 조인
    1. 왼쪽 외부 조인 (R ⟕ S) : 왼쪽 릴레이션의 투플을 결과에 모두 포함시키고, 오른쪽 릴레이션에 관련 투플이 없다면 널값으로 채움
    2. 오른쪽 외부 조인 (R ⟖ S) : 오른쪽 릴레이션의 투플을 결과에 모두 포함시키고, 왼쪽 릴레이션에 관련 투플이 없다면 널값으로 채움
    3. 완전 외부 조인 (R ⟗ S) : 양쪽 릴레이션의 투플을 모두 결과에 포함시키고, 양쪽에 관련 투플이 없다면 널값으로 채움 . R ⟗ S = (R ⟕ S) ∪ (R ⟖ S)


    관계 데이터 모델 : 데이터 모델 중 개념이 가장 단순, 가장 널리 사용된다.

    • 모든 데이터를 논리적으로 구성
    • 사용자는 원하는 데이터만 명시, 찾는 방법은 명시하지 않는다
    • 선언적인 질의어를 통한 데이터 접근

    장점 : 집합 테이블을 이용한 간단한 구조의 데이터, 이론이 탄탄하며 응용에 적합하다. 설계와 질의처리도 효율적


    릴레이션(Relation) : 2차원의 테이블

    레코드(Record) : 릴레이션의 각 행

    투플(Tuple) : 레코드의 공식적인 용어

    애트리뷰트(Attribute) : 릴레이션에서 이름을 가진 하나의 열


    도메인(Domain) : 한 애트리뷰트에 나타날 수 있는 값들의 집합

    프로그래밍 언어의 데이터 타입과 비슷한 형태로써 동일한 도메인이 여러 애트리뷰트에서 사용될 수 있다.

    • CREATE DOMAIN EMPNAME CHAR(10)
    • EMPNAME 도메인 : {Jeff, John, Alves, Kim, Osher ...}


    차수(Degree) : 한 릴레이션에 들어있는 애트리뷰트들의 수 (1 이상)

    카디날리티(Cardinality) : 릴레이션의 투플 수 (0 이상)

    널값(Null Value) : '알려지지 않음', '적용할 수 없음'에 사용한다. 0과 공백과는 다르다.



    릴레이션 스키마(Relation Schema) : 릴레이션의 이름, 애트리뷰트들의 집합 -> 내포

    릴레이션을 위한 틀이라고 생각하면 된다.

    •  릴레이션이름(애트리뷰트1, 애트리뷰트2, ... , 애트리뷰트N)

    기본 키 애트리뷰트에 밑줄을 그어 표시한다.


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

    일반적으로 현재의 인스턴스만 저장하고, 시간의 흐름에 따라 계속 변한다.



    관계 데이터베이스 스키마는 하나 이상의 릴레이션 스키마들로 이루어진다.

    • DEPARTMENT (DEPTNO, DEPTNAME, FLOOR)
    • EMPLOYEE (EMPNO, EMPNAME, TITLE, DNO, SALARY)
    관계 데이터베이스 인스턴스는 릴레이션 인스턴스들의 모임으로 이루어진다.

    DEPTNO 

    DEPTNAME 

    FLOOR 

     1

    영업

    기획 

    10 

     3

    개발 


     EMPNO

    EMPNAME 

    TITLE 

    DNO 

    SALARY 

     2106

    김창섭 

    대리 

    2000000 

     3426

    박영권 

    과장 

    2500000 

     3011

    이수민 

    부장 

    3000000 

     1003

    조민희 

    대리 

    2000000 

     3427

    최종철 

    사원 

    1500000 



    릴레이션의 특성

    • 각 릴레이션은 오직 하나의 레코드 타입만 포함한다.
    • 한 애트리뷰트 내의 값들은 모두 같은 유형이며 순서는 중요하지 않다.
    • 동일한 투플이 두 개 이상 존재하지 않으며 순서는 중요하지 않다.


    릴레이션의 키에는 수퍼 키, 후보 키, 기본 키, 대체 키, 외래 키가 있다.

    • 수퍼 키 : 릴레이션 내의 특정 투플을 고유하게 식별하는 하나 이상의 애트리뷰트 집합
    • 후보 키 : 각 투플을 고유하게 식별하는 최소한의 애트리뷰트 집합, 두 개 이상일 경우 복합 키라고 한다.
    • 기본 키 : 릴레이션 후보 키 중에서 설계자 혹은 관리자가 기본 키로 선정, 인위적인 키 애트리뷰트를 추가할 수 있음
    • 대체 키 : 키본 키가 아닌 후보 키
    • 외래 키 : 어떤 릴레이션의 기본 키를 참조하는 애트리뷰트, 관계 DB에서는 관계를 나타낼 때 사용된다.

    데이터 무결성 : 데이터의 정확성, 유효성을 의미한다. 일관된 DB상태를 정의하는 규칙이며 DB가 갱신될 때 DBMS가 자동적으로 조건을 검사한다.
    • 도메인 제약조건 (Domain Constraint)
    각 애트리뷰트 값이 반드시 원자값이어야 하며, 디폴트 값과 CHECK 제약조건을 통해 범위를 지정할 수 있다.
    NOT NULL, CHECK 등이 도메인 제약조건에 해당된다.
    • 키 제약조건 (Key Constraint)
    키 애트리뷰트에 중복된 값이 존재해서는 안된다. UNIQUE 로 설정할 수 있다.


    엔티티 무결성 제약조건 (Entity Integrity Constraint)
    • 기본 키 : 투플들을 식별하기 위해 사용되므로 어떤 애트리뷰트도 널값을 가질 수 없다.
    참조 무결성 제약조건 (Referential Integrity Constraint)
    • 두 릴레이션의 연관된 투플들 사이의 일관성을 유지하는데 사용된다.
    • 외래 키 : 관계 DB에서 릴레이션 사이의 관계들이 다른 릴레이션의 기본 키를 참조하는 것을 기반으로 하기 때문에 중요하다.
    • 릴레이션 R2의 외래 키가 릴레이션 R1의 기본 키를 참조할 때 무결성 제약조건의 성립조건 (하나만 만족해도 성립)
      1. 외래 키 값은 R1의 어떤 투플의 기본 키 값과 같다.
      2. 널 값을 가진다. 단, 외래 키가 자신을 포함하고 있는 릴레이션의 기본 키를 구성하고 있지 않음

    무결성 제약조건 : DBMS가 각각의 갱신 연산에 대해 필요한 조치를 취한다.
    • 삽입
    기본적으로 참조되는 릴레이션에 새로운 투플 삽입시 위배되지 않음
    하지만 참조되는 릴레이션에 투플 삽입시 기본 키 애트리뷰트의 값에 따라 (도메인, 키, 엔티티 무결성) 제약조건 위배될 수 있음
    참조하는 릴레이션에 새로운 투플 삽입시 (도메인, 키, 엔티티 무결성, 참조 무결성) 제약조건 위배될 수 있음
    제약조건을 위배하는 삽입 연산은 DBMS가 거절함으로써 무결성을 유지한다.
    • 삭제
    참조하는 릴레이션에서 투플 삭제시 제약조건 위배하지 않음
    참조되는 릴레이션에서 투플 삭제시 참조 무결성 제약조건 위배할 수도 있음
    이 경우 DBMS가 제공하는 옵션
    1. 제한 : 연산을 거절 
    2. 연쇄 : 참조하는 릴레이션에서도 해당 투플을 함께 삭제
    3. 널값 : 참조하는 릴레이션의 외래 키에 널값을 삽입
    4. 디폴트값 : 3번에서 널값 대신 디폴트값 삽입
    5. 수정 : 수정은 투플을 삭제하고 삽입하는 과정과 마찬가지다. 키의 종류에 따라 제약조건을 살펴봐야 한다.


    데이터 : HDD에 저장되는 팩트

    정보 : 데이터를 가공해 의미있게 만든 것. (데이터는 프로그램이나 질의를 통해 정보로 변환된다)


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

    • 데이터베이스 스키마 : 전체적인 데이터베이스의 구조로 내포라고 한다.

    DEPARTMENT ( DEPTNO, DEPTNAME, FLOOR)

    • 데이터베이스 상태 : 특정 시점의 데이터베이스의 내용으로 외연이라고 한다.

    DEPTNO

    DEPTNAME 

    FLOOR 

    영업

    2

    기획

    3

    개발


    스키마는 잘 바뀌지 않는 반면, 상태는 시간이 지남에 따라 계속해서 바뀐다.


    데이터베이스는 데이터베이스와 시스템 카탈로그(데이터 사전)으로 구분할 수 있다.

    시스템 카탈로그는 데이터베이스의 스키마 정보를 저장한다.



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

    데이터베이스 언어라는 특별한 프로그래밍 언어를 한 개 이상 제공한다. SQL은 사실상 표준 데이터베이스 언어.

    DBMS는 주기억 장치에 적재되어 실행되는데, 원하는 정보를 찾기 위해 중앙 처리 장치가 사용된다.

    • DBMS는 동시성 문제를 관리해준다. (사용자가 데이터에 동시에 접근했을 때)
    • DBMS는 운영체제와 응용 소프트웨어 사이에서 돌아가는 시스템 소프트웨어이다.
    • 트랜잭션(Transaction, 업무처리 단위)로 나누어 데이터를 백업하고 복원할 수 있다.
    • 데이터의 중복을 줄이거나 제어하며 일관성을 유지한다.
    • 특정 레코드에게 고유한 값을 줌으로써 데이터의 정확성을 유지하는 데이터 무결성을 지원한다.
    • 프로그램에 영향을 주지 않으면서 데이터베이스의 구조를 변경할 수 있음 >> 프로그램-데이터 독립성
    데이터베이스 시스템을 쓰기 전에는 주로 파일 시스템으로 데이터를 관리했다.
    하지만 데이터가 중복되고, 보안 조치나 백업기능이 없으며 응용 프로그램에 의존도가 높고, 동시성 제어가 되지 않는 등의 이유로 현재는 거의 쓰이지 않는다.
    또한 데이터 값이 바뀌었을 때 모든 프로그램을 하나하나 바꿔주어야 하므로 데이터의 불일치 현상이 나타난다. (일관성 ↓)

    DBMS 선정시 고려 사항
    • 기술적 요인 : 데이터 모델, 사용자 인터페이스, 프로그래밍 언어, 응용 개발도구 등
    • 경제적 요인 : 소프트웨어/하드웨어 구입 비용, 유지보수 비용, 직원들의 교육 지원

    DBMS의 단점 : 데이터를 공유하다보니 프라이버시 보장이 안된다. 또한 투자비용에 비해 관리할 데이터가 많지 않다면 적자로 이어질 수 있다.



    데이터 모델 : 데이터베이스의 구조를 기술하는데 사용되는 개념으로 세 가지 모델이 존재한다.

    1. 고수준 또는 개념적 데이터 모델 : 사람이 인식하는 것과 유사하게 데이터베이스의 논리적 구조를 명시. ex) 엔티티-관계(ER) 모델
    2. 표현(구현) 데이터 모델 : 사용자가 인식하는 것을 중심으로 하되, 저장되는 방법은 기계적. ex) 네트워크 데이터 모델, 관계 데이터 모델
    3. 저수준 또는 물리적 데이터 모델 : 데이터베이스에 데이터가 저장되는지를 명시.
    • 계층 DBMS : 트리 구조를 갖는 모델을 사용한 DBMS로써, 빠른 속도와 높은 효율을 제공할 때가 있지만 레코드들이 링크로 연결되어 있어 레코드 구조를 변경하기가 힘들다. 즉, 일대다 구조는 잘 처리하는 반면, 다대다 구조는 잘 처리하지 못한다.
    • 객체 지향 DBMS : 객체 지향 프로그래밍을 기반으로 하는 모델. 데이터를 그룹화하고 복잡한 객체를 이해하기 용이하다.
    • 전용 DBMS : 범용 데이터베이스 시스템에 맞지 않는 특정 프로그램을 위한 DBMS. 


    데이터 언어

    • 데이터 정의어(DDL) : 데이터베이스 스키마를 정의할 때 사용하는 언어 
    • 데이터 조작어(DML) : 데이터 레코드를 조작하기 위한 언어로써 절차적 언어와 비절차적 언어가 있다.
    • 데이터 제어어(DCL) : 데이터베이스의 트랜잭션(작업)을 명시하거나 액세스 권한을 설정한다.

    절차적 언어는 데이터를 가져오는 과정까지 관여하는 것이고, 비절차적 언어는 찾고자하는 데이터만 명시하는 것이다. (SQL은 비절차적 언어)

    데이터 조작어는 대화식으로 입력되어 수행되거나, 고급 프로그래밍 언어로 작성된 프로그램에 내포되어 사용된다.



    데이터베이스 사용자

    • 데이터베이스 관리자(DBA) : 조직의 여러 요구를 만족시키기 위해 DB스키마의 일관성을 유지하는 사람
    • 오퍼레이터 : DBMS의 전산실 관리자
    • 응용 프로그래머 : 데이터베이스 위에서 인터페이스를 구현하는 사람
    • 최종 사용자 : 데이터베이스를 사용하는 사람


    ANSI/ SPARC 아키텍처 : 현재 대부분의 상용 DBMS 구현에서 사용되는 일반적인 아키텍처. 세 가지 단계로 이루어진다.

    1. 외부 단계 : 데이터베이스의 각 사용자가 갖는 뷰. 동일한 개념 단계에서도 다수의 서로 다른 뷰가 나타난다.
    2. 개념 단계 : 데이터베이스의 사용자 공동체의 뷰. 조직체 전체에 대한 스키마를 포함하며 하나의 DB에 하나의 개념 스키마가 존재한다.
    3. 내부 단계 : 데이터베이스의 물리적 뷰. 물리적인 데이터 구조에 관한 스키마이다. 실질적인 저장을 표현하는 단계
    DBMS는 내부단계를 보여주지 않고, 사용자에게 필요한 외부단계를 보여준다.
    또한 DBMS는 세 단계 간에 맵핑(mapping)을 통해 질의를 변환한다.
    • 외부/개념 사상 : 외부 단계의 뷰를 사용해서 입력된 사용자의 질의를 개념 단계의 스키마를 사용한 질의로 변환
    • 개념/내부 사상 : 이를 다시 내부 단계의 스키마로 변환하여 디스크의 데이터베이스를 접근

    데이터 독립성 : 상위 단계의 스키마 정의에 영향을 주지 않으면서 어떤 단계의 스키마 정의를 변경하는 것
    • 논리적 데이터 독립성 : 개념 스키마가 변하더라도 외부 스키마가 변하지 않는 것
    • 물리적 데이터 독립성 : 내부 스키마가 변하더라도 개념 스키마가 변하지 않는 것

    * ODBC(Open Database Connectivity) : Microsoft사의 데이터베이스 API이다. 

    개발자가 DB간 공통적으로 사용할 수 있는 API만 알게 되면 여러 회사의 DB에 접근할 수 있다.


    데이터베이스 시스템 구조는 중앙 집중식과 분산식으로 나눌 수 있다.

    • 중앙 집중식 DBMS : 하나의 중앙 컴퓨터 시스템에서 데이터베이스 시스템을 운영
    • 분산 DBMS : 데이터베이스 시스템이 네트워크를 통해 여러 컴퓨터에 나누어져 있는 형태.
    중앙 집중식 DBMS는 사용자가 많을 경우 트래픽이 초과될 위험이 있기 때문에 분산 DBMS시스템이 유리하다.
    이는 또한 경제적인 면에서 하나의 고가 컴퓨터보다 여러 대의 저가 컴퓨터가 유리하다.


    + Recent posts