본문 바로가기
Study/Database

[Database System Concepts] 2.관계형 모델 소개

by sweji 2019. 7. 24.

글 차례


  1. 관계형 데이터베이스의 구조
  2. 데이터베이스 스키마
  3. 스키마 다이어그램
  4. 관계형 질의어
  5. 관계 연산

1.관계형 데이터베이스의 구조


  • 관계형 데이터베이스 :
    테이블의 모임으로 구성, set of table(relation)
  • 테이블 (table) = relation
    각 table 마다 고유한 이름을 지님
    구성 : schema + instance
  • Schema , 스키마
    table의 구조, 속성들의 집합, 자주 안바뀜(정적)
  • Instance , 인스턴스
    tuple들의 집합, 속성의 값들, 자주 바뀜(동적)
  • tuple
    간단한 값의 나열 혹은 값의 리스트
    n-투플 : n개의 값의 나열, n-투플이 바로 table의 행
  • 속성 attribute
    테이블의 열을 의미
    릴레이션의 각 속성은 도메인을 지님
  • 도메인 domain
    각 속성에 대해 허용되는 값들의 집합(범위)
  • 모든 릴레이션 r에서 r의 모든 속성의 도메인은 원자적이어야한다.
    즉, 도메인의 요소가 더 이상 나눠질 수 없는 단일체이다.
  • 교재의 3~6장에서는 모든 속성이 원자적 도메인을 갖는다고 가정하고 진행한다.
  • Null 값
    알려지지 않거나 (unknown)
    존재하지 않는 (missing) 값
    가능하다면, null 값은 제거하는게 좋음 -> 많은 연산 정의에서 복잡성을 야기할 수 있기 때문
  • Relation 정렬 X
    튜플의 순서는 상관 없다
    일반적으로 결과 table은 주 key가 정렬되어 있는 형태

2.데이터베이스 스키마


  • 데이터베이스의 논리적 설계 = 데이터베이스 스키마
    어떤 한 순간에 데이터베이스에 저장되어 있는 데이터의 스냅샷 = 데이터베이스 인스턴스
  • 스키마와 인스턴스를 잘 구별해야 함
  • 릴레이션 스키마
    프로그래밍 언어의 형 정의에 해당
    속성 + 속성이 가지는 도메인 명세

ex. SQL에서 스키마 정의 하는 법

  • 릴레이션 인스턴스
    프로그래밍 언어의 변수의 값에 해당
  • 앞으로, 교재의 릴레이션의 스키마를 표현할 때에는 ()로 간단하게 표현하도록 한다

ex. department의 릴레이션 스키마 표현

3.키


  • 키 : 튜플을 구분할 방법, 릴레이션의 속성을 이용한다.
         튜플의 속성에 해당하는 유일하게 구별 가능해야 함
  • 키 종류
    수퍼키 Super Key
    후보키 Candidate Key
    주키 Primary Key
    외래키 Foreign Key
  • Super Key 수퍼키
    하나의 릴레이션에서 그 투플을 유일하게 식별할 수 있도록 해주는 하나 혹은 그 이상의 속성들의 집합
    관련 없는 속성도 수퍼키에 포함할 수 있다
    릴레이션 r의 스키마에 존재하는 속성들의 집합 R이 있다고 가정하면,
    r의 부분집합 K가 r의 수퍼기가 되기 위해선,
    서로 다른 두 투플의 K의 모든 속성들이 같은 값이 존재해서는 안된다.
    즉, 투플 t1과 t2가 r에 존재하고 t1 이 t2와 같지 않다면, t1.K 는 t2.K 여야 수퍼기가 성립된다.

예제

 위 예에서 K가 (A,B)일때는 K는 r의 수퍼키가 될 수 없다. 그 이유는 t1과 t2가 A속성에 대한 값이 '가'로 같기 때문
K가 (B,C)이면 K는 r의 수퍼키가 될 수 있다. 그 이유는 t1과 t2의 B와 C가 각각 다르기 때문

  • Candidate Key 후보키
    여러개의 슈퍼 키 중에서 가장 최소인 집합
    후보키의 속성은 수퍼키와 같으나 후보키의 어떤 부분집합도 수퍼 키가 될 순 없다
    즉, 수퍼 키의 부분집합이 수퍼 키가 아닌 경우
  • Primary Key 주키
    릴레이션의 후보키 중에서 릴레이션 안에서 투플을 구별하기 위한 수단으로 선택된 키
    주키의 조건은 다음과 같다.
    1. 속성들에 대한 값이 중복되면 안된다.
    2. 속성들에 대한 값이 절대로 변하지 않아야 한다.
    3. 혹은 속성들에 대한 값이 매우 드물게 변하도록 해야 한다.
  • 수퍼키, 후보키, 주키는 전체 릴레이션의 특성이므로
    릴레이션의 어떤 투플도 동시에 키 속성에 대해 같은 값을 가질 수 없다
  • 키는 모델링하는 실세계의 제약 조건이다
  • 키를 정하는 방법으로 여러 개의 소겅을 동시에 이용하는 방법도 있다.
  • 관습적으로, 릴레이션 스키마의 주 키 속성은 다른 속성보다 앞에 쓴다.
    그리고 표현할 때 주키는 밑줄로 표시한다.
  • Foreign Key 외래키
    릴레이션 스키마 r1은 자신의 속성들 중에 다른 릴레이션 r2의 주 키를 포함할 수 있다.
    이러한 속성은 r1으로부터 r2를 참조하는 외래 키라고 한다.
    릴레이션 r1은 외래키 종속을 가진 참조하는 릴레이션 referencing relation
    릴레이션 r2는 외래키를 가진 참조된 릴레이션 referenced relation

예제2

  • 참조무결성 제약조건
    위의 예제2처럼 r1의 D는 r2에서 참조 했다.
    이때 r1의 D 속성에 해당하는 값은 반드시 r2의 튜플에 D에 해당하는 값과 같아야 한다.

4. 스키마 다이어그램


  • 스키마 다이어그램
    데이터베이스 스키마는 주 키와 외래 키 종속성을 시각화한 것
    각 표현 방법은 아래와 같다.
       릴레이션-네모상자
       주키-밑줄
       릴레이션 이름-네모상자 위
       외래 키 종속성-참조하는 릴레이션의 외래 키 속성으로부터 참조된 릴레이션의 주 키로 화살표
  • 교재에서 쓰이는 대학교 데이터베이스 스키마와 스키마 다이어그램

  • 참조 무결성 제약조건은 외래 키처럼 스키마 다이어그램에 잘 표현되지 않는다.
    7장에서 다룰 개체-관계형 다이어그램에서 표현 가능하다.

5. 관계형 질의어


  • 사용자가 db로 정보 요청할 때 사용하는 언어
  • 종류
    절차식 언어 : 원하는 결과를 얻기 위해 user가 사용해야 할 연산을 시스템에 알려주어야 함
    비절차식 언어 : user가 정보를 얻기 위한 구체적인 수행 과정은 기술하지 않고 어떤 정보를 원하는 지만 기술
  • 순수 언어 Pure Language
    간결하고 형식적, 여러 종류가 있음
    관계 대수 relational algebra
    튜플 관계 해석 tuple relational calculus
    도메인 관계 해석 domain relational calculus
  • 관계 해석 - 결과를 얻기 위해 술어 논리 사용, 특정 대수 프로시저 사용 X
  • 관계 대수 - 하나 or 두 개의 릴레이션을 입력으로 받아 결과로 새로운 릴레이션을 생성하는 연산들

6. 관계 연산


  • 관계 대수 기본 연산
    selection : 릴레이션에서 조건을 만족하는 tuple(low, 행) 선택
    projection : 릴레이션의 특정 속성(column, 열) 선택, 중복된 튜플 제거 (SQL은 default가 중복 허용)
    join : 두 릴레이션을 합치는 연산 --> 4장에서 더 자세히 다룸
            inner join과 outer join으로 분류할 수 있고, 일반적으로 그냥 join이라 부르면 inner join이라고 본다.
            join을 사용할 때에는 join 조건도 함께 사용할 수 있으며 조건은 3가지 경우가 있다
               1.natural
               2.on < predicate : 조건 >
               3.using ( A1, A2, ..., An : A는 속성)
    Cartesian product : 카티션곱, ×로 표현, 두 릴레이션의 투플을 합친다. join과 다르게 모든 가능한 경우를 연산
    rename ( ρ ) : 카티션 곱의 이름 중복 문제 해결
  • 집합 연산 - 전제 조건) 입력하는 table의 스키마 구조가 같아야함, 합집합, 교집합, 차집합 연산이 이에 해당함

교재. 관계 대수 정의 및 사용 예

  • 교집합 연산은 사실 기본 연산이 아니다. 차집합연산 방식으로 사용해야 한다.
  • 카티션 곱을 사용할 때 속성 이름이 중복되면 안되므로 입력 테이블의 이름을 앞에 추가하거나
    rename 연산으로 이름을 강제로 바꿔주어야 한다.
  • natural join 은 중복된 속성은 rename 할 필요 없이 한개만 결과 스키마에 보여준다
    그리고, 중복된 속성의 값이 같은 튜플만 결과로 출력한다
    나머지는 카티션 곱과 유사하게 동작한다
  • 집합 함수 종류 -- 3장에서 더 자세히 다룸
    sum : 합
    avg : 평균
    max : 가장 큰
    min : 가장 작은
    count :  총 수

5장까지 정리되면 join만 따로 자세히 정리할 예정

댓글