CS/자료구조 · DB

[데이터베이스] 3. 관계 데이터 모델, 키(key)

프로필사진
inup 2023. 11. 2. 13:21

 

관계 데이터 모델

관계 데이터 모델(relational data model)은 가장 많이 사용되는 논리적 데이터 모델이다. 하나의 개체에 대한 데이터를 하나의 릴레이션에 저장하게 된다. 관계 데이터 모델은 단순한 테이블(릴레이션)을 사용하여 중첩되거나 복잡한 구조가 없어 이해가 쉽다. 또한, 지속적으로 발전해온 덕분에 이론적인 토대를 갖추고 있다. 따라서 적용된 사례가 많고 안정적이며, 좋은 성능을 낼 수 있다는 장점이 있다.

 

릴레이션(relation)

릴레이션(테이블)은 행(row)과 열(column)으로 구성된 테이블로, 피벗을 포함한 일반적인 표와 유사한 구조로 이루어져 있다.

 

 

 

관계 데이터 모델의 기본 용어

 

속성(attribute) : 릴레이션에서 열을 '속성' 또는 '어트리뷰트'라 부른다. 가령 고객 릴레이션이 있다면, 아이디나 이름, 주소, 등급 등이 속성이 될 수 있다.

 

튜플(tuple) : 릴레이션에서 행을 '투플' 또는 '레코드'라 부른다. 고객 릴레이션에서는 고객 한 명에 대한 실제 속성 값들의 집합, 즉 인스턴스(instance)와 대응되는 개념이다.

 

도메인(domain) : 하나의 속성이 가질 수 있는 모든 값의 집합이다. 일반적으로 데이터 타입(자료형)이 될 수 있다.

 

차수(degree) : 한 릴레이션에 들어있는 속성의 개수 (최소 차수 1)

 

카디널리티(cardinality) : 릴레이션의 투플 수 (최소 카디널리티 1)

 

 

차수와 카디널리티의 수 구하기

 

 

 

관계 데이터 모델로 표현된 위의 예시 테이블에서, 릴레이션의 수·차수·카디널리티는 각각 어떻게 될까? 릴레이션의 수는 1, 차수는 3, 카디널리티는 5이다. 차수는 속성의 개수, 카디널리티는 투플(인스턴스)의 개수임을 기억하자.

 

 

 

릴레이션의 특성

투플의 유일성 : 1개의 릴레이션에는 동일한 투플이 존재할 수 없다. (릴레이션 인스턴스는 모두 다른 투플만을 가진다.)

 

두 개의 투플이 완전히 동일해요.

 

속성의 원자성 : 각 속성값은 단일값(원자값)으로, 더이상 분해 불가능한 값이다. 따라서 취미 속성에 '독서, 운동'과 같이 분해가 가능한 값이 대입되는 것은 속성의 원자성 위반이다.

 

투플 · 속성의 무순서성 : 투플들의 순서와 속성들의 순서는 무의미하다. 예시 릴레이션에서, 고객 이름이 '마리오'인 투플과 '루이지'인 투플을 변경해도 릴레이션의 스키마와 인스턴스는 모두 동일하다.

 

 

 

릴레이션의 구성

 

릴레이션 스키마

릴레이션의 논리적 구조를 말한다. 릴레이션 이름과 속성의 이름으로 정의된다. 한 번 정해지면 자주 변경되지 않으므로, '정적'인 특성이 있다.

예를 들어, 위의 예시 릴레이션은 고객(고객아이디, 고객이름, 나이) 와 같이 정의할 수 있다.

 

릴레이션 인스턴스

릴레이션에 실제 저장되어 실체화된 데이터의 집합을 말한다. 시간이 지남에 따라 계속해서 변하는 '동적' 특성이 있다.

마리오와 쿠파 등 고객의 실제 데이터는 모두 인스턴스에 해당한다.

 

 


 

키(Key)

키(key)는 릴레이션에서 튜플을 유일하게 식별할 수 있는 속성 또는 속성들의 집합을 말한다. 

 

고객아이디 속성이 서로 달라요.

 

파란색 박스 안의 두 고객 모두 이름이 '마리오'이며 나이는 30세이다. 그러나 고객 아이디가 서로 다르다. 따라서 두 투플 모두 각각 유일하며, 고유하게 식별이 가능하다. 릴레이션은 중복된 투플을 허용하지 않으므로, 만일 고객아이디 속성이 없다면 30세의 마리오인 두 투플을 구분할 수 없어지게 된다. 키(key)는 투플들을 서로 구분할 수 있게끔 하는 속성의 집합으로, 예시 릴레이션에서는 '고객아이디'를 키가 되는 속성이라고 말할 수 있다.

 

릴레이션은 중복된 투플을 허용하지 않기에, 각각의 투플에 포함된 속성들 중 하나 이상은 값이 달라야 한다. 즉, 키가 되는 속성은 반드시 값이 달라서 투플들이 서로 구별되게끔 하여야 한다.

 

 

 

슈퍼 키(Super key)

슈퍼키란 튜플을 유일하게 식별해낼 수 있는 하나의 속성, 또는 속성들의 집합을 말한다. 즉, 슈퍼키는 유일성(uniqueness)을 만족한다. 속성 단 1개부터 릴레이션을 구성하는 모든 속성의 집합까지, 투플이 '고유하게 식별 가능'하기만 하다면 모두 슈퍼키에 해당한다. (속성1, 속성2, ...) 와 같이 표기한다.

 

 

*유일성 : 각각의 튜플을 고유하게 식별할 수 있게 되는 성질.

 

 

후보 키(Candidate key)

후보키는 튜플을 유일하게 식별해낼 수 있는 속성들의 최소 집합을 말한다. 즉, 후보키는 유일성과 최소성(minimality)을 모두 만족해야 한다.

 

 

학생들의 릴레이션을 예시로 봤을 때, 후보 키는 2개가 될 수 있다. (학번), 또는 (전화번호)이다. (학번, 이름)의 경우 유일성을 만족하지만 최소성을 만족하지 않으므로 후보키가 될 수 없다.

 

*최소성 : 꼭 필요한 최소한의 속성들로만 키를 구성하는 성질.

 

 

기본키(Primary key)

여러 후보키 중 하나를 선정하여 대표로 삼는 키를 말한다. 후보키가 1개인 경우, 후보키가 기본키가 된다.

기본 키를 고를 때는 일반적으로 아래와 같은 사항을 고려 후 최적의 기본키를 선정한다.

 

① 속성값으로 널(null)은 허용하지 않는다.

② 속성값의 변동이 일어나지 않을수록 좋다.

③ 최대한 적은 수의 속성을 가져야 한다.

또한, 릴레이션의 특성을 가장 잘 반영할수록 좋다.

후보키는 (학번), (전화번호) 2개였지만, 위의 조건을 만족하며 릴레이션의 특성을 잘 반영하는 (학번)을 기본 키로 고를 수 있을 것이다.

 

일반적으로 키를 선정할 때에는 슈퍼키 찾기, 후보키 찾기, 기본키 선정의 순서로 진행하게 된다. 슈퍼 키를 선정한 후, 최소성을 만족하는 부분 집합인 후보 키를 찾고, 그 중 가장 적합한 기본키를 선정한다.