DB정리는 할껀데 핵심만 할껍니다. - 키와 무결성

2

DB

목록 보기
4/4

무결성

무결성은 데이터 베이스에 있어서 정말 중요한 주제이다. 시험에도 잘나오고 면접에도 잘나오므로 잘 알아두도록 하자

1. 키 개념

key라는 것은 무언가를 식별하는 고유한 식별자(identifier) 기능을 한다. 이러한 key는 릴레이션에서 하나의 속성으로, 각 튜플이 다른 튜플과 구분되는 식별자 역할을 한다.

이전에 릴레이션에서 속성에 밑줄을 그었던 것이 바로 key인 것이다.

밑줄 친 회원 번호가 바로 key가 되어서, 각 튜플을 구분하는 역할을 하는 것이다. 즉, 오규영과 섹시수환, 똥준휘는 회원번호로서 유일한 구분된다는 것이다.

relation key에는 4가지 키 개념이 있다. 수퍼키, 후보키, 기본키, 대체키 등과 같은 것이 있다.

1.1 수퍼키(Super key)

수퍼키(super key)는 하나의 릴레이션을 구성하는 속성들 중에서 각 튜플을 유일하게 식별할 수 있는 하나 또는 그 이상의 속성들의 집합이다. 유일성(uniqueness)란, 하나의 키값으로 하나의 튜플을 유일하게 식별할 수 있는 성질을 말하는데, 수퍼키가 바로 이 유일성이라는 개념을 포함하고 있다.

그런데, 수퍼키는 다음과 같이 튜플을 고유하게 구별하는데 꼭 필요하지 않은 속성들도 포함할 수 있다.

다음의 예제에서 식별자 역할을 할 수 있는 것들을 정리하면

(회원번호, 이름)
(회원번호, 등급)
(회원번호, 주민등록번호)
(적립금, 주민등록번호)
...

잘보면 식별자 역할을 하는 것은 회원번호주민등록번호이다. 때문에 이들과 다른 것 아무거나 합쳐도 식별자가 될 수 있고, 이를 수퍼키라고 부를 수 있는 것이다.

수퍼키는 유일성의 원칙만 포함하면 되기 때문이다.

1.2 후보키(Cnadidate key)

후보키는 릴레이션을 구성하는 속성들 중에서 각 튜플을 유일하게 식별할 수 있는 최소한의 속성들의 집합이다. 최소성(minimality) 은 모든 튜플들을 유일하게 식별할 수 있는 최소한의 속성들의 집합을 의미한다.

즉, 수퍼키 중에서 최소성을 지키는 것들을 의미하는 것이다. 이렇게 후보키는 하나의 릴레이션에 있는 모든 튜플에 대하여 유일성과 최소성을 동시에 만족시켜야 하기 때문에, 회원 릴레이션의 경우 슈퍼키는 많지만 후보키는 회원번호주민등록번호만 될 수 있다.

가령 위의 예제서 (회원번호, 이름)도 수퍼키였지만, 이는 유일성의 원칙만 지킨 것이기 때문에 후보키가 될 수 없다. 최소성의 원칙을 지키기 위하여 이름을 빼주어야하며 회원번호는 슈퍼키이자, 후보키가 된다.

이렇게 최소성의 원칙을 지키면 모든 속성값을 비교할 필요없이, 후보키 속성값만 비교하면 되기 때문에 효율적이다.

1.3 기본키(Primary key, PK)

기본키는 여러 후보키 중에서 하나를 선택하여 튜플을 식별하는데 기준으로 사용하는 키를 말한다.

하나의 릴레이션에서 후보키가 하나뿐이면 그 후보키를 기본키로 사용하면 되고, 두 개 이상 있으면 릴레이션의 특성을 고려하여 이들 중에서 하나를 선택하면 된다.

가령, 위의 예제에서는 후보키로 회원번호, 주민등록번호가 있다. 여기서 하나를 선택하여 기본키로 등록하는 것이다.

주의

만약, 두 개 이상의 투플에 대한 기본키 값이 같거나 둘 다 NULL이면 , 그들은 서로 구별이 어려워서 식별 기능을 상실하게 된다. 따라서 기본키로 정의된 속성은 NULL이나 중복된 값을 가질 수 없다.

1.4 대체키(Alternate key)

후보키가 두 개 이상일 경우에 그 중에서 어느 하나를 기본키로 지정하고 남은 후보키들은 대체키라고 부른다. 대체키는 기본키로 선정되지 않은 후보키를 의미한다.

1.5 외래키(Foreign key, FK)

위의 수퍼키, 후보키, 기본키, 대체키는 하나의 릴레이션에 관한 키 개념이었다. 그러나 키는 릴레이션 간의 관계를 맺는데도 사용 가능하다. 이전에 관계 데이터 모델은 포인터가 아닌 속성을 통해 참조를 표현한다고 했다. 이것이 외래키이다.

외래키는 다른 릴레이션의 기본키를 참조하는 속성을 말한다. 외래키는 다른 릴레이션의 기본키를 참조하여 관계 데이터 모델의 특징인 릴레이션들의 관계표현한다. 외래키 속성은 참조하는 릴레이션의 기본키와 동일한 도메인을 가져야 한다.

1.5.1 외래키를 이용하여 다른 릴레이션을 참조

다음의 예시에서 회원 릴레이션은 등급이 외래키이다. 등급별 할인율 릴레이션에서 등급은 기본키(PK)이다. 이렇게 외래키는 다른 릴레이션의 기본키를 가리켜서 릴레이션 간의 관계를 나타낼 수 있는 것이다.

가령, 섹시수환은 등급이 3등급이므로 할인율은 10%이다 (sad...) 이는 할인율이 회원 릴레이션에 없는데도 불구하고 서로 릴레이션 관계를 맺었기 때문에 참조할 수 있는 것이다.

물론, 외래키는 기본키와 같은 이름을 가질 필요는 없다. 회원 릴레이션에서 등급이 아니라 등급별 할인으로 두고, 등급별 할인율 릴레이션의 등급 속성과 외래키 관계를 맺으면된다.

1.5.2 외래키를 이용하여 자신을 참조

다음과 같이 사원 릴레이션에서 기본키는 사원번호이다. 각 사원들의 관리자들이 누구인지를 알기위해서 외래키로 관리자속성은 기본키인 사원번호를 참조한다.

섹시수환은 관리자가 없으므로 NULL 값을 갖게 되는 것이다.

한편 외래키는 자신이 속한 릴레이션의 기본키 구성요소가 될 수도 있고, 되지 않을 수도 있다.

정리하면, 다음과 같다.

기본키 : 유일성최소성을 만족하는 속성 또는 속성 집합 중에서 하나를 선택해 기준으로 사용하는 키
외래키 : 다른 릴레이션의 기본키를 참조하는 속성 또는 속성 집합

2. 무결성 제약조건

무결성 제약조건은 데이터베이스 상태가 만족시켜야 하는 조건이며 권한을 가진 사용자로부터 데이터 베이스의 정확성을 지키는 수단이다.

무결성 제약조건의 장점은 스키마를 정의할 때 일관성 조건을 오직 한번만 명시하면, 데이터베이스가 갱신될 때 DBMS가 자동적으로 일관성 조건을 검사하므로 응용프로그램들은 일관성 조건을 검사하지 않다도 된다.

무결성 제약 조건은 다음과 같다.

총 6가지로 나눌 수 있는데, 굳이 외울 필요도 없고 책마다 6가지가 아니라 4개 또는 2개로도 나눌 때가 있다. 중요한 것은 개체 무결성참조 무결성이다.

  1. 도메인 무결성 : 도메인 무결성은 각각의 속성에 규정된 도메인에 따라 제약이 생긴 것을 의미한다. 즉, 해당 속성의 도메인에 맞는 데이터를 삽입해야하는 것이다.
  2. 키 무결성 : 릴레이션에는 최소한 하나의 키가 존재해야한다는 것이다. 왜냐하면 릴레이션은 투플을 구분해야하기 때문이다.
  3. null 무결성 : 특정 속성은 null을 가질 수 없도록 만드는 것이다.
  4. 고유 무결성 : 특정 속성값은 서로 달라야 한다. 가령 pk로 선정된 속성의 모든 값들은 달라야 하는 것이다.

위의 4개의 무결성을 굳이 외울 필요는 없다. 어차피 아래에 나오는 개체 무결성과 참조 무결성을 설명하면 위의 무결성은 자연스럽게 지켜야하는 조건이기 때문이다.

  1. 개체 무결성 : 기본키 제약이라고도 부르는 개체 무결성 제약릴레이션에서 기본키를 구성하는 속성은 NULL이나 중복 값을 가질 수 없다. 가령 회원 릴레이션에서 회원번호는 각 튜플을 구분하고 고유하게 해주는 속성이다. 이 값이 NULL이거나, 중복된 값을 가지면 기본키로서의 기능을 잃게되므로 개체 무결성을 위반하게 되는 것이다.
  2. 참조 무결성 : 릴레이션 간의 참조 관계를 정의하는 제약조건으로 외래키는 참조할 수 없는 키를 가질 수 없다는 것이다. 외래키와 관련되었기 때문에 외래키 제약이라고도 한다. 자신이 참조하는 릴레이션의 참조 가능한 기본키만 외래키로 사용해야 하며, 값이 없을 경우 외래키 값은 NULL이 될 수 있다.

참조 무결성에 대해서 더 알아보면 다음과 같다.

회원 릴레이션에서 등급을 참조하여 사용할 수는 있지만, 등급별 할인율 릴레이션의 등급 자체를 변경하거나 삭제할 수는 없다. 즉, 참조는 가능하되 삭제나 변경은 불가능하다는 것이다.

이 때 참조되는 릴레이션인 등급 릴레이션을 부모, 참조하는 릴레이션을 자식이라고 하자, 참조 무결성은 다음의 조건 둘 중 하나를 성립해야만 한다.

  1. 조건1 : 외래키 값은 부모 릴레이션의 어떤 튜플의 기본키 값과 같다.
  2. 조건2 : 외래키가 참조하고 있는 릴레이션의 기본키가 없다면, 외래키는 NULL 값을 가진다.

참조 무결성 제약조건에서 자식 릴레이션의 외래키는 부모 릴레이션의 기본키와 도메인이 같아야 하며, 이는 자식 릴레이션의 값이 변경될 때 부모 릴레이션 도메인에 제약을 받는다는 것이다.

이러한 무결성들은 위배되어서는 안되는 relation의 규칙인 것이다.

0개의 댓글