middlefitting

RDBMS Key의 정의와 종류 본문

Database

RDBMS Key의 정의와 종류

middlefitting 2024. 2. 3. 18:56

정의

RDBMS 키는 데이터를 식별하고 정렬하는데 사용되는 하나 또는 여러개의 필드를 의미한다.

이는 데이터의 제약조건과 관계를 정의하고 무결성을 유지하는 중요한 역할을 담당한다.

키를 구성하는데 있어 고려할 점은 그것이 현재 상태에 한정되지 않고 영원하다는 것이다. 따라서 비즈니스상 키의 속성이 항상 유지될 수 있을지 충분히 고려하고 키를 선정하여야 한다.

 

종류

해당 글에서는 이론적인 개념만 가지는 키를 이론적 키로, 물리적으로 구현될 수 있는 키를 물리적 키로 구분한다.

이론적 개념은 테이블에서 식별된 것을 의미한다. 물리적 개념은 식별된 것을 데이터베이스 시스템에 구현한 것을 의미한다.

이론적 키

1) 슈퍼키

슈퍼키는 유일성의 특성을 만족하는 속성들의 집합을 말한다.

유일성이라는 것은 하나의 릴레이션에서 튜플마다 슈퍼키가 고유하여야 한다는 뜻이다. 즉 슈퍼키가 같은 튜플은 존재할 수 없다.

또한 슈퍼키는 Null 값을 가질 수 없다. Null값을 가진다는 것은 릴레이션의 튜플을 고유하게 식별할 수 없다는 것을 의미하기 때문이다.

아이디 이름 나이
1 김민수 20
2 김민수 28
3 김승혜 28

- 고객 릴레이션 - 

 

그렇다면 다음과 같은 고객 릴레이션이 있을 때 어떤 속성 집합이 슈퍼키가 될 수 있을까.

다음과 같은 집합이 유일하니까 슈퍼키가 될 수 있을 것이다.

 

- {아이디}

- {아이디, 이름}

- {아이디, 나이}

- {아이디, 이름, 나이}

 

그런데 슈퍼키를 만드는데 있어 최소 속성를 가지는 아이디로 충분하다. 따라서 이름, 나이 필드를 슈퍼키 집합에 추가하는 것은 그다지 효율적으로 보이지 않는다. 그래서 슈퍼키에서 최소성의 규칙이 추가된 후보키가 존재한다.

2) 후보키

후보키는 유일성과 최소성을 만족하는 속성 또는 속성들의 집합이다. 여기서 말하는 최소성은 유일성을 만족시키기 위해 최소한의 속성으로만 키를 구성한다는 것을 말한다.

 

따라서 고객 릴레이션에서 후보키가 될 수 있는 슈퍼키는 {아이디} 인 것을 생각해 볼 수 있다.

3) 대체키

이름값대로 대체키는 기본키로 선택되지 못한 후보키들을 의미한다. 말그대로 기본키를 대체할 수 있는 키이다. 기본키에 대해서는 뒤에서 다룬다.

물리적 키

1) 기본키

기본키(Primary Key)는 릴레이션을 대표하는 키이다. 여러개의 후보키 중에서 비즈니스상 가장 적절한 키를 기본키로 선정하면 된다. 

따라서 당연히 기본키 또한 유일성과, 최소성을 만족하여야 한다. 더불어 Null값을 가질 수 없다. 이것을 기본키 제약조건이라고 부른다. 고객 릴레이션에는 후보키가 하나이니 {아이디}가 기본키가 될 수 있다. 기본키로 선정된 후보키는 밑줄을 그어 표시하게 된다. 따라서 고객 릴레이션을 다음과 같이 표시할 수 있다.

아이디 이름 나이
1 김민수 20
2 김민수 28
3 김승혜 28

 

기본키를 선정하는데 있어 고려할 점은 무엇이 있을까. 일반적으로는 변화가 적고, 간단한 것이다. 관리하기 좋기 때문이다.

 

기본키를 선정하지 않아도 되는건가 생각을 해볼수도 있다. 기본키를 지정하지 않고 릴레이션을 구성할 수는 있다.

하지만 무조건 존재해야 한다. 슈퍼키와 후보키는 이론적인 개념이기 때문이다.

기본키는 물리적으로 지정해서 구현한 것이기 때문에 해당 테이블에 유일한 식별자가 존재한다는 것을 보장할 수 있다. 즉 기본키가 없다는 것은 해당 릴레이션에서 원하는 튜플을 꺼낼수가 없다는 것을 의미한다.

2) 유니크 키

유니크 키는 후보키가 물리적인 키로 구현된 것이다. 제약조건은 유일해야 한다는 것이다. RDBMS에 따라 다르긴 하지만 표준에 따르면 Null 값을 가질 수 있음에 유의하자. 비즈니스에 따라 Null 제약조건을 추가적으로 지정해서 사용하도록 하자.

3) 외래키

외래키는 이론적으로는 후보키가 다른 릴레이션의 기본키가 되는 것을 말한다. 물리적으로는 기본키 혹은 유니크 키가 외래키가 될 수 있다. 비즈니스상 효율적인 키를 외래키로 지정하면 된다. 외래키도 기본적으로 Null 값을 허용한다.

 

외래키 선정에 유의사항은 속성 이름은 다르게 지정할 수 있지만 도메인은 같아야 한다. 도메인이 같다는 것은 같은 데이터 타입과 제약조건을 가져야 한다는 것이다.

 

이러한 특징으로 외래키는 앞서 말한 관계를 정의한다. Cascade 옵션을 통해 참조하는 테이블의 생명주기에 따라 어떤 동작을 수행할지 지정할 수 있다.

 

또한 외래키는 무결성을 보장한다. 외래키가 아닌 다른 속성으로 Join을 수행한다면 의도하지 않은 결과가 나올 수 있다는 것은 당연하다. 외래키는 같은 도메인을 가지니까 테이블 간 Join을 수행할 때 무결성을 보장할 수 있다.