CS/DB (2022-1)

[DB] 관계형 모델 소개

샤아이인 2022. 9. 26.

데이터베이스 시스템 7판을 읽으며 간략하게 나마 정리하는 글 입니다.

 

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

관계형 데이터베이스는 테이블(table)의 모임으로 구성된다.

 

▶ Relation

일반적으로 테이블의 각 행은 일련의 값 사이의 관계(relationship)을 표한한다.

테이블이란 이러한 관계들의 모임으로, 테이블의 개념은 relation이라는 수학적인 개념과 밀접한 관련이 있다.

이러한 이유로 관계형 데이터 모델(relational data model)의 이름도 relation에 기반하고 있다.

 

▶ Tuple(튜플)

수학적 의미의 튜플은 값을 나열한것을 의미한다. n개의 값에 대한 관계는 수학적으로 n-tuple로 표현된다.

즉, n개의 값을 가진 하나의 tuple이 테이블에서 하나의 행이 된다.

 

즉, 관계형 모델에서 relation은 table을, tuple은 테이블의 행을, attribute(속성)는 테이블의 열을 의미한다.

 

▶ Relation Instance

relation instance이라는 단어는 행의 특정 집합을 포함하고 있는 릴레이션의 특정 인스턴스를 지친한다.

 

▶ Domain(도메인)

릴레이션의 각 속성은 도메인 이라고 하는 허가된 값의 집합을 가지고 있다.

예를 들어 다음과 같은 테이블이 있다고 해보자!

수강 테이블의 성적 속성의 도메인은 가능한 모든 성적의 집합, {A, B, C, D, F} 이다.

 

모든 릴레이션에 대하여 모든 속성의 도메인은 원자적(atomic)이여야 한다.

즉, 도메인이 원자적이라는 것은, 도메인의 요소(element)가 더이상 나뉠 수 없는 단위라는 것 을 의미한다.

 

▶ Null Value

널 값은 아직 알려지지 않았거나, 존재하지 않는 값을 의미하는 특별한 값이다.

 

2. 데이터베이스 스키마

데이터베이스의 논리적 설계인 database schema 와 데이터베이스에 저장되어 있는 데이터의 snapshot, 데이터베이스 인스턴스를 잘 구별해야 한다.

 

릴레이션 스키마의 개념은 프로그래밍 언어로 따져보면 타입 정의(type definition)에 해당된다.

일반적으로 릴레이션 스키마는 속성과 그 속성이 가지는 도메인의 명세로 구성된다.

 

릴레이션 인스턴스의 개념은 프로그래밍 언어로 따져보면 변수의 값과 비슷하다.

 

예를 들다다음과 같은 department 릴레이션이 있다고 해보자.

department 릴레이션

위 relation의 스키마는 다음과 같다.

department (dept_name, building, budget)

 

3. 키

주어진 릴레이션 안에서 튜플을 식별할수 있는 방법이 있어야 한다.

이는 relation의 속성으로 표현되며, 해당 속성값은 그 튜플을 유일하게 식별할 수 있어야 한다.

 

▶ 수퍼 키(super key)

수퍼 키는 한 릴레이션에서 튜플을 유일하게 인식할 수 있도록 해주는 하나 or 하나 이상의 속성들의 집합니다.

instructor 릴레이션

위 릴레이션에서 ID속성은 하나의 튜플을 다른 튜플로부터 구별하는데 충분하다. 따라서 ID는 수퍼키 이다.

 

릴레이션 r의 스키마에 존재하는 속성들의 집합을 R이라고 하자.

R의 부분집합인 K가 r의 수퍼 키가 되기 위해서는, 서로 다른 두 튜플의 K의 모든 속성이 같아서는 안된다.

즉, 튜플 t1 과 t2 가 r에 존재하고 t1 != t2 라면, t1.K != t2.K 이여야 한다.

 

수퍼 키인 ID에 name을 포함시켜도 수퍼키가 된다.

즉, K가 수퍼 키 라면, K를 포함한 어떤 집합도 수퍼 키가 된다.

 

▶ 후보 키(candidate key)

테이블에서 각 행을 유일하게 식별할 수 있는 최소한의 속성들의 집합다. 후보키는 기본키가 될 수 있는 후보들이며 유일성과 최소성을 동시에 만족해야한다.

 

위 릴레이션에서 ID와 같이 최소한의 수퍼 키를 후보 키라 한다.

 

즉, 위에서 {ID, name} 조합은 후보 키가 아니다, ID 속성 하나만 후보키가 된다.

{ID, name}은 수퍼 키에 해당된다.

 

▶ 주 키(primary key)

후보키들 중에서 하나를 선택한 키로 최소성과 유일성을 만족하는 속성이다.

즉, 릴레이션 안에서 tuple을 구별하기 위한 수단으로 선택된 후보 키를 Primary Key라고 부릅니다.

또한 기본키는 NULL 값을 절대 가질수 없고, 중복된 값을 가질 수 없습니다.

 

primary key는 속성이 절대 변하지 않거나, 매우 드물게 변하도록 해야한다.

 

▶ 외래키 제약 조건 (foreign-key constaint)

다음 instructor 릴레이션의 dept_name 속성을 생각해보자.

instructor (좌), deparment(우)

Instructor tuple의 dept_name이 department 릴레이션에 나오지 않는다면 매우 이상할 것 이다.

 

Instructor 릴레이션의 어떤 튜플 ta 가 있다면, ta의 dept_name 속성값이 반드시 department 릴레이션에 존재해야 한다.

즉, ta의 dept_name 속성값을 Primary Key로 가지는 department 릴레이션의 어떤 tuple tb가 나와야 한다.

 

릴레이션 스키마 r1의 속성 A와, 다른 릴레이션 스키마 r2의 primary key B 사이의 왜래 키 제약 조건은 모든 데이터베이스 인스턴스에 대하여 r1에 존재하는 각 튜플의 A값이 r2에 있는 어떤 튜플의 B값으로 반드시 나와야 한다는 것 을 의미한다.

 

이때 r1 릴레이션은 왜래키 종속성을 가진 참조하는 릴레이션 이라 부르며, r2 릴레이션은 참조된 릴레이션이라 부른다.

 

▶ 참조 무결성 제약 조건 (referential intergrity constraint)

참조 무결성 제약 조건은 참조하는 릴레이션의 어떤 튜플의 특정 속성에 할당된 값이, 참조되는 릴레이션에서 적어도 하나의 튜플의 특정 속성으로 출현해야한다.

 

사실 왜래키 제약 조건은 참조되는 속성이 참조된 릴레이션의 주 키를 구성하기 때문에 참조 무셜성 제약 조건의 특별한 경우이다.

 

4. 관계 대수

관계 대수는 한개 or 두개의 릴레이션을 입력으로 받아 그 결과로 새로운 릴레이션을 생성하는 연산의 집합이다.

 

selection, projection, rename 연산은 한 relation에 대하여 수행되므로 단항 연산(unary operation)이라 부른다.

Cartesian production, set difference(차집합) 연산은 두개의 relation에 대하여 연산을 수행하므로 이항 연산(binary operation)이라 부른다.

 

 

selection 연산의 결과로 원하는 tuple이 반환되고 (행 단위 추출)

projection 연산을 적용하면 원하는 속성의 값만 추출된다 (열 단위 추출)

 

각 연산에 대한 구체적 사용 예시는 생략

 

4 - 1) 동등 질의

우선 다음 질의 2개를 살펴보자.

 

물리학과에서 교수들이 강의하는 과목에 대한 정보를 찾는 query이다.

또 다른 질의는 다음과 같다.

둘 사이의 차이점을 알아보자.

 

1) instructor 와 teaches 를 조인한 후, dept_name이 "Physics"인 튜플을 추출한다

2) instructor에서 dept_name이 "Physics"인 튜플을 우선 추출한 후, 조인을 수행한다.

(ps, 내가 알기론 우선 선행 테이블의 크기를 줄이는 2번 방식이 성능이 더 좋다)

 

두 질의가 동일하지는 않지만, 사실 두 질의는 동등(equivalent)하다.

즉, 둘다 동일한 결과를 반환한다.

 

이러한 내용은 나중에 쿼리 최적화에서 도움이 된다고 한다!

'CS > DB (2022-1)' 카테고리의 다른 글

[DB] E-R 모델을 사용한 데이터베이스 설계  (0) 2022.10.06
[DB] 고급 SQL  (1) 2022.10.04
[DB] 중급 SQL - 2  (1) 2022.09.30
[DB] 중급 SQL - 1  (1) 2022.09.29
[DB] 트랜잭션 (Transaction) - 특성, ACID, 연산, 상태  (0) 2022.08.30

댓글