읽기전에 보면 좋은 글
키 (Key)
데이터베이스의 키는 무언가를 식별하는 고유한 식별자(identifier) 기능을 합니다.
즉, 키는 데이터베이스에서 조건에 만족하는 레코드를 찾는 경우, 다른 행과 구별할 수 있는 고유한 기준이 되는 속성의 집합입니다.
예제 테이블은 아래의 STUDENT
와 DEPARTMENT
를 사용하겠습니다.
슈퍼 키 (Super key)
슈퍼 키는 테이블에 존재하는 필드들의 부분집합으로, 유일성(Uniqueness)을 만족해야 합니다.
STUDENT
테이블에서 id
필드는 슈퍼 키가 될 수 있습니다.
그리고 { id
, dept_no
}는 전체 필드 중 일부를 선택한 집합이며, 이것으로도 레코드를 유일하게 식별할 수 있어 슈퍼 키가 될 수 있습니다.
후보 키 (Candidate key)
유일성 + 최소성
후보 키(candidate key)는 슈퍼 키 중에서 최소성 (irreducibility)을 만족하는 키와 동일합니다. 후보 키는 기본 키가 될 수 있는 후보를 나타냅니다.
후보 키는 테이블에 존재하는 전체 필드의 부분집합으로 유일성과 최소성을 만족해야 합니다.
- 유일성 - 모든 레코드에서 해당 필드에 중복된 값이 나타나지 않음
- 최소성 - 최소한의 필드로 레코드를 유일하게 구별할 수 있어야 함
STUDENT
테이블의 dept_no
는 중복될 수 있기 때문에 유일성을 만족하지 않아 후보 키가 될 수 없습니다.
또한, { id
, dept_no
}로 이루어진 부분 집합은 STUDENT
테이블의 id
필드만으로도 레코드를 유일하게 구별 가능해서 최소성을 만족하지 않으므로 후보 키가 될 수 없습니다.
기본 키 (Primary key)
기본 키는 테이블에서 특정 레코드를 식별하기 위해 후보 키 중, 고유한 식별자 1개를 정한 것입니다. 기본 키는 후보 키와 마찬가지로 유일성과 최소성을 가져야 하며, NULL
값을 가질 수 없습니다.
테이블에서 단 1 개만 선택이 가능하기 때문에 값이 자주 변경되지 않고, 단순한 값을 선택하는 것이 좋습니다.
대체 키 (Alternate key)
대체 키는 후보 키가 2개 이상일 경우, 어느 하나를 기본 키로 지정하고 남은 키들을 의미합니다.
복합 키 (Composite key)
복합 키는 한 개 이상의 필드를 포함하는 키로, 앞서 언급한 { id
, dept_no
}와 같은 키가 복합 키의 한 예입니다.
외래 키 (Foreign key)
외래 키는 한 테이블의 키 중에서 다른 테이블의 레코드를 유일하게 식별할 수 있는 키를 의미합니다. 한 테이블의 레코드에서 다른 테이블의 레코드를 참조하기 위해 사용됩니다.
외래 키는 원래의 테이블에서는 유일한 키이지만 다른 테이블에서 참조할 대상 컬럼으로 쓰인다면 유일하지 않아도 됩니다.
예를 들어, DEPARTMENT
테이블의 기본 키인 dept_no
는 개체 무결성에 의해 유일합니다. 하지만 이 키가 외래 키로 STUDENT
테이블에서 학생의 학과 번호로 쓰인다면, 컴퓨터공학과인 학생이 여러 명인 것처럼 유일하지 않는 경우도 있습니다.
정리
키는 컬럼을 구분하기 위한 컬럼으로 고유한 식별자를 의미합니다.