[DB] 2. Relational Model

Park Yeongseo·2024년 1월 4일
0

DB

목록 보기
3/9
post-thumbnail

서울대학교 이상구 교수님의 SNUON 강의 데이타베이스: 빅데이터 시대의 필수 정보관리 개론Database System Concepts 7th Edition의 내용을 바탕으로 정리한 내용입니다.

1. Structure of Relational Databases

관계형 데이터베이스(relational database)는 객체, 혹은 객체 간의 관계를 테이블로 나타내는 데이터베이스다. 이 테이블은 행과 열로 이루어져 있는데, 각 열은 속성(attribute), 필드(field)라고도 부르고, 각 데이터가 들어있는 행은 튜플(tuple), 또는 레코드(record)라고도 부른다.

집합론에서의 관계

집합론에서, 집합 A에서의 이항 관계 R은 순서가 있는 A의 원소 쌍의 집합이다.

A={1, 2, 3}<={<1,2>,<1,3>,<2,3>}={<1,2>,<1,3>,<2,3>,<1,1>,<2,2>,<2,3>}...\begin{aligned} A &= \{1,\ 2,\ 3\} \\ < &= \{<1,2>, <1,3>, <2,3>\}\\ \leq &= \{<1,2>, <1,3>,<2,3>,<1,1>,<2,2>,<2,3>\}\\ &... \end{aligned}

따라서 집합 A에서의 이항 관계 RR은 집합 AA의 자기 자신에 대한 카테시안 곱의 부분 집합이다.

RA×AR \subseteq A \times A

물론 서로 다른 두 집합 사이에서도 이항 관계가 만들어질 수 있다.

집합 D1D_1, D2D_2, ..., DnD_n이 주어졌을 때 관계 rrD1×D2×...×DnD_1 \times D_2 \times ... \times D_n의 부분 집합이다.

r D1× ... × Dn(n:r의 차수)orr={<d1,...,dn>}  d1D1, ..., dnDn}\begin{aligned} &r \subseteq\ D_1 \times\ ...\ \times\ D_n \quad (n: r의\ 차수)\\ &or\\ &r = \{<d_1, ..., d_n>\}\ |\ d_1 \in D_1,\ ...,\ d_n\in D_n \} \end{aligned}

관계는 우리가 일상적으로 사용하는 "관계"를 표현하기 위해 사용할 수도 있지만, 관계를 이루는 순서쌍의 원소를 한 객체의 속성이라 생각한다면, 여러 속성들을 묶어 만들어진 관계는 곧 그 객체를 표현하는 것이라 생각할 수도 있다. 앞으로는 "관계"라는 말 대신 "릴레이션"을 사용하도록 하겠다.

Attribute Types

  • 릴레이션의 각 속성은 이름을 가지고 있다.
  • 각 속성에 대해 허용된 값의 집합을 도메인(domain)이라 부른다.
  • 속성의 값들은 원자적(atomic)이어야 한다.
    + 즉 더 이상 쪼갤 수 없어야 한다. 쪼개면 의미가 없어져야 한다.
    + 여러 개의 값을 가지는 속성 값은 원자적이지 않다.
    + 여러 개의 값을 조합해 만든 속성 값은 원자적이지 않다.

2. Database Schema

Relation Schema

A1,A2,...,AnA_1, A_2, ..., A_n이 속성들이라 할 때, R=(A1,A2,...,An)R=(A_1, A_2, ..., A_n)릴레이션 스키마(relation schema)이다. 릴레이션 스키마는 여러 속성들과 해당 속성들의 도메인으로 이루어져있고, r(R)r(R)은 릴레이션 스키마 RR의 릴레이션이다. 릴레이션 스키마와 릴레이션의 관계는 프로그래밍 언어에서 타입과 변수의 관계와 비슷하다.

Relation Instance

릴레이션의 인스턴스란 테이블에 의해 명시되는 릴레이션의 현재값을 말한다. 변수의 값이 시간에 따라 변할 수 있는 것과 같이, 릴레이션 인스턴스의 내용도 릴레이션이 갱신됨에 따라 변할 수 있다. 이와 달리 한편 릴레이션 스키마의 경우는 잘 변하지 않는다.

릴레이션 rr의 원소 tt는 테이블의 행으로 표현되는 튜플이다. 릴레이션은 기본적으로 집합이므로, 그 원소인 튜플에는 중복이 없어야 하고, 튜플이 어떤 순서로 정렬되어 있는지도 상관이 없다.

Relational Database

  • 여러 개의 릴레이션들을 포함하는 데이터베이스다.
  • 모든 정보를 하나의 릴레이션으로 나타내는 것은 좋은 아이디어가 아니다.
  • 데이터베이스 디자인은 릴레이션 스키마를 어떻게 결정할지를 다룬다.

3. Keys

Superkey

RR의 부분 집합 KK를 생각해보자.

KRK \subseteq R

KKKK의 값들이 가능한 릴레이션 r(R)r(R)의 유일한 튜플을 식별하기에 충분한 경우 RR슈퍼키(superkey)라고 한다. 예를 들어 대학 학사 시스템을 만든다고 해보자. 동명이인이 없다고 가정할 때 {이름,학과}\{이름, 학과\}는 슈퍼키이고, {이름}\{이름\}도 슈퍼키가 된다.

Candidate key

이때 KK가 최소이면, 다시 말해 이 KK의 진부분 집합에 슈퍼키가 없다면 KK후보키(candidate key)라고 말한다. 따라서 동명이인이 없다고 가정할 경우 {이름}\{이름\}은 후보키가 된다.

Q. 후보키는 항상 하나의 원소만을 가지는 집합일까?
A. 그렇지는 않다. 대학 내에는 동명이인이 있지만, 같은 학과에 동명이인이 있는 경우는 없다고 해보자. 이 경우 {이름,학과}\{이름, 학과\}는 두 개의 원소를 가짐에도 후보키이다. 이 집합의 진부분 집합에는 {이름}\{이름\}{학과}\{학과\}가 있다. 그런데 대학 내에 동명이인이 있고 한 학과에도 여러 학생이 있다면, 이 이 둘 중 어느 것도 슈퍼키가 될 수 없기 때문이다.

Primary key

DB 디자이너는 후보키들 중 대표가 될 만한 것을 골라 테이블의 기본키(primary key)로 사용한다. 이 기본키는 사려 깊게 선택되어야 하는데, 이 기본키는 테이블의 튜플들을 서로 구분할 수 있을 뿐만 아니라 웬만하면 변하지 않는 속성의 값으로 선택하는 것이 좋다. 대표적인 예로, 대학 학사 시스템에서는 학생들의 고유 식별자로 사용되는 학번을 기본키로 사용한다.

Foreign key

릴레이션 r1r_1의 속성 AA에서 릴레이션 r2r_2의 기본키 BB로의 외래키 제약 조건(foreign-key constraint)은, 어떤 데이터베이스 인스터스에서도 r1r_1의 모든 튜플에서 AA의 값이 또한 r2r_2의 어떤 튜플의 BB의 값이어야 한다는 것이다.

여기서 AAr2r_2를 참조하는 r1r_1외래키라고 말한다. 외래키 제약 조건에서 릴레이션 r1r_1은 '참조하는 릴레이션', r2r_2는 참조되는 릴레이션이라고도 불린다.

4. Relational Query Languages

Query Languages

쿼리 언어는 유저가 데이터베이스로부터 정보를 요청할 때 사용하는 언어다. 이는 좁은 의미로는 조회를 위해 사용하는 것을 가리키지만, 넓은 의미로는 DML 전체를 가리키기도 한다.

  • 절차적 쿼리 언어
    + 어떤 데이터 필요한지와 그 데이터들을 어떻게 가져올지를 명시한다.
    + Relational Algebra
  • 선언적 쿼리 언어
    + 어떤 데이터가 필요한지만을 명시한다.
    + SQL

순수 쿼리 언어(pure query languages)는 의미론을 제외시킨, 간단하고 형식적인 언어로, 데이터베이스로부터 데이터를 추출하는 기본적인 테크닉들을 설명하기 위해 쓰인다. 순수 쿼리 언어에도 아래와 같이 여러 종류가 있다.

  • Relational Algebra
  • Tuple Relational Calculus
  • Domain Relational Calculus

실제로 이것들을 이용해서 쿼리를 날리거나 하는 일은 거의 없겠지만, 순수 쿼리 언어는 사람들이 사용하는 쿼리 언어들 아래의 기반을 이룬다는 점에서 중요하다.

5. Relational Operations

Relational Algebra

대수학(algebra)는 피연산자와 연간자에 대한 학문으로, 관계 대수(relational algebra)는 하나, 또는 둘의 릴레이션을 연산의 입력으로, 새 릴레이션을 결과로 갖는다. 여기서 쓰이는 연산에는 다음과 같은 것들이 있다.

  1. Select Operation
    • 릴레이션에서 조건에 맞는 튜플들을 조회하는 연산이다
σcondition(r)\sigma_{condition}(r)
  1. Project Operation
    - 특정 컬럼을 선택하는 연산이다

     col1,col2,...(r)\prod \ _{col_1, col_2, ...}(r)
  2. Union Operation, Set Difference Operation, Set-Intersection Operation
    - 각각 합집합, 차집합, 교집합을 구할 때와 마찬가지의 연산들이다

    rs,rs,rsr \cup s,\quad r -s,\quad r \cap s
  3. Cartesian-Product
    - rr의 모든 레코드와 ss의 모든 레코드로 만들 수 있는, 모든 가능한 조합으로 이루어진 릴레이션을 만드는 연산이다.

    r×sr \times s
  4. Natural-Join Operation
    - 카테시안 곱과 비슷하지만, 공통 컬럼에서 일치하는 레코드를 가지는 것들끼리 잇는 연산이다.

    rsr \bowtie s

각 연산의 결과도 릴레이션이므로, 위의 연산들을 이용하면 더욱 복잡한 식들을 만들어 계산해나갈 수도 있다.

profile
꾸준함, 기본기, 성찰, 공유

0개의 댓글