슈퍼키
- 테이블에서 각 행을 유일하게 식별할 수 있는 하나 또는 그 이상의 속성들의 집합이다.
- 슈퍼키는 유일성만 만족하면 슈퍼키가 될 수 있다.
아래 사원 Table에서 슈퍼키는 (사원 번호), (생년월일), (사원 번호, 사원 이름), (사원 번호, 성별) 등이 될 수 있다.
겹치는 이름이 있기에 (사원 이름) 은 하나의 행(사원)을 식별할 수 있는 슈퍼키가 될 수 없다.
하지만 똑같은 (사원 번호)를 가지는 사원을 존재하지 않으므로, 속성 (사원 번호, 사원 이름)의 조합은 하나의 행(사원)을 식별할 수 있는 슈퍼키라고 할 수 있다.
사원 번호 | 사원 이름 | 성별 | 주소 |
---|---|---|---|
1111 | 김아무개 | 남 | 서울시 은평구 ☆☆아파트 |
1112 | 이아무개 | 여 | 서울시 양천구 ♢♢빌라 |
1113 | 김아무개 | 여 | 서울시 광진구 ♡♡빌라 |
후보키
- 테이블에서 각 행을 유일하게 식별할 수 있는 최소한의 속성들의 집합이다.
- 후보키는 기본키가 될 수 있는 후보들이며 유일성과 최소성을 동시에 만족해야한다.
아래 사원 Table에서 후보키는 (사원 번호), (주소) 가 될 수 있다. (아래 테이블 데이터로만 보았을 때 그렇다는 것이고, 실제로는 주소가 같은 사원들이 존재할 확률이 있으므로 (사원 번호)가 후보키로서 가장 적합하다고 볼 수 있다.)
사원 번호 | 사원 이름 | 성별 | 주소 |
---|---|---|---|
1111 | 김아무개 | 남 | 서울시 은평구 ☆☆아파트 |
1112 | 이아무개 | 여 | 서울시 양천구 ♢♢빌라 |
1113 | 김아무개 | 여 | 서울시 광진구 ♡♡빌라 |
기본키
- 후보키들 중에서 하나를 선택한 키로 최소성과 유일성을 만족하는 속성이다.
- 테이블에서 기본키는 오직 1개만 지정할 수 있다.
- 기본키는 테이블 안에서 유일하게 각 행들을 구별할 수 있도록 쓰인다.
- 기본키는 NULL 값을 절대 가질수 없고, 중복된 값을 가질 수 없다.
아래 사원 Table에서 기본키는 (사원 번호)가 가장 적합해보인다.
사원 번호 | 사원 이름 | 성별 | 주소 |
---|---|---|---|
1111 | 김아무개 | 남 | 서울시 은평구 ☆☆아파트 |
1112 | 이아무개 | 여 | 서울시 양천구 ♢♢빌라 |
1113 | 김아무개 | 여 | 서울시 광진구 ♡♡빌라 |
대체키
- 후보키가 두개 이상일 경우 그 중에서 어느 하나를 기본키로 지정하고 남은 후보키들을 대체키라한다.
- 대체키는 기본키로 선정되지 않은 후보키이다.
위의 사원 Table 예시에서 기본키로 (사원번호)를 선택했을 경우, (주소)가 대체키가 될 수 있다.
외래키
- 테이블이 다른 테이블의 데이터를 참조하여 테이블간의 관계를 연결하는 것이다.
- 다른 테이블의 데이터를 참조할 때 없는 값을 참조할 수 없도록 제약을 주는 것이다.
- 참조될 테이블(A)이 먼저 만들어지고 참조하는 테이블(B)에 값이 입력되어야 한다.
- 이때, 참조될(A) 열의 값은 참조될(A) 테이블에서 기본키(Primary Key)로 설정되어 있어야한다.
[외래키 삭제 옵션]
- Set null : 부모 데이터 삭제 시 자식 테이블의 참조 컬럼을 Null로 업데이트Restrict : 자식 테이블이 참조하고 있을 경우, 데이터 삭제 불가
- No Action : Restrict와 동일, 옵션을 지정하지 않았을 경우 자동으로 선택된다.
- Set default : 부모 데이터 삭제 시 자식 테이블의 참조 컬럼을 Default 값으로 업데이트
- Cascade : 부모 데이터 삭제 시 자식 데이터도 삭제
[외래키 업데이트 옵션]
- Set null : 부모 데이터 업데이트 시 자식 테이블의 참조 컬럼을 Null로 업데이트Restrict : 자식 테이블이 참조하고 있을 경우, 업데이트 불가
- No Action : Restrict와 동일, 옵션을 지정하지 않았을 경우 자동으로 선택된다.
- Set default : 부모 데이터 업데이트 시 자식 테이블의 참조 컬럼을 Default 값으로 업데이트
- Cascade : 부모 데이터 업데이트 시 자식 데이터도 업데이트
참고
https://jerryjerryjerry.tistory.com/49
https://brunch.co.kr/@dan-kim/26 https://jerryjerryjerry.tistory.com/49
'개발자: 지식 정리 > CS 지식: DB' 카테고리의 다른 글
MySQL InnoDB 락 / 데드락 해결 공유 (1) | 2022.09.22 |
---|---|
MySQL 서버(MySQL 엔진, InnoDB 스토리지 엔진) 정리 (0) | 2022.09.22 |
MySQL 데드락 관련 링크 (0) | 2022.09.07 |