3강. 데이터베이스 기초 3: Key란 무엇인가? #2
기본키(Primary Key), 외래키(Foreign Key)
일반적으로 고유키는 한 테이블에 하나 이상 있을 수 있습니다. 이 중 대표되는 고유 키를 Primary key 라고 부릅니다. 기본 키 필드는 자동으로 중복 불가능의 인덱스가 만들어 집니다.
일반적으로 기본 키는 주민등록번호, 사원번호, 학생번호, 기타 통신용 아이디 등과 같이 대부분 숫자나 문자로 코드화 된 값을 사용하는데 코드가
의미를 가지고 있는 것이 좋습니다. 예를 들면 컴퓨터 광고에
볼 수 있는 제품분류코드가 그것입니다. "123"이란 코드와 "P31710"코드를 비교해 봅시다. "123"에서는 아무런 정보를 얻을 수 없습니다. 그러나 "P31710"은 아마도 펜티엄 III 17인치 모니터 10기가 하드디스크 용량을 의미할 겁니다. 의미있는 코드를 키로 사용하는 것은 이것 외에도 여러 장점이 있습니다. 그러나 굳이 의미를 부여할 필요가 없는 경우는 신경 쓸 필요가 없는 일련번호 필드를 이용하는 것이 좋습니다.
기본 키가 없는 테이블은 관계에 사용할 수 없고, 정렬과 검색할 때 처리속도가 늦습니다. 따라서 가능하면 기본 키를 만들어 두시는 것이 좋겠습니다.
액세스에서는 일련번호라는 필드형식을 지원하며, 이 형식의 필드는 기본 키로 사용됩니다. 액세스에서 자동으로 키의 숫자를 증가시키면서 만들어 나가므로 매우 편리하게 사용됩니다. 영문법에서 자주 등장하는
<it> 와 같은 역할을 합니다. It는 특별히 주어나 목적어를 정하기 어려울 때 사용되듯이
특별히 기본 키를 정하기가 어려우면 일련번호필드를 기본 키로
사용하도록 합니다.
액세스의 경우 테이블을 만드는 경우 기본 키가 설정되지 않았으면 다음과 같은 메시지를 내서 관심을 유도합니다.
관계를 만들 때 쓰이는 상대 테이블의 키 필드를 2차키(Secondary key) 또는 외래키(Foreign Key)
라고 합니다. 서로 다른 테이블간에 관계를 형성하기 위해서는 한 테이블의 기본키(Primary key)가 존재해야 하며 상대 테이블에서 이 기본키에 대응하는 것이 외래키가 있어야 합니다.
다음 내용을 숙지해야 합니다.
- 기본키는 고유한 값을 가져야 합니다.(중복 불가능한 인덱스를 만들어 주면 됩니다.)
- 외래키는 기본키와는 달리 그 값이 고유해도 좋고 중복되어도 좋습니다. 다만 인덱스가 되어 있으면 연결하는데 있어 성능의 향상을 가져올 수 있습니다.
- 관련되어 있는 외래키와 기본키의 필드 이름 또는 인덱스 이름이 같을 필요는 없지만 가능하면 동일한 이름이거나 또는 한쪽 이름이 다른 쪽 이름의 일부를 구성하도록 이름을 짓는 것이 편리합니다
- 외래키는 기본키와 데이터 형식이 같아야
합니다.
- 기본 키는 Null 값이 될 수 없으며 항상 고유 인덱스를 가져야 합니다.
- 외래 키는 Null 값이 될 수 있습니다.
- 두 개 이상의 필드로 이루어진 외래 키 필드 중 Null인 필드가 있으면 모든 필드가 Null이 됩니다.
정리]
1> 자료의 검색, 정렬 시 속도를 향상시켜줍니다.
2> 자료가 중복으로 추가되어서 자료처리 시 발생할 수 있는 오류를 막아줍니다.
3> 관련 테이블을 연결하는데 사용됩니다.
참고]
액세스에서는 다음 3가지의 기본 키를 지원해 줍니다.
1. 일련 번호 기본 키
2. 단일 필드 기본 키
3. 다중 필드 기본 키
1) 일련 번호 기본 키
많은 분들이 액세스의 <일련번호 기본 키>를 레코드번호로 생각합니다. 다른 응용프로그램에서는 테이블에 나열되는 순서(상대적인 순서)로서의 레코드번호를 지원합니다.
엑셀의 행 번호도 그것입니다. 따라서 레코드번호로 원하는 위치로 찾아갈 수 있습니다. 액세스는 이러한 눈에 보이는 레코드번호를 지원하지 않습니다. 그러나 눈에 보이지는 않지만 상대적인 순서는 지원합니다. 테이블이나 폼의 제일 아래에 딸려있는 이동키 사이에 상대적인 위치를 입력하여 직접 이동할 수 있습니다. VBA코드를 이용하여 이동할 수도 있습니다. 또 DAO나 ADO 또는 폼 개체의 Bookmark(책갈피) 속성을 이용하여 이동합니다.
액세스에서 일련번호는 주 용도는 기본 키로 사용되는 겁니다.
주민등록 번호와 같은 겁니다. 따라서 한번 부여되면 그 번호는 다른 레코드에서 사용하지 않습니다.
따라서 위 테이블의 내용에서 볼 수 있듯이 일련번호가 3~6까지, 11~13까지의 자료가 없습니다. 해당 번호의 자료가 삭제된 것이지요. 많은 분들이 이것을 매우 어색하게 생각을 합니다. 그러나 단순한
일련 번호로서가 아니라 더 중요한 역할 때문임을 아셨으니까
더 이상 어색하게 생각하지 않기를 바랍니다.
일련 번호 필드는 각 레코드를 테이블에 추가할 때마다 일련 번호가 자동 입력됩니다. 이러한 필드를 테이블의 기본 키로 지정하는 것이 가장 쉽게 기본 키를 만들 수 있는 방법입니다. 따라서 특별히 기본 키를 정하기가 어려우면 이것을 사용하도록 합니다.
새로 만든 테이블을 저장하기 전에 기본 키를 설정하지 않으면 기본 키를 만들 것인지 묻는 메시지가 나타납니다. <예>를 선택하면 일련 번호 기본 키가 만들어집니다.
복제된 데이터베이스의 일련 번호 기본 키
테이블을 데이터베이스 복제에 사용할 경우에는 참고해야 할 내용이 더 있습니다.
복제 데이터베이스를 동기화하는 작업과 작업 사이에 일정하게 100개 미만의 레코드를 추가하려면
필드크기(Field Size) 속성으로 디스크 공간을 덜 차지하는
정수(Long)를 설정합니다. 정수(Long)는 크기가 4바이트입니다.
복제 데이터베이스를 동기화하는 작업과 작업 사이에 일정하게 100개가 넘는 레코드를 추가하려면
필드크기(Field Size) 속성으로 각 복제 데이터베이스의 기본 키 값과 동일한 값이 할당되지 않게 하는 복제 ID를 설정합니다. 그러나 일련 번호 필드에 복제 ID 필드가 포함되어 크기가 128비트(16바이트)가 되므로 디스크 공간이 더 많이 필요하게 됩니다.
2) 단일 필드 기본 키
ID 번호나 부품 번호와 같이 고유값이 들어 있는 필드를 기본 키로 지정할 수 있습니다. 데이터가 이미 들어 있는 필드라도 중복값이나
Null 값이 들어 있지 않으면 기본 키로 지정할 수 있습니다.
3) 다중 필드 기본 키
단일 필드가 고유한 값을 갖는다는 확신이 없을 때는 두 개 이상의 필드를 기본 키로 지정할 수 있습니다.
다대다 관계에 있는 다른 두 테이블을 연결할 때 사용하는 테이블의 경우에는 보통 다중 필드를 기본 키로 사용합니다. (관계의 유형에 대해서는 다음에 따로 설명이 됩니다.)
다중 필드 기본 키에 사용할 필드 조합을 선택하기 어려운 경우에는 일련 번호 필드를 추가해서 이 필드를 기본 키로 지정합니다.
다중 필드 기본 키에서 필드 순서가 중요할 수 있습니다. 다중 필드 기본 키의 필드는 테이블 디자인 보기에 있는 순서대로 정렬됩니다. 인덱스 창에서 기본 키 필드의 순서를 변경할 수 있습니다.
참고]
데이터 형식이 일치하지 않아도 되는 두 가지 예외
데이터 형식이 일치하지 않아도 되는 두 가지 예외는
정수(Long)로 설정된 숫자 필드와 일련 번호를 대응시킬 수 있다는 것과, 두 필드 모두
필드크기가 복제 ID로 설정되었을 때 숫자 필드와 일련 번호를 대응시킬 수 있다는 것입니다.
|