profile image

L o a d i n g . . .

슈퍼키

  • 테이블에서 각 행을 유일하게 식별할 수 있는 하나 또는 그 이상의 속성들의 집합이다.
  • 슈퍼키는 유일성만 만족하면 슈퍼키가 될 수 있다.

아래 사원 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

https://bamdule.tistory.com/45

복사했습니다!