키(Key)
데이터베이스 테이블에서의 데이터는 서로 상이합니다. 즉, 해당 테이블을 구성하고 있는 애트리뷰트 전부를 이용하면 모든 데이터들을 항상 유일하게 식별할 수 있습니다. 그러나 실제로는 애트리뷰트 전부를 이용할 필요 없이 하나 또는 몇 개의 애트리뷰트만 지정하여 그 값을 이용해도 해당 테이블에 있는 있는 모든 데이터들을 유일하게 식별할 수 있는 경우가 많습니다. 이렇게 데이터들을 유일하게 식별할 수 있는 애트리뷰트 집합을 그 테이블의 키(Key)라고 합니다.
특징
1️⃣ 유일성: 유일한 값을 가져야 합니다.
2️⃣ 최소성: 최소한의 값으로 식별할 수 있어야 합니다.
3️⃣ 불변성: 변하는 값이어선 안됩니다.
4️⃣ 존재성: 반드시 존재해야 합니다. 누구한텐 있고 누구한테는 없어선 안됩니다.
후보키(Candidate Key)
키의 특징 중 유일성과 최소성을 가진 키를 후보키라고 합니다. 이러한 후보키는 기본키가 될 수 있는 키들을 의미합니다.
다음과 같은 테이블이 있다고 가정해보도록 하겠습니다.
학생 테이블에서 한 튜플은 한 학생을 나타내며, 모든 학생은 각자 유일한 학번을 가지고 있어야 한다면 학생 애트리뷰트는 튜플들을 유일하게 식별하는 데에 사용할 수 있습니다. 따라서 학번은 학생 테이블의 후보키입니다.
또한, 이름과 학번의 애트리뷰트 값을 조합하여 학생 투플을 유일하게 식별할 수 있다고 한다면, 이 애트리뷰트 집합 {이름, 학번} 도한 학생 테이블의 후보키가 됩니다. 물론 이 때, 이름과 학번 애트리뷰트 단독으로는 학생 튜플을 유일하게 식별할 수 없어야 합니다. 만일 이름만으로 모든 튜플을 식별할 수 있다면 {이름, 학번}은 후보키가 될 수 없는데, 유일성만 만족하고 최소성을 만족하지 못하기 때문입니다. 이러한 경우 {이름, 학번}이 슈퍼키가 됩니다.
슈퍼키(Super Key)
테이블에서 각 행을 유일하게 식별할 수 있는 하나 또는 그 이상의 속성들의 집합입니다. 슈퍼키는 유일성만 만족하면 됩니다.
다음과 같은 테이블이 있다고 해보겠습니다. 이 5명을 구분할 수 있는 것은 유일한 학번일 수도 있고, 주민번호일 수도 있습니다.
또한, {학번, 주민번호}, {학번, 나이} 등도 슈퍼키가 될 수도 있고, 한 학년에 동명이인이 없다고 한다면, {이름, 학년} 또한 슈퍼키가 될 수 있습니다. 슈퍼키는 어떤 애트리뷰트끼리 묶던 중복값이 나오지 않고 유일하기만 하면 됩니다.
기본키(Primary Key)와 대체키(Alternate Key)
하나의 테이블은 투플의 집합입니다. 모든 테이블은 적어도 하나의 후보키를 가지고 있습니다. 테이블에서 기본적으로 투플을 식별하기 위한 도구로 데이터베이스 설계자가 지정한 하나의 후보 키를 기본키라고 합니다. 테이블 내에 하나의 후보 키만 있을 경우에는 해당 키를 기본키로 지정하는 데에 아무런 문제가 없습니다. 하지만, 만약 후보키가 둘 이상이라면 그 중에서 어느 하나를 기본키로 지정해야 합니다. 이 때 기본키로 지정되지 않은 나머지 후보 키들을 대체키라고 합니다.
이 예시에서 학번과 주민번호라는 후보키가 있다고 하겠습니다.
만일 이러한 키 중 학번을 해당 테이블의 기본키로 설정을 해주었다면, 주민번호가 대체키가 됩니다.
기본키 특성
기본키에는 여러가지 특성이 있습니다.
1️⃣ 후보키들 중 하나를 선택한 키로 최소성과 유일성을 만족합니다.
2️⃣ 하나의 테이블은 반드시 하나의 기본키를 가져야 합니다.
3️⃣ 기본키는 테이블 안에서 유일하게 각 행들을 구별할 수 있도록 사용됩니다.
4️⃣ 기본키는 NULL을 절대 가질 수 없고, 중복된 값을 가질 수 없습니다. 각 행을 구분하기 위해서는 값이 없어선 안되고, 중복되어서도 안되기 때문입니다.
외래키(Foreign Key)
어떤 릴레이션이 하나의 릴레이션의 데이터를 참조하여 해당 테이블의 컬럼이 다른 테이블의 기본키라고 할 때, 이러한 키를 외래키라고 합니다.즉, 릴레이션 A에 C 컬럼이 존재하는데, 이 컬럼의 값은 반드시 릴레이션 B의 기본키 값이여야 한다고 할 때, 이 C 컬럼을 외래키라고 합니다. 이 경우 C는 릴레이션 B를 참조한다고 하고, 릴레이션 A를 참조 릴레이션, 릴레이션 B를 피참조 릴레이션이라고 합니다.
또한, 릴레이션 A와 릴레이션 B는 같은 릴레이션이여도 되지만, 외래키와 기본키가 정의된 도메인은 같아야 합니다.
외래키 특징
1️⃣ 관계 데이터 모델의 릴레이션 간의 관계를 표현합니다.
2️⃣ 다른 릴레이션의 기본키를 참조하는 속성입니다.
3️⃣ 참조하고(외래키) 참조되는(기본키) 양쪽 릴레이션의 도메인은 같아야 합니다.
4️⃣ 참조되는 값이 변경되면 참조하는 값도 변경됩니다.
5️⃣ NULL 값과 중복 값 등이 허용됩니다.
6️⃣ 자기 자신의 기본키를 참조하는 외래키도 가능합니다.
7️⃣ 외래키가 기본키의 일부가 될 수 있습니다.
아래와 같은 테이블 2개가 있다고 가정해보도록 하겠습니다.
학생 테이블은 학번이 기본키이고, 학과 테이블은 학과번호가 기본키입니다. 또한 학생 테이블의 학과번호는 학과 테이블의 학과번호라고 가정해보도록 하겠습니다. 그러면, 학과번호는 학생 테이블의 외래키가 되어 반드시 학과 테이블에 있는 학과번호의 값과 같아야 합니다.
외래 키는 같은 테이블을 참조해도 됩니다.
여기서 교수번호를 교수테이블의 기본키라 하고, 학장교수번호는 학장의 교수번호라 할 때, 학장교수번호는 교수 테이블의 외래 키가 됩니다. 따라서 학장교수번호의 값은 반드시 교수 테이블의 교수번호에 나타나 있는 값이여야 합니다.
참고
데이터베이스 시스템(이석호 저)
https://jerryjerryjerry.tistory.com/49
https://deftkang.tistory.com/51
'CS 정리 > 개발 상식' 카테고리의 다른 글
[CS] DNS가 무엇인가요 ? (0) | 2024.05.24 |
---|---|
[CS] 주소창에 www.naver.com을 검색하면 일어나는 일 (0) | 2024.05.21 |
[CS] GSLB란? (0) | 2024.05.21 |
[CS] IP 주소의 개념과 기능 (0) | 2024.05.20 |
[CS] 소켓 통신이란 ? (0) | 2024.05.18 |