관계 데이터 모델
DBMS는 데이터를 저장할 때 데이터끼리 관계를 설정하여 저장한다. 관계 데이터 모델은 가장 많이 사용하는 데이터 모델로, 데이터들을 테이블 형태로 저장한다.
I. 릴레이션
릴레이션이란?
릴레이션은 데이터들의 관계를 표현하는 방법이다.
이러한 데이터들이 있을 때, 테이블로 다음과 같이 표현할 수 있다.
| 품목 | 원산지 | 가격 |
|---|---|---|
| 수박 | 국내산 | 10000원 |
| 사과 | 국내산 | 5000원 |
| 체리 | 칠레산 | 20000원 |
| 망고 | 필리핀산 | 8000원 |
행을 이루는 데이터들이 하나씩, 중 하나에 속하게 된다. 이로써 세 데이터 (수박, 국내산, 10000원) 이 관계를 형성하게 된다. 이때 을 '헤더'라고 하며, 헤더를 구성하는 각각을 '칼럼'이라 부른다
릴레이션간의 관계
관계에는 릴레이션 내의 관계와 릴레이션 간의 관계가 있다. 릴레이션 내의 관계는 행을 이루는 데이터들끼리의 관계로 앞서 설명한것과 같다. 릴레이션간의 관계는 식별가능한 어떤 값을 이용해 표현한다.
예를 들어 위 테이블의 '품목'은 다른 테이블에서 중요한 값으로 사용될 수 있다. 주문 릴레이션이 있다고 가정해보자.
| 고객 | 날짜 | 품목 |
|---|---|---|
| 길동 | 7월 2일 | 수박 |
| 철수 | 8월 3일 | 망고 |
| 영희 | 10월 5일 | 체리 |
과일 릴레이션과 주문 릴레이션은 '품목'이라는 공통된 칼럼을 통해 관계를 맺고있다.
graph TD subgraph 과일 a[품목] b[원산지] c[가격] end subgraph 주문 d[고객] e[날짜] f[품목] end a --> f
스키마와 인스턴스
스키마는 릴레이션이 어떻게 구성되고 어떤 데이터가 저장될지에 대한 정의이다. 스키마는 속성, 도메인, 차수로 구성된다.
- 속성: 스키마의 열. 테이블의 헤더
- 도메인: 속성이 가질 수 있는 값의 집합. 데이터 타입
- 차수: 속성의 개수
스키마는 다음과 같이 표현한다. 과일(품목:text, 원산지:text, 가격:int)
인스턴스는 렐레이션에 저장된 실제 값들을 말한다. 테이블의 헤더 바로 아랫부분, 행들의 집합이다. 인스턴스의 각 행을 '투플(tuple)'이라고 부른다. 투플은 중복이 없어야 하며, 투플의 수는 '카다날리티(cardinality)'라고 한다.
과일 릴레이션의 첫 번째 투플: (수박, 국내산, 10000원) 과일 릴레이션의 카디날리티: 3
릴레이션의 특징
릴레이션은 다음과 같은 특징을 가진다.
- 속성은 단일 값
- 속성은 서로 다른 이름
- 한 속성의 값은 모두 같은 도메인(데이터타입)
- 속성의 순서, 투플의 순서는 상관없음
- 중복된 투플은 없어야 함
이러한 관계 데이터 모델을 컴퓨터 시스템에 구현한것이 관계 데이터베이스 시스템이다. 이 시스템은 SQL이란 언어로 다룬다.
II. 무결성 제약조건
데이터베이스의 무결성이란 질의의 결과로 예상하지 못한 이상한 수치가 나오거나 의도치 않게 저장되어 일관성이 깨지는것을 방지함으로써 데이터의 신뢰도를 유지하는것을 말한다. 이를 위해 '키'와 '제약조건'이라는 중요한 개념이 등장한다.
키
키는 릴레이션에서 특정 투플을 식별할 때 사용되는 속성을 말한다. 투플은 중복을 허용하지 않기에, 투플을 식별하는 키에 해당하는 값들도 반드시 달라야한다. 전국민에게 발급되는 고유한 주민등록번호와 같은 개념이다.
키는 릴레이션간 관계를 맺는데도 사용된다. 다음과 같은 릴레이션들이 있다고 해보자.
고객 릴레이션
| 고객번호 | 이름 | 주소 | 핸드폰 |
|---|---|---|---|
| 1 | 박지성 | 영국 맨체스터 | 000-5000-0001 |
| 2 | 김연아 | 대한민국 서울 | 000-6000-0001 |
| 3 | 김연경 | 대한민국 경기도 | 000-7000-0001 |
| 4 | 추신수 | 미국 클리블랜드 | 000-8000-0001 |
주문 릴레이션
| 주문번호 | 고객번호 | 판매가격 | 주문일자 |
|---|---|---|---|
| 1 | 1 | 7000 | 2024-07-01 |
| 1 | 2 | 13000 | 2024-07-03 |
| 3 | 2 | 13000 | 2024-07-04 |
| 4 | 4 | 35000 | 2024-07-05 |
| 1 | 3 | 22000 | 2024-07-07 |
| 4 | 3 | 22000 | 2024-07-07 |
여기서 주문 릴레이션의 고객번호 속성은 고객 릴레이션에서 키로 작용하는것을 알 수 있다. 고객 이름은 중복될 수 있지만 고객번호는 키이기 때문에 그렇지 않다. 따라서 고객번호는 고객 릴레이션의 투플을 식별(고객을 식별)할 수 있는 중요한 정보가 된다. 주문 릴레이션에서는 고객 전체 정보를 저장하는 대신 고객번호만 저장하고, 필요시 고객 릴레이션에 접근해 어떤 고객이 주문했는지 알 수 있다.
즉 고객 릴레이션과 주문 릴레이션은 고객번호라는 키를 통해 관계가 형성된것이다.
키의 종류
키는 다음과 같은 종류가 있다.
- 슈퍼키: 투플을 유일하게 식별할 수 있는 하나의 속성 혹은 속성 집합. 여러개 존재할수도, 중복 가능성도 없어야 한다.
- 후보키: 투플을 유일하게 식별할 수 있는 속성의 최소 집합이다. 일반적인 키 개념을 말하며 여러개로 구성된 키는 복합키라고 한다.
- 기본키: 여러 후보키 중 대표로 삼는 키를 말한다. 여러 가능성을 고려하여 가장 적합한 속성을 키로 선정해야 한다.
- 대리키: 기본키가 보안을 요구하거나, 여러개로 이루어져 복잡하거나, 마땅한 기본키가 없을 때 사용한다.
- 대체키: 기본키로 선정되지 않은 후보키
- 외래키: 다른 릴레이션에서 기본키로 사용되는 속성이다. 주문 릴레이션에서 고객번호가 이에 해당한다. 외래키는 릴레이션 간 관계를 표현하므로 중요하다.
flowchart subgraph 고객 릴레이션 - 부모 a1["고객번호(기본키)"] a2[이름] a3[주소] a4[핸드폰] end subgraph 주문 릴레이션 - 자식 b1[주문번호] b2["고객번호(외래키)"] b3["팬매가격"] b4["주문일자"] end b2 -->|참조| a1
외래키의 특징
- 관계 데이터 모델에서 릴레이션간 관계를 표현
- 다른 릴레이션의 기본키
- 외래키와 외래키가 참조하는 다른 릴레이션의 기본키는 도메인이 같아야 함
- 기본키가 변경되면 외래키도 변경
- NULL, 중복 허용
- (기본키-외래키) 복합 기본키도 가능
무결성 제약조건
DBMS는 SQL 사용자가 신경쓰지 않아도 알아서 지키고있는 기본적인 제약조건이 있다.
- 도메인 무결성 제약조건: 데이터 형식에서 벗어나는 값을 제한한다.
- 개체 무결성 제약조건: 릴레이션은 기본키를 반드시 지정하고 그 값이 NULL이여서는 안된다.
- 참조 무결성 제약조건: 부모 릴레이션의 기본키와 자식 릴레이션의 외래키는 도메인이 같아야 하며 부모 릴레이션의 기본키가 변경될 경우 자식 릴레이션의 외래키도 변경된다.
제약조건 수행 과정
DBMS가 제약조건을 어떻게 수행하는지 알아보자.
-
개체 무결성 제약조건
501과 동일한 값이 존재하는지 검색 후, 중복이 없으면 허용
NULL이면 삽입 거부 -
참조 무결성 제약조건
외래키 3001이 부모 릴레이션의 기본키로 존재하는 지 확인 후, 존재하면 삽입 수행
부모의 투플이 삭제되면, 해당 투플의 기본키를 참조하는 자식 릴레이션의 투플에 대해서도 무결성을 위한 작업을 수행
III. 관계 대수
관계대수와 관계해석
- 관계대수: 어떤 데이터를 어떻게 찾는지에 대한 절차적인 언어
- 관계해석: 어떤 데이터를 찾는지만 명시하는 선언적인 언어
이 둘은 DBMS의 표준 언어인 SQL의 이론적 기반을 제공함.
집합
두 집합의 원소들 간 이루어질 수 있는 모든 순서쌍을 구하는 연산이 있다. 카티션 프로덕트 라고 한다. 기호는 이다.
릴레이션은 이러한 카티션 프로덕트의 부분집합이다. 저 순서쌍들은 튜플로 삽입가능한 모든 데이터 조합을 의미한다.
학번 집합과 과목 집합을 예로 든다면 다음과 같다.
이 중 실제로 데이터베이스에 삽입할 알맞은 순서쌍들을 고르면 그것이 릴레이션 인스턴스다.
| 학번 | 과목 |
|---|---|
| 2 | 데이터베이스 |
| 2 | 자료구조 |
| 4 | 프로그래밍 |
관계대수 연산자
관계대수 연산은 두가지로 나뉜다.
- 순수 관계연산: 셀렉션, 프로젝션, 조인, 디비전, 개명
- 일반 집합연산: 합집합, 교집합, 차집합, 카티션 프로덕트

관계대수식은 다음과 같이 표현된다.
- 단항 연산자:
- 이항 연산자: