Relation은 row와 column으로 이루어진 행렬 형태의 데이터 저장소이다.
이는 table의 형태이며 좀 더 formal한 정의를 알아보자.
doimain이란 하나의 attribute가 가질 수있는 모든 경우의 수를 의미한다.(주어진 타입과 범위 내에서)
- domain은 또한 attribute의 변수의 타입과 범위(길이)를 의미한다.
- domain은 atomic하다.(하나의 쪼갤 수 없는 값이다.)
- domain은 null을 값으로 가질 수 있다.
그리고 다음과 같이 정의해보자.
: attributes의 집합 (이름, 나이 등)
: attributes의 domain 집합, 주어진 타입과 범위 내의 가능한 모든 집합이라 생각하자. ex) (김인하, 19)
그리고 이 domain의 카테시안 곱을 수행하면 모든 경우의 테이블을 구할 수 있다.
이 row들의 개수를 table로 만들기 위한 모든 경우의 수이고 이에 대한 부분집합을 relation이라 칭한다.
row는 tuple로도 표현된다.
Database shcema는 다음과 같은 형태로 표현한다.
ex)
relation instance는 relation의 실제의 값을 저장한 특정 시점의 상태이다.
attribute의 순서는 중요하지만, relation의 tuple은 순서가 중요하지 않다.
위의 relation은 동일한 relation이다.
key란 tuple을 구별할 수 있는 attribute를 뜻한다.
key의 종류와 정의를 알아보자.
- Superkey: relation의 각각의 tuple을 구별할 수 있는 하나 이상의 속성의 조합이다.
{ID}, {ID, name} 모두 superkey이다.- Candidate key: 최소 attribute를 사용한 superkey 조합이다. {ID}, {ID, name} 모두 superkey이지만 {ID}가 최소의 조합일 경우 이를 candidate key라 칭한다. 최소의 조합이 여러개일 경우 이 모두 candidate key이다.
- Primary key: 최소의 조합들 중 개발자가 지정한 하나의 조합이다.
- Foreign key: 다른 relation의 primary key이다.
Referencing relation: 다른 relation의 primary key를 참조하는 relation
Referenced relation: 다른 relation에게 primary key를 참조 당하는 relation
참조하거나 당하는 key 모두 primary key이다.