티스토리 뷰

반응형

안녕하세요 Pingu입니다.🐧

 

지난 글에서는 관계형 DB를 사용할 대 사용하는 SQL 문법에 대해서 간단하게 알아봤었는데요, 이번 글에서는 데이터 베이스를 구성할 때 필요한 기본키와 외래 키에 대해서 알아보려고 합니다.

후보 키 (Alternative Key)

  • 테이블에서 튜플을 유일하게 식별할 수 있는 최소한의 컬럼들의 집합입니다.
  • 기본키가 될 수 있는 후보들이며 유일성, 최소성을 동시에 만족해야 합니다.
학번 학과 이름 전화번호
140001 소프트웨어학과 Pingu 01012345678
150001 경제학과 Pinga 01023456789
150002 통계학과 Roby 01034567890
160001 소프트웨어학과 Pingu 01045678901

위와 같은 테이블이 존재할 때 (학번 + 학과) 조합은 최소성을 만족하지 않기 때문에 후보 키가 될 수 없습니다.

최소성과 유일성을 동시에 만족하는 컬럼은 학번, 전화번호입니다.

기본 키 (Primary Key)

기본키(Primary Key)는 관계형 데이터 베이스에서 식별자로 사용하기 위해 테이블마다 하나씩 존재하는 데이터를 말합니다. 기본키가 될 수 있는 컬럼들을 후보 키(Candidate Key)라고 하며 기본키는 후보 키들 중 하나를 선택한 컬럼이라고 할 수 있습니다.

 

  • 후보키들 중 하나입니다.
  • 최소성과 유일성을 만족하는 컬럼 입니다.
  • 모든 테이블에서 기본키는 1개 존재해야 합니다.
  • NULL 값을 가질 수 없습니다.

그럼 간단한 테이블을 보며 어떤 컬럼이 기본키에 적절한지 살펴보겠습니다.

학번 학과 이름 전화번호
140001 소프트웨어학과 Pingu 01012345678
150001 경제학과 Pinga 01023456789
150002 통계학과 Roby 01034567890
160001 소프트웨어학과 Pingu 01045678901

만약 위와 같이 존재하는 테이블이 존재한다고 했을 때 식별자로 사용될 수 있는 후보 키는 어떤 컬럼이 있을까요?

일단 후보 키의 조건을 만족하는 컬럼은 학번과 전화번호입니다.

두 개의 컬럼은 중복되는 값이 존재할 수 없기 때문에 후보 키에 적절하다고 할 수 있어요.

후보 키가 하나일 경우에는 해당 컬럼이 당연히 기본 키가 되겠지만 위와 같이 두 개 이상 존재할 때에는 하나를 선택해줘야 합니다.

만약 학번을 기본키로 선택했다고 한다면, 전화번호는 후보 키 중 기본키가 아닌 키라고 해서 대리 키(Alternate Key)라고 부릅니다.

 

관계형 데이터 베이스의 모든 테이블은 적어도 하나의 후보 키를 가지며 후보키를 하나의 컬럼으로 구성할 수도 있지만, 두 개 이상의 컬럼을 조합하여 구성할 수도 있습니다.

 

하나의 컬럼으로 구성된 후보키를 단순 후보키 (Sample Candidate Key)라고 하며 두 개 이상의 컬럼을 조합한 후보키를 복합 후보 키(Composite Candidate Key)라고 합니다.

슈퍼 키 (Super Key)

  • 슈퍼키는 컬럼들의 모든 집합 중 식별자로 사용할 수 있는 집합들을 말합니다.
  • 후보키는 최소성과 유일성을 만족해야하지만 슈퍼키는 유일성만 만족하면 됩니다.

외래 키(Foreign Key)

그렇다면 외래 키(Foreign Key)는 무엇일까요?

 

관계형 데이터 베이스에는 여러 개의 테이블이 함께 존재할 수 있습니다. 테이블들이 동일한 컬럼을 가지고 있을 수 있죠. 이러한 컬럼을 사용하면 한 테이블에서 다른 테이블의 튜블을 식별할 수 있게 됩니다.

 

  • 다른 테이블의 데이터를 참조할 때 사용하는 값입니다.
  • 참조되는 테이블의 기본키여야 외래 키로 사용할 수 있습니다.
  • 참조하는 테이블과 참조되는 테이블의 도메인이 같아야 합니다.

예를 한 번 보겠습니다.

위와 같이 학생 테이블과 학과 테이블이 있습니다. 학과 테이블의 기본키는 학과이고 학생 테이블의 기본키는 학번입니다.

학생 테이블에 존재하는 학과 컬럼은 학과 테이블에서는 기본키에 해당합니다.

즉 학과 테이블에서는 학과 컬럼으로 튜플을 구분할 수 있어요.

따라서 학생 테이블에서 학과 테이블을 참조할 때 사용할 수 있으며 이렇게 사용할 수 있는 키를 외래 키라고 합니다.

 

외래 키로는 자기 자신도 참조할 수 있는데요 이러한 경우를 Self-Referencing(자기 참조)라고 합니다.

 

어떠한 컬럼이 외래 키일 때 적용되는 규칙은 아래와 같아요

  • 참조 무결성 규칙 (Referential integrity rule)
    • 데이터베이스는 부합되지 않는 어떠한 외래 키값도 포함하면 안 됩니다.
    • A테이블이 B테이블을 참조할 때 A테이블에서 외래 키로 사용되는 컬럼의 모든 도메인을 B테이블도 가지고 있어야 합니다.

이러한 규칙을 만족하지 않는 연산에 대해서는 시스템이 거부할 수 있습니다.

 

참조되고 있는 테이블의 데이터를 삭제 혹은 수정하는 경우 데이터 정합성을 유지하기 위해 주의해야 합니다.

외래 키로 사용하려면 참조하는 테이블과 참조되는 테이블의 도메인이 같아야하며 참조 되는 테이블의 기본키여야 하기 때문이죠!

만약 참조되고 있는 도중 테이블의 데이터가 아무 제약 없이 바뀐다면 갑자기 외래 키로 사용할 수 없는 오류가 발생할 수 있기 때문에 주의해야 합니다.

이러한 경우를 대비하여 SQL에는 5가지 옵션이 있습니다.

  • CASCADE
    • 참조되는 테이블의 튜플이 삭제되었을 경우, 참조하는 테이블과 대응되는 모든 튜플이 삭제됩니다.
    • 참조되는 테이블의 튜플이 수정되었을 경우, 참조하는 테이블의 외래 키 값도 수정됩니다.
  • RESTRICT
    • 참조하는 테이블의 튜플이 남아 있는 경우, 참조되는 테이블의 튜플을 수정하거나 삭제할 수 없습니다.
  • NO ACTION
    • 참조되는 테이블에 대해 UPDATE, DELETE가 실행한다면 일단 수행하고 외래 키의 제약을 만족하지 못하는 경우 다시 롤백합니다.
    • MySQL에서는 RESTRICT와 동일하게 동작합니다.
  • SET NULL
    • 참조 되는 테이블에 대해 튜플이 수정, 삭제되었을 경우, 참조하는 테이블의 튜플에 대한 외래 키값을 NULL로 설정합니다.
    • 이 옵션은 외래 키에 NULL을 설정할 수 있는 경우에만 사용할 수 있습니다.
  • SET DEFAULT
    • SET NULL과 비슷하지만 참조되는 테이블의 튜플이 수정, 삭제되었을 경우, 테이블의 외래 키 값은 컬럼의 기본값으로 설정됩니다. 
반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함