데이터베이스 설계

  • 개념적 데이터베이스 설계 : 정보 사용의 모델을 개발하는 과정으로 실세계를 바탕으로 추상화 모델을 구축한다.
    • 엔티티-관계 (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. 수정 : 수정은 투플을 삭제하고 삽입하는 과정과 마찬가지다. 키의 종류에 따라 제약조건을 살펴봐야 한다.


    + Recent posts