키(Key)는 테이블(Relation)에서 특정 레코드(행)을 식별하거나 검색하기 위해 사용되는 식별자입니다. 각 레코드는 여러 개의 필드(열)로 구성되어 있는데, 이 중 하나의 열을 키로 지정하여 그 값을 이용해 해당 레코드를 식별하고 접근할 수 있습니다. 동시에 각 테이블 간의 관계를 설명하는 연결고리이기도 합니다.
슈퍼키(Super Key)
: 테이블 내의 행을 유일하게 식별할 수 있는 하나의 속성 또는 속성의 집합후보키(Candidate key)
: 튜플을 유일하게 식별할 수 있는 속성의 최소 집합. 기본키가 될 수 있는 후보이기 때문에 후보키라고 불립니다. (ex. 주민번호, 학번 등) - 유일성, 최소성을 모두 만족기본키(Primary key)
: 후보 키에서 선택된 키. NULL값이 들어갈 수 없으며, 기본키로 선택된 속성(Attribute)은 중복된 값이 들어갈 수가 없습니다. 한 테이블 내에 하나의 기본키가 정의됩니다.대체키(Alternate key)
: 기본키로 선택되지 않은 후보키외래키(Foreign Key)
: 다른 테이블(Relation)의 기본 키(Primary key)를 참조하는 속성. 테이블(Relation)들 간의 참조관계를 나타내기 위해서 사용됩니다.유일성
: 해당 키들의 조합으로 유일한 하나의 레코드를 찾아낼 수 있어야 한다.최소성
: 해당 조합의 키들을 모두 사용했을 때 유일한 하나의 레코드를 찾아낼 수 있어야 한다.개체 무결성
: 기본 키는 널 값, 중복 값을 가질 수 없다. (NOTNULL, UNIQUE)참조 무결성
: 참조 테이블의 외래키 값은 NULL이거나 피참조 테이블의 기본키 값과 동일해야 한다.도메인 무결성
: 속성의 값이 속성에 정의된 도메인에 속한 값이어야 한다. (4년제 대학교의 학생 개체 - 학년 속성이 가질 수 있는 값은 {1, 2, 3, 4} 중 하나이다.)MySQL의 경우 버전 8부터 세팅에 따라 Generated Invisible Primary Keys라는 특성을 통해 기본 키를 설정하지 않아도 자동으로 생성되는 기본 키를 생성할 수 도 있고 기본 키 없이 테이블을 생성할 수 도 있습니다.
기본 키 없이 테이블이 생성되는 문제는 DBMS의 동작 방식과 데이터베이스 디자인에 관련된 문제입니다.
유연성
과 선택권
: 데이터베이스 설계자에게 기본키를 어떻게 구성할지에 대한 유연성과 선택권을 제공합니다. 어떤 경우에는 테이블의 각 레코드를 고유하게 식별할 필요가 없거나, 기본키 대신 다른 유니크한 인덱스나 조건을 사용하고자 할 수 있습니다.검색 및 조회 성능
조인 성능
입력 및 갱신 성능
인덱스 관리 및 저장 공간
🙏 본 개념의 정리에 대한 피드백과 질문은 환영입니다!
본 개념의 다른 정리 및 피드백, 인터뷰 주제의 순서는 테크 인터뷰 스터디 Repository에서 확인 가능합니다.
MySQL Docs - create table gipks
티스토리 - [DataBase] 키(Key)의 개념 및 종류
깃허브 - Table 작성 시 PK를 무조건 사용해야 하는 이유
티스토리 - Oracle SQL - Index Unique Scan
티스토리 - [DB] 📚 데이터베이스 키(KEY) 종류 🕵️ 정리