키(Key)는 데이터베이스에서 조건에 맞는 튜플을 찾거나 순서대로 정렬할 때 다른 튜플들과 구별할 수 있는 유일한 기준이 되는 속성(Attribute)임
여기서 튜플은 각각의 행, 속성의 모임으로 아래와 같이 표의 형태로 이해하면 됨
학번 | 주민번호 | 이름 | 나이 |
---|---|---|---|
1 | 928888-888888 | 김덕배 | 27 |
2 | 929999-777777 | 추정호 | 32 |
3 | 008777-777777 | 이정빈 | 22 |
유일성을 만족하는 키, 예를 들면 {학번 + 이름}
, {주민등록번호 + 학번}
위의 표를 다시 가져와서 보면
학번 | 주민번호 | 이름 | 나이 |
---|---|---|---|
1 | 928888-888888 | 김덕배 | 27 |
2 | 929999-777777 | 추정호 | 32 |
3 | 008777-777777 | 이정빈 | 22 |
여기서 이 3명을 구분할 수 있는 것은 절대 겹치지 않는 학번일수도, 주민번호 일수도 있음
이름과 나이를 묶어서 하나의 속성으로 만드는 것도 가능함, 이름과 나이를 합쳐서 중복이 되지 않고 구분할 수 있다면 슈퍼키가 될 수 있음
어떤 속성끼리 묶던 중복값이 안나오고 서로 구별만 할 수 있으면 됨
학번 | 주민번호 | 이름 | 나이 |
---|---|---|---|
1 | 928888-888888 | 김덕배 | 27 |
2 | 929999-777777 | 추정호 | 32 |
3 | 008777-777777 | 이정빈 | 22 |
위의 표에서 4명을 구분하는 슈퍼키들이 모여 있는데, 슈퍼키들 중에서 속성은 최소한의 갯수로 4명을 구분할 수 있어야함
즉, 학번, 주민번호는 속성들이 각 1개씩 이루어져서 가능하지만 이름 + 나이 슈퍼키는 묶어서 2개의 속성으로 되어 있으므로 최소성을 만족하지 못함, 그래서 후보키가 될 수 없음
후보 키에서 선택된 키, NULL 값이 들어갈 수 없으며, 기본키로 선택된 속성(Attribute)은 동일한 값이 들어갈 수가 없음
후보키들 중에서 하나를 선택한 키로 최소성과 유일성을 만족함, 테이블에서 기본키는 오직 1개만 지정할 수 있음
기본키는 NULL 값을 절대 가질 수 없고, 중복된 값을 가질 수 없음
학번 | 주민번호 | 이름 | 나이 |
---|---|---|---|
1 | 928888-888888 | 김덕배 | 27 |
2 | 929999-777777 | 추정호 | 32 |
3 | 008777-777777 | 이정빈 | 22 |
후보 키 중에 기본 키로 선택되지 않은 키
후보키가 두 개 이상일 경우 그 중에서 어느 하나를 기본키로 지정하고 남은 후보키들을 대체키라고 함
학번 | 주민번호 | 이름 | 나이 |
---|---|---|---|
1 | 928888-888888 | 김덕배 | 27 |
2 | 929999-777777 | 추정호 | 32 |
3 | 008777-777777 | 이정빈 | 22 |
어떤 테이블(Relation)간의 기본 키(Primary Key)를 참조하는 속성임, 테이블(Relation)들 간의 관계를 나타내기 위해서 사용됨
참조 될 테이블(A)이 먼저 만들어지고 참조하는 테이블(B)에 값이 입력되어야함
이때 참조될(A) 열의 값은 참조될(A) 테이블에서 기본키(Primary Key)로 설정되어 있어야함
외래키는 참조되는 테이블의 기본키와 동일한 키 속성을 가짐
참조되는 부모테이블이 먼저 생성된 뒤 데이터를 넣고, 참조하는 자식 테이블이 다음에 생겨야됨
부모 테이블 먼저 삭제될 수 없음, 왜냐하면 부모테이블을 참조하는데 부모테이블이 삭제되면 자식테이블은 참조하는 것이 없어지기 때문에 외래키 오류가 생김, 따라서 외래키 관계에서 부모테이블을 삭제하려면 자식테이블 먼저 삭제한 후 부모테이블을 삭제해야함
아래의 학생 테이블이 부모 테이블이고 자식 테이블은 수강 테이블임
학번 | 주민번호 | 성명 |
---|---|---|
A11 | 928888-888888 | 김덕배 |
A12 | 929999-777777 | 추정호 |
A13 | 008777-777777 | 이정빈 |
학번 | 과목명 |
---|---|
A11 | 영어 |
A12 | 수학 |
A13 | 영어 |
위처럼 학생테이블은 학번이 기본키이자 참조되는 참조키임
수강테이블은 학번이 참조하는 키이자 외래키임