본문 바로가기

데이터베이스

관계형 데이터베이스의 키(Key)

관계형 데이터베이스에서 테이블은 행(row)과 열(column)로 이루어져 있고, 각 행을 튜플(Tuple) 또는 레코드(Recode), 열을 속성(Attribute) 또는 필드(Field)라고 부른다. 이 글에서는 행과 열을 튜플과 속성으로 말하도록 하겠다. 

 

키(Key)는 튜플들을 식별하여 구분하는 기준이 될 수 있는 속성을 말한다.  키의 종류에는 다섯 가지가 있다.

 

후보키(Candidate Key)

기본 키가 될 수 있는 키들을 후보 키라고 한다. 기본적으로 키이기 때문에 후보키를 통해 테이블에서 유일한 튜플들을 식별할 수 있다. 즉, 중복되는 값이 없어야한다(유일성).

 

후보키는 꼭 한개의 속성 뿐만 아니라 두개 이상의 속성을 가질 수 있다. 그 속성들을 통해 유일한 튜플들을 식별할 수 있으면 후보키가 될 수 있다. 하지만 없어도 되는 속성을 마구 추가한다고 해서 후보키가 되는 것은 아니다. 후보키는 튜플을 식별할 수 있는 최소한의 속성들로만 이루어져야한다.(최소성)

 

 

기본키(Primary Key)

테이블의 후보키들 중에서, 튜플들을 구분할 하나의 키를 선택해 기본키로 삼는다. 후보키는 모두 기본키가 될 수 있지만 서비스의 안정성을 위해 아래의 고려사항을 최대한 반영하여 조건에 가까운 것을 기본키로 삼는다.

 

 

 

  • 널 값을 가질 수 있는 속성이 포함된 후보키는 기본키로 부적합하다.

기본키는 튜플을 찾기위한 접근 방법을 제공한다, 널 값을 가지는 튜플은 다른 튜플과 구별하여 접근하기 어렵기 때문에 이런 가능성이 있는 키는 기본키로 선택하지 않는 것이 좋다.

 

  • 값이 자주 변경될 수 있는 속성이 포함된 후보키는 기본키로 부적합하다.

변할 가능성이 가장낮은 후보키를 기본키로 삼아야 한다. 만약 어떤 계정의 닉네임을 기본키로 한다면, 닉네임을 변경하고 다른사람이 해당 닉네임을 설정했을 때 내가 쓴 글이 다른 사람의 글로 식별되는 문제가 발생할 수 있다.

 

  • 단순한 후보키를 기본키로 선택한다.

데이터베이스를 이용하는 일반 사용자뿐만 아니라 데이터베이스를 실제로 처리하는 컴퓨터 시스템도 단순 값 처리를 선호하기 때문에 위 조건들을 만족하는 후보키들 중에 가장 단순한 키를 선택한다. 예를들어 두가지 속성을가지는 후보키와 한개의 속성인 후보키가 존재한다면 속성이 하나인 후보키를 기본키로 선택한다. 

 

기본키가 되기 위한 속성을 따로 생성하는 것이 좋다고 한다. 과거에 어떤 기업에서 주민등록번호를 기본키로 사용했는데, 주민등록번호를 데이터베이스에 저장하지 못하도록 법이 바뀌면서 이를 다 수정해야만 하는 문제가 발생했다고 한다. 이처럼 아이디, 주민등록번호 등 어떠한 의미를 가지는 데이터는 아무리 확률이 낮더라도 변경이나 삭제의 가능성이 있기 때문에 기본키를 위한 속성을 따로 만들어주는 것이 좋은 것 같다.

 

 

 

 

 

 

 

 

대체키(Alternate Key)

데이터베이스 테이블에서 기본키로 선정되지 않은 후보키를 대체키라고 한다.

 

 

슈퍼키(Super Key)

유일성을 만족시키는 키는 모든 키는 슈퍼키이다. 후보 키와의 차이는, 슈퍼키는 '고유하게 식별하는 모든 조합'을 뜻하는 점이다. 즉, 후보 키에 불필요한 속성을 덧붙여 장황하게 한 것은 후보 키는 아니지만 여전히 슈퍼 키이다. 더 줄일 수 없는 슈퍼 키, 즉 속성의 중복이 없는 슈퍼 키는 후보 키이기도 하다.

 

즉, 후보키의 조건인 유일성과 최소성에서 유일성만 만족시키는 키를 슈퍼키라고 한다.

 

 

외래키(Foreign Key)

한 테이블에서 다른 테이블과 연결할 수 있도록 다른 테이블의 기본키(PK)를 참조하는 키를 말한다. 외래키를 설정할 때, 참조되는(기본키가 있는 테이블) 테이블의 필드는 반드시 UNIQUE나 PRIMARY KEY 제약 조건이 설정되어 있어야 한다. 외래키의 특징은 다음과 같다.

 

첫번째, 참조하고(외래키) 참조되는(기본키) 양쪽 릴레이션의 도메인은 서로 같아야 한다. 도메인이란 릴레이션에 포함된 각각의 속성들이 가질 수 있는 값들의 집합인데, 외래키는 참조 무결성 조건에 부합해야되기 때문에 도메인이 같아야 한다.  즉, 외래키는 기본키의 집합에 포함 되어야한다.

 

두번째, 참조되는(기본키를 가진쪽) 값이 변경되면 참조하는(외래키를 가진쪽) 값도 변경된다. 첫번째 특징과 연관되어 참조하고 참조되는 테이블의 도메인이 같아야되기 때문에 참조되는 값이 변경되면 그에 맞게 참조하는 값도 변경하여 '도메인(속성이 가질 수 있는 모든 값의 집합)'을 서로 같게 해야한다.

 

세번째, NULL값과 중복 값이 허용된다. 기본키(PK)는 데이터를 구별할 수 있는 고유성을 지니고 있어야하기 때문에 중복과 NULL값이 허용되지않는다. 하지만 외래키(FK)는 정의와 같이 다른 릴레이션을 참조하고 있는데 그게 전부이다. NULL값이 허용됨으로써 데이터를 검색할때, 특정 정보만 모를 경우 NULL로 지정해두고 검색할 수 있다.

 

네번째, 자기 자신의 기본키(PK)를 참조하는 외래키도 가능하다.

 

다섯번째, 외래키가 기본키의 일부가 될 수 있다.

 

 

 

 

 

 

 

참고 글:

http://wiki.hash.kr/index.php/%EA%B8%B0%EB%B3%B8%ED%82%A4

 

기본키 - 해시넷

기본키 테이블 표시 기본키(Primary Key; PK)는 주 키 또는 프라이머리 키라고 하며, 후보키 중에서 특별히 선정된 키로 중복된 값을 가질 수 없으며, 후보키의 성질을 갖는다. 즉, 유일성과 최소성을

wiki.hash.kr

 

https://ko.wikipedia.org/wiki/%EC%8A%88%ED%8D%BC_%ED%82%A4

 

슈퍼 키 - 위키백과, 우리 모두의 백과사전

슈퍼 키(Super Key)는 데이터베이스에서 관계(테이블)의 행을 고유하게 식별할 수 있는 속성 또는 속성의 집합을 말한다. 슈퍼 키는 대상관계의 모든 속성이 함수 종속하는 속성의 집합으로 정의할

ko.wikipedia.org

http://wiki.hash.kr/index.php/%EC%99%B8%EB%9E%98%ED%82%A4#cite_note-TCPSCHOOL.com-3

 

외래키 - 해시넷

외래키(Foreign Key) 또는 포린키란 하나(또는 여러개)의 다른 릴레이션의 기본키(PK) 필드를 참조하는 데이터의 참조 무결성(Referential integrity)을 확인하기 위해 사용되는 키(Key)를 의미한다. 간략히

wiki.hash.kr

 

'데이터베이스' 카테고리의 다른 글

Transaction  (4) 2022.03.18
정규화와 반정규화  (0) 2022.03.18
SQL vs NO SQL  (0) 2022.03.18
SQL Injection  (0) 2022.03.17
SQL JOIN에 대해(작성 중)  (0) 2022.03.16