* key
## 키(key)
- 데이터를 구분할 때 사용할 식별자.
- "수퍼 키(super key)"라 부르기도 한다.
- 식별자?
- 데이터를 구분할 때 사용하는 값.
- 한 개 이상의 컬럼으로 구성된다.
- 식별자를 key라고 부른다.
- 예) 학생(학번, 이름, 전화, 이메일, 학과, 우편번호, 주소, 주민등록번호)
- 학번 (O)
- 주민등록번호 (O)
- 이메일 (O)
- 전화 (X)
- 이름 (X)
- (이름,전화) (O)
- (이메일,이름) (O)
- (이름,학과,학번) (O)
- (이름,학과,전화) (O)
### 후보키(candidate key) 선정
- super key 들 중에서 선별된 최소키를 가리킨다.
- 최소키? 최소한의 컬럼 값 만으로 식별이 가능한 key.
- 수퍼 키 예)
- 학번 (O)
- 주민등록번호 (O)
- 이메일 (O)
- (이름,전화) (O) => 이름과 전화 값을 묶은 것 보다 적은 개 수의 후보 키가 있다면 가능한 제외하라!
- (이메일,이름) (X) => 이메일 만으로 식별 가능
- (이름,학과,학번) (X) => 학번 만으로 식별 가능
- (이름,학과,전화) (x) => 이름과 학과, 전화 보다 더 적은 컬럼의 후보 키가 있기 때문에 가능한 제외한다.
### 기본 키/주 키(primary key; PK)
- 후보키 중에서 데이터 식별자로 사용하기 위해 선정된 키.
- 예) 학번
- 나머지 후보키는 대안키(alternate key)라 부른다.
- 예) 주민등록번호, 이메일, (이름,전화)
- 왜? 비록 PK는 아니지만 PK와 마찬가지로 데이터 식별자로 대체하여 사용할 수 있기 때문이다.
### 대리 키(surrogate key)/인공 키(artificial key)
- 주 키의 컬럼의 개수가 많거나 주 키로 사용할 적절한 컬럼이 없는 경우,
일련번호와 같은 임의의 컬럼을 추가하여 PK로 만든다.
- 예1) 게시물 첨부파일(파일명, 등록일)
- 파일명이 중복될 수 있다.
- 파일명과 등록일을 묶어서 PK로 사용하기에는 적절하지 않다.
- 이런 경우 "첨부파일번호" 컬럼을 임의로 추가하여 PK로 설정한다.
- 결론) 게시물 첨부파일(파일번호, 파일명, 등록일)
- 예2) 수강신청(수강생이름, 수강생전화, 수강생이메일, 과목명, 결제여부, 결제유형)
- 주 키로 사용할만한 적절한 컬럼이 없다.
- 여러 개의 컬럼을 묶어서 주 키로 사용하자니 너무 복잡하다.
- 이런 경우에도 "수강신청번호"와 같은 임의의 컬럼을 추가하여 PK로 선정하는 것이 좋다.
- 주 키로 선정된 컬럼의 값은 변경될 수 없기 때문에,
일련번호와 같은 임의의 컬럼을 pk로 사용한다.
- pk가 아닌 컬럼은 언제든 값을 변경할 수 있다.
- 예1) 수강생(이름, 나이, 핸드폰, 이메일, 우편번호, 주소, 은행명, 계좌번호, 최종학력, 전공)
- 핸드폰이나 이메일은 PK로 사용할 수 있다.
- 그러나 핸드폰이나 이메일은 가끔 변경될 수 있다.
- 문제는 PK로 지정된 컬럼은 한 번 사용되면 변경할 수 없다는 것이다.
- 핸드폰과 이메일처럼 나중에 변경될 수 있는 컬럼인 경우 PK로 지정하지 않는 것이 좋다.
- 그럼 PK 컬럼은 무엇을 사용하는가?
- 이런 경우 "수강생번호"와 같은 임의의 컬럼을 만들어 PK로 사용한다.
- 예2) 페이스북에 로그인할 때 이메일이나 전화번호를 사용하지만,
실제 주키로 사용하는 것은 사용자 일련번호이다.
# 요약 및 정리
(수퍼키) 데이터를 구분할 때 사용하는 키가 수퍼키이다.
- 예) 학생(학번, 이름, 전화, 이메일, 학과, 우편번호, 주소, 주민등록번호)
(후보키) 수퍼키들 중에서 최소한의 데이터 구분/식별이 가능한 키가 후보키이다.
- 예) - 학번 (O) - 주민등록번호 (O) - 이메일 (O) (사용자들을 컬럼 조합 없이 최소한으로 식별 가능한 키)
- (PK), 즉 주키는 후보키 중에서 데이터 식별자로 사용하기 위해 선정된 키이다.
- 예) 학번
- (대안키) 나머지 후보키는 대안키(alternate key)라 부른다.
- 예) 주민등록번호, 이메일, (이름,전화)
- (대리키/인공키) 주 키의 컬럼의 개수가 많거나 주 키로 사용할 적절한 컬럼이 없는 경우,
일련번호와 같은 임의의 컬럼을 추가하여 PK로 만든다.
- 예1) 게시물 첨부파일(파일명, 등록일)
- 파일명이 중복될 수 있다.
- 파일명과 등록일을 묶어서 PK로 사용하기에는 적절하지 않다.
- 이런 경우 "첨부파일번호" 컬럼을 임의로 추가하여 PK로 설정한다.
- 결론) 게시물 첨부파일(파일번호, 파일명, 등록일)
- 예2) 수강신청(수강생이름, 수강생전화, 수강생이메일, 과목명, 결제여부, 결제유형)
- 주 키로 사용할만한 적절한 컬럼이 없다.
- 여러 개의 컬럼을 묶어서 주 키로 사용하자니 너무 복잡하다.
- 이런 경우에도 "수강신청번호"와 같은 임의의 컬럼을 추가하여 PK로 선정하는 것이 좋다.
즉, 이러한 데이터가 형성될 수 있다.