개요
Relational Model은 데이터를 표현하기 위해서 표의 형식을 사용한다. 각각의 표는 고유한 이름(속성)을 가지는 열들을 통해 data를 표시한다. 또한, 현재 대부분의 data model은 Relational Model로 이루어져 있다.
예시
파일:Relational Model Example1.jpg 파일:RelationalModelExaple2.png
오른쪽의 그림은 두개의 표로 구성된 Relational Model의 예시이다. 첫번째 테이블인 instructor 표에서는 ID가 22222인 Einstein 교수가 물리학과 소속이며, 연봉이 95,000달러임을 나타낸다. 두 번째 테이블인 department 테이블에서는, 예를 들어, 생물학과가 Watson 건물에 위치하고 있으며, 예산이 90,000달러임을 나타낸다.
Relational Schema와 Instance
[math]\displaystyle{ A_1, A_2, ...,A_n }[/math]이 구현하고자 하는 DB의 attribute(속성)이라고 하자. relation schema는 relation의 구조를 정의하는 것이다. relation schema R은 [math]\displaystyle{ R = (A_1, A_2, ...,A_n) }[/math]과 같이 정의된다. [1] relation instance은 relation table에 저장된 실제 데이터를 의미한다. relation r의 원소 t는 tuple이라고 불리며, 이는 table에서 행에 해당한다.[2] 또한 schema R에 대한 relation instance r은 r(R)로 나타내어 진다.
이때 tuple들은 서로 irrelevant하며, 이는 tuple이 정렬되어 있지 않다는 것을 의미한다. 또한 하나의 relation 내에서 두개의 튜플이 모든 속성에 대해 정확히 동일한 값을 가지는 것은 허용되지 않는다. 즉, 튜플의 속성 값의 집합은 해당 튜플을 고유하게 식별할 수 있어야 한다.
Attribute
Attribute는 atomic하다. 이는 해당 속성이 단일한 값으로 이루어졌기 때문에 쪼개서 또다른 정보를 얻을 수 없다는 것을 의미한다. 또한 Attribute는 Domain을 가진다. Domain은 각각의 attribute에 대해 허용되는 value의 집합을 의미한다. 이때 null은 해당 value가 정의되지 않았음을 의미하며, 모든 domain에 원소로 존재한다.
Keys
집합 K가 relation schema R의 부분집합이라고 하자. superkey, candidate key, primary key, foreign key는 다음과 같이 정의된다.
- superkey: K를 구성하는 속성들 만으로 r(R)에 속하는 각 튜플을 고유하게 구분할 수 있다면 K를 R의 superkey라고 한다.
- 현재의 인스턴스 r을 기준으로 하는 것이 아니라 앞으로 변경되거나 추가될 tuple까지 고려하여 결정한다.
- 예시: instructor relation에서 {ID}, {ID, name}, {ID, salary} 등은 superkey에 해당한다.
- candidate key: superkey K에서 불필요한 속성을 제거하여 미니멀 해졌다면 K는 candidate key에 해당한다.
- 예시: instructor relation에서 {ID}가 candidate key에 해당한다.
- primary key: candidate key 중에서 DB 설계자가 주요 식별자로 선택한 key를 의미한다.
- DB 설계자가 primary key 값을 고르는 기준은 존재하지 않는다. 즉, 자기 마음대로이다.
- foreign key: 한 relation의 속성 값이 다른 relation의 primary key 값을 참조하는 경우, 해당 속성을 foreign key라고 한다.
- 예시: instructor relation에 존재하는 dept_name은 department relation의 primary key이므로 instructor의 foreign key이다.
- foreign key가 존재하는 relation을 referncing relation이라고 하며, 해당 key가 primary key로 존재하는 relation을 referenced relation이라고 한다.
- Referential Integrity Constraint: foreign key의 값은 반드시 참조하는 referenced relation에도 존재해야 한다.
- 예를 들어 department에서 dept_name = 'CS'를 삭제하고 instructor에서 dept_name = 'CS'를 가진 튜플이 존재하면 문제가 생긴다.