관계 (데이터베이스)

관계 모델에서 관계(relation)는 동일한 구조로 이루어진 튜플의 집합을 말한다. 값으로서의 관계를 ‘관계값’(relation value)라고 하며, 관계값을 값으로 가지는 변수를 ‘관계변수’(relvar, relation variable)라고 한다.

속성명과 연결된 도메인(열)들을 정의한 것은 ‘관계 스키마’(relation schema)라고 불린다. 때로는 관계 스키마는 관계 그 자체의 이름에 포함되기도 한다. 이러한 관계 스키마는 ‘테이블 스키마’(table schema)로도 불리기도 한다.

관계 데이터베이스의 데이터베이스 언어인 SQL에서는 관계 변수와 거의 같은 의미로 테이블이라는 용어가 사용되고 있다. 문맥에 따라서 ‘관계변수’를 ‘관계’라고 부르기도 하고 ‘관계값’을 관계라고 부르기도 한다.

기타 데이터베이스의 관계는 다음과 같은 것을 말할 수 있다.
 관계변수를 값으로 갖는 관계값은 시간에 따라 변화한다.
 관계변수는 데이터 정의 언어(DDL)를 사용하여 정의할 수 있다.
 제목(heading)은 특정 속성(열) 이 정렬되지 않은 집합이다.
 관계값을 구성하는 튜플의 집합을 본체 (body)라고 한다. 즉 관계 값은 제목과 본체로 구성되어있다.
 튜플은 0개 이상의 속성의 집합으로 구성된 데이터 구조이다.
 속성(attribute)은 속성명과 정의영역 이름 열이다.
 정의영역(domain)은 데이터 형식과 같은 의미로 생각해도 좋다.
 속성은 그 정의영역에 적용되는 하위의 속성 값을 가진다.
 속성 값은 스칼라 값이나 더 복잡한 구조를 가지는 값이다.
 제목을 구성하는 속성의 수를 차수(degree)라고 한다.
 관계값의 차수는 0 또는 양의 정수이다.
 차수가 n인 관계 값을 n항 관계(n-ary relation)라고 한다.
 관계값을 구성하는 튜플 수를 농도 (cardinality)라고 한다.
 관계값의 농도는 0 또는 양의 정수이다.
 관계값은 중복 튜플이 존재하지 않는다.
 관계 값을 구성하는 각각의 열은 특정한 하나 이상의 속성 집합으로 식별된다. 이 속성 집합을 후보 키(candidate key)라고 한다.

예제 
아래는 3개의 속성명을 가진 관계의 예제이다. 정수(integer) 도메인에서 온 'ID'와 문자열(string)에서 온 'Name'과 'Address'를 가지고 있다:

SQL이 아니라, 관계 이론에서, 튜플(tuples)은 정렬되지 않으며, ‘임꺽정의 튜플’이라고 할 수 없는 것은 주논개의 튜플이라고 할 수 없는 것과 같고, 마찬가지로 "홍길동의 튜플'이 최초의 튜플이라고 할 수도 없다."

기본 관계변수와 파생 관계변수 
관계변수(relvar)는 기본 관계변수와 파생 관계변수로 두 가지 종류로 분류할 수 있다. 하나 또는 다수의 변수에 관계대수나 관계논리 표현식에 적용시킴으로써, 새로운 관계 변수값이 파생된다.

기본 관계변수는 어떤 다른 관계변수에서 파생되지 않은 기초적인 관계변수이다. 관계 데이터베이스의 데이터베이스 언어인 SQL에서는 기본 테이블이라는 용어는 ‘기본 관계변수’로 여겨진다. 데이터 정의 언어 (DDL)을 사용함으로써 기본 관계변수를 정의할 수 있다. SQL에서는 CREATE TABLE 구문을 사용함으로써, 기본 변수를 정의할 수 있다. 아래의 예를 보자.
CREATE TABLE List_of_people (
 ID INTEGER,
 Name CHAR(40),
 Address CHAR(200),
 PRIMARY KEY (ID)
)

파생 관계변수는 관계대수나 관계논리 표현식을 적용함으로써 획득되는, 하나 또는 여러 개의 관계 변수에서 파생된 관계 변수이다. VIEW는 파생 관계변수로 간주된다. 데이터 정의 언어 (DDL)에서 파생된 관계변수를 정의할 수 있다. SQL에서는 CREATE VIEW 구문을 통해 파생 관계변수를 정의할 수 있다. 아래는 그 예이다.
CREATE VIEW List_of_Jellanamdo_people AS (
 SELECT ID, Name, Address
  FROM List_of_people
  WHERE Address LIKE '%, 전라남도'
)

각주 

데이터베이스 관리 시스템
데이터 모델링
관계형 모델