테이블로 데이터를 표현하는 논리적 데이터 모델. 우리가 아는 그 테이블인데, 수학의 관계(relation) 개념에서 나왔다. 용어가 낯선 이유가 여기에 있고, 반대로 이 뿌리를 알면 릴레이션의 성질들이 왜 그런지 전부 설명된다.
카테시안 곱과 집합
집합 A와 B에서 각각 원소를 하나씩 골라 만들 수 있는 모든 쌍을 카테시안 곱이라 하고 A × B로 쓴다. 관계는 이 카테시안 곱의 부분집합이다. 집합이 둘이면 이항 관계, n개면 n항 관계가 되고, 그때 각각의 원소 목록을 튜플이라고 부른다.
여기서 바탕이 되는 것은 집합이다. 집합은 중복을 허용하지 않고 순서가 없다. 릴레이션의 성질들이 전부 여기서 따라 나온다.
도메인, 속성, 튜플
관계형 모델에서 집합의 자리에 오는 것이 도메인이다. 도메인은 더 이상 나눌 수 없는 값들의 집합이고, 7자리 정수인 학번들이나 {1, 2, 3, 4}인 학년 같은 것이다.
속성은 도메인이 릴레이션에서 맡은 역할의 이름이다. 같은 도메인이 한 릴레이션에 여러 번 나올 수 있는데, 쓰이는 목적이 다르니 이름을 붙여 구분한다. 전화번호 도메인이 phone_num과 emer_phone_num 두 속성으로 쓰이는 식이다. 튜플은 각 속성의 값으로 이루어진 목록이다.
릴레이션의 구조는 이름과 속성 목록으로 쓴다.
STUDENT(id, name, grade, major, phone_num, emer_phone_num)
속성의 개수를 차수(degree)라고 한다. 여기서는 6이다.
관계형 DB는 이 모델에 기반해 구조화된 DB이고, 여러 릴레이션으로 이루어진다. 관계형 DB 스키마는 릴레이션 스키마들의 집합에 무결성 제약조건들의 집합을 더한 것이다.
집합에서 따라 나온 제약
집합에서 따라 나온 성질들이 곧 릴레이션이 지켜야 하는 제약이 된다.
중복된 튜플을 가질 수 없다. 릴레이션이 곧 튜플의 집합이고 집합은 중복을 허용하지 않는다. 튜플을 식별하려고 속성의 부분집합을 키로 삼는 것도 여기서 나온다.
튜플의 순서는 중요하지 않다. 순서가 바뀌어도 같은 릴레이션이다. 한 튜플 안에서 속성의 순서도 마찬가지로 의미가 없다. 테이블에 순서 개념이 없다는 뜻이라서, 정렬해서 보려면 ORDER BY를 명시해야 한다. 쓰지 않으면 어떤 순서로 나오든 DBMS 마음이다.
한 릴레이션에서 속성 이름이 중복될 수 없다.
속성값은 원자적이어야 한다. 서울특별시 / 강남구 / 청담동처럼 셋으로 쪼갤 수 있는 address는 복합 속성이고, 컴공, 디자인을 한 칸에 담은 major는 다중값 속성이다. 둘 다 원자적이지 않으므로 쪼개야 한다.