데이터베이스 관리 시스템에서 데이터의 무결성을 유지하고 효율적으로 관리하기 위해 다양한 키(Key) 개념을 사용한다. 이때 후보키 (Candidate Key), 기본키(Primary Key), 슈퍼키(Super Key), 고유키(Unique Key), 외래키(Foreign Key)가 주로 활용되는데 이 개념들을 이해하기 위해 학생 정보를 관리하는 데이터베이스를 예로 들어 설명해 보겠다.

후보키 (Candidate Key)
유일성과 최소성을 만족하는 키
기본키(Primary Key)
기본키는 테이블에서 각 행(Row)의 고유한 식별자로 사용, 기본키로 설정된 필드는 중복된 값을 가질 수 없으며 NULL 값을 허용하지 않는다. 예를 들어, 학생 정보를 관리하는 테이블에서는 '학번'이 기본키로 설정될 수 있다. 학번을 통해 테이블에서 각 학생을 유일하게 식별할 수 있는 것이다.
슈퍼키(Super Key)
슈퍼키는 테이블 내에서 행을 유일하게 식별할 수 있는 하나 이상의 속성(필드)의 집합이다. 기본키도 슈퍼키의 한 종류지만 슈퍼키는 불필요한 속성을 포함할 수 있다. 예를 들어, 학생 테이블에서 '학번, 이름'의 조합도 슈퍼키가 될 수 있지만 '학번'만으로도 각 행을 유일하게 식별할 수 있으므로 '학번, 이름'은 최소성을 만족하지 않는 슈퍼키이다.
즉 유일성은 만족하지만 최소성은 만족하지 않는다.
고유키(Unique Key)
고유키는 테이블 내의 각 행을 유일하게 식별할 수 있는 속성이다. 기본키와 유사하지만 NULL 값을 하나 허용한다는 차이가 있다. 예를 들어, 학생 테이블에서 '이메일' 필드는 각 학생마다 고유해야 하므로 고유키로 설정할 수 있다. 학생 중에 이메일이 없는 경우가 있을 수 있으므로 이메일 필드는 NULL 값을 하나 가질 수 있다.
외래키(Foreign Key)
외래키는 한 테이블의 필드가 다른 테이블의 기본키 또는 고유키와 연결되어 있는 관계를 나타냔다. 외래키를 통해 두 테이블 사이의 관계를 정의하고 데이터의 일관성을 유지할 수 있다. 예를 들어, '수강 신청' 테이블에서 '학번' 필드는 학생 테이블의 기본키인 '학번'을 외래키로 참조한다. 이를 통해 수강 신청 테이블의 각 행이 특정 학생을 참조하게 된다.

예시
아래 예시는 SQL을 사용하여 기본키(Primary Key), 슈퍼키(Super Key), 고유키(Unique Key), 외래키(Foreign Key)를 설명한다. 이 예시에서는 students 테이블과 course_registration 테이블을 사용하는 가정으로 만들었다.
기본키(Primary Key) 예시
기본키는 각 행을 고유하게 식별하는 데 사용된다. students 테이블에서는 student_id를 기본키로 지정할 수 있다.
CREATE TABLE students (
student_id INT AUTO_INCREMENT,
name VARCHAR(100),
email VARCHAR(100),
PRIMARY KEY (student_id)
);
슈퍼키(Super Key) 예시
슈퍼키는 테이블 내의 행을 고유하게 식별할 수 있는 하나 이상의 필드 집합이다. 예를 들어, student_id와 email의 조합은 슈퍼키가 될 수 있지만, SQL에서는 직접 "슈퍼키"를 정의하는 구문이 없다. 슈퍼키는 개념적으로 이해하며 모든 슈퍼키 중 가장 적은 수의 필드로 구성된 것이 후보키가 된다.
고유키(Unique Key) 예시
고유키는 각 행을 고유하게 식별하지만, 기본키와 달리 NULL 값을 한 번 허용할 수 있다. email 필드를 고유키로 지정할 수 있다.
CREATE TABLE students (
student_id INT AUTO_INCREMENT,
name VARCHAR(100),
email VARCHAR(100) UNIQUE,
PRIMARY KEY (student_id)
);
외래키(Foreign Key) 예시
외래키는 한 테이블의 필드가 다른 테이블의 기본키나 고유키를 참조하는 경우 사용된다. course_registration 테이블에서 student_id 필드를 외래키로 사용하여 students 테이블의 student_id를 참조할 수 있다.
CREATE TABLE course_registration (
registration_id INT AUTO_INCREMENT,
student_id INT,
course_name VARCHAR(100),
PRIMARY KEY (registration_id),
FOREIGN KEY (student_id) REFERENCES students(student_id)
);
이 예시에서 students 테이블은 학생들의 정보를 저장하고, course_registration 테이블은 각 학생이 등록한 과목의 정보를 저장한다. student_id 필드가 students 테이블과 course_registration 테이블을 연결하는 외래키로 작용한다.
'IT > SQL 도전하기' 카테고리의 다른 글
| [AWS] AWS에 DB 설치해보기 (0) | 2024.07.22 |
|---|---|
| [SQL] MongoDB와 MySQL (0) | 2024.03.13 |
| [SQL] REDO VS UNDO 무엇이 다를까? (0) | 2024.03.09 |
| SQL REDO: 데이터 복구와 안정성 강화 (0) | 2024.03.06 |
| SQL UNDO: 데이터 복구의 이해와 활용 (0) | 2024.02.28 |