데이터베이스

[DB] 관계형 데이터베이스, 키

주니모 2023. 8. 22. 14:57

과거의 파일 시스템에서 현재 DBMS의 사용으로 발전해나가면서 여러 종류의 데이터베이스 모델이 등장했다. DB 모델이란 DB 구조, 처리 과정 등에 대한 추상화된 개념이다. 어떤 DB 모델을 사용하느냐에 따라 DB의 종류가 달라지는데, DB 모델의 종류에는 계층형 모델, 네트워크형 모델, 관계형 모델, 객체관계형 모델 등이 있다. 여기서 주목할 부분은 관계형 모델이다.

 

관계형 데이터베이스, RDB

관계형 데이터베이스는 관계형 DB 모델을 사용하는 데이터베이스이다. RDB는 1970년대에 이르러 등장하였는데, RDB에서는 데이터 관리 언어인 질의어로 SQL을 사용하여 원하는 데이터의 조건과 특징만 있으면 그 데이터를 바로 찾을 수 있다. 즉 데이터 독립성을 제공한다. RDB의 가장 큰 특징은 각각의 데이터 튜플들을 행과 열의 정보를 가진 하나의 테이블로 구조화하여 데이터 간의 관계를 표현한다는 것이다.

위와 같이 RDB에서는 데이터들이 row와 column으로 구성된 하나의 테이블로 나타나며, 모든 데이터는 릴레이션으로 표현된다. 이때 SQL에서는 각 행{89001, 홍길동, 2, 170, CD}을 튜플이라고 하고 튜플들을 묶는 특성들을 속성이라고 한다. 하나의 속성에 속하는 각각의 열들은 그 속성의 도메인이다. 그리고 이 테이블 전체를 릴레이션이라고 부른다.

 

하나의 릴레이션은 릴레이션 스키마와 릴레이션 인스턴스로 구성된다. 릴레이션 스키마란, 속성들의 집합으로 릴레이션의 놀리적 구조를 나타낸다. 릴레이션 인스턴스는 튜플들의 집합이다.

 

릴레이션은 다음과 같은 특성을 가진다.

 

  • 튜플의 상이성 : 릴레이션에 포함된 튜플들은 서로 달라야 한다.
  • 튜플의 무순서성 : 튜플들 간에는 순서가 존재하지 않는다.
  • 속성의 무순서성 : 속성들 간에는 순서가 존재하지 않는다.
  • 속성의 원자성 : 모든 속성값은 원자값(atomic value)이며 관계 DB 모델은 정규화 릴레이션만을 대상으로 한다.

눈여겨 볼만한 부분은 모든 속성값이 atomic하다는 점이다. RDB의 속성값들은 더는 분해되지 않는 독립적인 원자값만을 가진다. 이는 속성이 또 다른 큰 분류에 속하지 않으며 다중값이 아니라는 뜻이다. 

 


 

데이터베이스 키

관계형 데이터베이스는 키(Key)를 이용하여 각각의 튜플들을 식별한다. DB에서 키란 릴레이션 내의 튜플을 항상 유일하게 식별할 수 있는 속성들의 집합을 뜻한다. 이런 점에서 키는 튜플 식별자라고도 할 수 있으며 릴레이션이 변경되더라도 키는 고유하다.

예를 들어 위 student 릴레이션에서 키가 될수 있는 것은 Student id이다. 학번은 각 학생들마다 고유하므로 학번을 알면 그 학생이 누구인지 알 수 있기 때문이다. 그러나 이름, 소속대학 등은 유일하지 않으므로 해당 속성값이 같은 학생도 릴레이션에 존재할 수 있다. 따라서 이는 키가 아니다.

 

키의 종류에는 후보키, 슈퍼키, 기본키, 대체키, 외래키가 있다.

 

  • 후보키(Candidate key) : 하나의 속성이라도 제외하면 키가 되지 못하는 속성 집합(또는 속성)이다. 예를 들어 하나의 대학에 이름이 같은 학생은 존재하지 않는다고 하면 {이름, 소속대학}은 키가 될 수 있다. 여기서 하나의 속성을 제외하면 더 이상 키가 될 수 없다. 이는 유일성과 최소성을 모두 만족한다. 
  • 슈퍼키(Super key) : 유일성은 만족하나 최소성은 만족하지 못하는 키이다. 후보키와 달리 하나의 속성을 제외하더라도 여전히 키인 속성 집합을 뜻한다.
  • 기본키(Primay key, PK) : 후보키들 중에서 설계자가 특별히 지정한 키로, NULL 값을 가질 수 없다. 릴레이션에서 기본키는 1개만 지정할 수 있다. 따라서 대부분의 경우 기본키로 릴레이션에 접근하기 때문에 릴레이션에서 아주 중요한 의미를 가진다. 
  • 대체키(Alternate key) : 후보키 중 기본키로 지정되지 않는 나머지의 키들을 뜻한다.
  • 외래키(Foreign key) : 다른 릴레이션의 기본키를 참조하여 가져올 때 그 기본키를 외래키라고 한다. 다른 릴레이션의 기본키이므로 NULL 값을 가질 수도 있으며, 이때 외래키를 참조한 릴레이션을 참조 릴레이션, 기본키가 참조된 릴레이션은 피참조 릴레이션이라고 한다.

데이터베이스의 키와 관련하여 릴레이션은 두 가지 무결성 제약 조건을 반드시 지켜야만 한다.

 

  1. 개체 무결성 제약 : 기본키에 해당하는 속성은 NULL 값이 될 수 없다.
  2. 참조 무결성 제약 : 릴레이션은 참조할 수 없는 외래키 값을 가져서는 안된다. 이는 참조 릴레이션의 기본키 값은 NULL 값 또는 반드시 피참조 릴레이션에 존재하는 값이어야 한다.

만약 데이터베이스가 위 제약 조건을 만족하지 못하면 그 데이터베이스는 무결성이 지켜지지 않은, 부정확한 상태로 간주된다.