2010년 10월 27일 수요일

PK와 FK의 필요성

오라클 데이터베이스에서 테이블을 생성에 있어서 가장 기본적으로 고려되는 PK(Primary Key)입니다.

이 PK의 중요성 만큼 FK(Foreign Key)는 중요시 되지 않는것 같아 PK와 더불어 FK에 대해 알아 보면서 FK의 중요성에 대해서 알아 보겠습니다.

데이터베이스의 목적은 말그대로 수 많은 데이터들을 보관 및 관리하는 것입니다.

그것도 효율적이고, 성능면에서 매우 편리하며 신속한 처리를 요하는 것입니다.

이 모든것 보다 우선시 되어야 하는 것이 데이터의 무결성입니다.

아무리 많은 데이터를 아무리 신속하게 처리한다 하더라도 데이터에 결점이 있다면 데이터는 쓸모가 없을 뿐 아니라, 데이터의 결점으로 인하여 잘못된 결과를 초래할 수도 있습니다.

이러한 이유로 데이터 무결성은 매우 중요한 부분이라 하겠습니다.

이 데이터 무결성을 보장해주기 위해서 가장 기본적으로 필요한 것이 PK와 FK입니다.

우선 PK는 테이블에서 오직 한개만 존재할 수 있으며, 이 PK는 테이블에서 데이터의 유일성을 보장해 줍니다.

PK의 구성은 B*tree Index, Unique, Not Null의 구조를 가지고 있습니다.

이러한 구조이므로 테이블에서 PK를 조건으로 조회를 하면 오로지 한개의 값만 나오거나 아니면 값이 나오지 않게 되는 것입니다.

그럼 PK와 FK는 어떠한 관계를 가지고 있는 것일까요?

예를 들어보겠습니다.

학과 테이블이 있습니다. 이 테이블에는 학과코드가 PK입니다.

그리고 학생 테이블이 있습니다. 이 테이블에는 학생번호가 PK입니다.

또한 학생은 하나의 학과에 등록이 되어야 한다는 조건이 있다면, 학생테이블에 학과코드의 테이터가 있어야 하겠지요.

그럼... 만약 학생테이블의 학과코드의 값에 학과테이블의 학과코드에 없는 값이 들어간다면 어떻게 되겠습니까?

잘못된 데이터가 들어가게 되고, 이러한 데이터를 부모를 잃어버렸다라고 합니다.

그러므로 학생테이블에 데이터를 저장 또는 수정시 학과코드 데이터는 학과테이블에 있는 학과코드가 맞는지를 확인해야 합니다.

이것을 자동하여 주는 것이 FK입니다.

그래서 FK는 PK를 대상으로만 만들 수 잇습니다.

이것은 FK가 항상 PK를 참조하게 되는데, 만에 하나 FK가 유일인덱스가 아닌 데이터를 매번 조회하게 되면 성능에 심각한 문제가 발생할 수 있으므로 이러한 문제를 미연에 방지하기 위하여 기본적인 성능을 보장하여야 하는 조건을 강제로 하기 위해 PK를 대상으로만 FK를 만들수 있게 한것입니다.


그러므로 PK와 FK를 이용하여 성능도 고려하면서 데이터 무결성도 보장을 할 수 있다는 것입니다.

댓글 3개:

  1. 죄송합니다.. 설명이 너무 어렵네요.. 학생테이블의 학과코드의 값.. 이라는 형식의 예가 너무 어렵습니다.PK와 FK의 역할에 대해서는 어느정도 이해했습니다. 감사합니다.

    답글삭제
  2. 이해가 너무 잘되네요 설명 감사합니다

    답글삭제
  3. PK 값을 왜 지정해야 하는지 이해가 필요했는데 덕분에 이해가 확 됐어요 감사합니다

    답글삭제