table 1.
학번 | 성명 | 생년월일 | 거주지 | 성별 | 전공 |
---|---|---|---|---|---|
1001 | 구로자 | 931123 | 서울시 | 여 | 토목 |
2002 | 이덕배 | 981212 | 서울시 | 남 | 토목 |
3003 | 서이가 | 920529 | 대구시 | 남 | 컴퓨터 |
4004 | 김민희 | 970314 | 부산시 | 여 | 전산 |
학번 | 신청강좌 |
---|---|
1001 | 인문교양 |
2002 | 인문교양 |
1001 | 영어학개론 |
4004 | 컴퓨터공학개론 |
위의 표를 바탕으로 슈퍼키/ 후보키,기본키 대체키/ 외래키에 대해서 간단하게 정리한다.
일반적으로 테이블에서 행(row) 은 특정 개체에 대한 정보를 담고 있으며 튜플(tuple) 내지 레코드(record)라고 칭해진다. 열(column)은 테이블의 속성(atrribute)을 나타낸다.
키(key) 는 테이블에서 조건을 만족하는 튜플을 찾거나, 혹은 이를 정렬할 때 튜플들을 서로 구별할 수 있게 해주는 속성을 의미한다.
※유일성: 하나의 키값으로 하나의 특정 튜플만을 식별해낼 수 있다.
※최소성: 키를 구성하는 한 속성이 없다면 튜플을 유일하게 식별할 수 없게끔, 필수적인 최소한의 속성으로 구성된다.
슈퍼키는 레코드를 구별할 수 있게 해주는 하나 혹은 하나 이상의 속성들의 집합이다. 예를 들어, 학번 하나만으로도 레코드를 구별할 수 있으나, (학번+성명) 혹은 (성명+생년월일) 등과 같이 여러 개의 속성을 묶어서 레코드를 구별할 수도 있다.즉, 슈퍼키는 학번일 수도, (학번+성명)일 수도, (학번+성명+생년월일)일 수도 있다. 유일성은 만족하지만, 최소성을 만족하지는 않는다. 예를 들자면, (학번+성명)으로 튜플을 구분할 수 있지만, 학번만으로도 튜플을 구분할 수 있기에 최소성을 충족하지 못하는 것이다.
후보키는 유일성과 최소성을 모두 만족해야 한다. table 1에서는 학번, 성명, 생년월일이 후보키가 될 수 있으며, table 2에서는 (학번+신청강좌)가 후보키가 될 수 있다.
후보키 가운데 선별된 키로, null 값을 가질 수 없다. 중복되는 값 또한 허용되지 않는다. 예를 들어 table 1에서 학번을 기본키로 선정했다면 이미 사용된 1001, 2002, 3003, 4004 학번은 추후 레코드를 추가할 때 다시 사용될 수 없다.
후보키 가운데 기본키로 채택되지 않은 키를 의미한다.
문자 그대로 해석하면, "외부에서 온 키"를 의미한다. 가령 table 1과 2가 서로 관계를 맺지 않는다면, table 2의 학번은 어떠한 정보도 알려주지 못한다 (즉, 학번에 해당하는 사람에 대한 그 어떤 유의미한 정보를 알 수 없다). 한편 "학번"이라는 속성은 table 1에서는 기본키가 될 수 있지만, table 2에서는 불가능하다. 만약 table 1의 기본키가 학번이라면, table 2의 학번은 1의 학번을 참조할 수 있으며 이때 table 2의 학번을 외래키라고 부른다. 요컨대, 외래키는 현재 자신의 테이블에서는 단독으로 기본키가 될 수 없지만 참조하게되는 다른 테이블에서는 기본키인 속성을 가리킨다.