💻 1. DB Table 생성할 때 Key의 종류
데이터베이스 테이블을 설계할 때, 키(key)는 매우 중요한 역할을 합니다. 각 키의 종류와 그 사용 이유, 그리고 예시 코드를 통해 쉽게 이해해보시죠.
🔑 1.1 후보키 (Candidate Key)
후보키는 테이블 내의 튜플을 고유하게 식별할 수 있는 속성(또는 속성들의 집합)을 의미합니다. 하나의 테이블에는 여러 개의 후보키가 존재할 수 있습니다. 후보키는 반드시 최소성을 만족해야 합니다.
예시:
- 학생 테이블에서
학번
과주민등록번호
는 각각 학생을 고유하게 식별할 수 있는 후보키가 될 수 있습니다. - 또한,
이름
과생년월일
의 조합도 고유하게 식별할 수 있다면 후보키가 될 수 있습니다.
CREATE TABLE Student (
student_id INT,
name VARCHAR(50),
ssn CHAR(13),
birth_date DATE,
PRIMARY KEY (student_id),
UNIQUE (ssn),
UNIQUE (name, birth_date)
);
🔐 1.2 기본키 (Primary Key)
기본키는 후보키 중에서 선택된 키로, 테이블 내의 각 행을 고유하게 식별합니다. 기본키는 null 값을 가질 수 없고, 중복될 수 없습니다.
예시:
Student
테이블에서student_id
가 기본키로 선택되었습니다.
CREATE TABLE Student (
student_id INT PRIMARY KEY,
name VARCHAR(50),
ssn CHAR(13) UNIQUE,
birth_date DATE,
UNIQUE (name, birth_date)
);
🔗 1.3 참조키 (Foreign Key)
참조키는 다른 테이블의 기본키를 참조하는 키입니다. 두 테이블 간의 관계를 정의할 때 사용됩니다. 참조키는 참조하는 테이블에서 고유성을 가지지만, 참조하는 테이블에서는 반드시 유일성을 가질 필요는 없습니다.
예시:
Enrollment
테이블에서student_id
는Student
테이블의student_id
를 참조합니다.
CREATE TABLE Enrollment (
enrollment_id INT PRIMARY KEY,
student_id INT,
course_id INT,
FOREIGN KEY (student_id) REFERENCES Student(student_id),
FOREIGN KEY (course_id) REFERENCES Course(course_id)
);
🗝 1.4 대체키 (Alternate Key)
대체키는 후보키 중 기본키로 선택되지 않은 나머지 키들을 의미합니다. 대체키도 테이블 내에서 고유성을 유지합니다.
예시:
Student
테이블에서ssn
이 대체키로 사용될 수 있습니다.
CREATE TABLE Student (
student_id INT PRIMARY KEY,
name VARCHAR(50),
ssn CHAR(13) UNIQUE,
birth_date DATE,
UNIQUE (name, birth_date)
);
🗝 1.5 슈퍼키 (Super Key)
슈퍼키는 테이블 내의 튜플을 고유하게 식별할 수 있는 하나 이상의 속성의 집합을 의미합니다. 여기에는 후보키와 기본키도 포함됩니다.
- 특징:
- 슈퍼키는 최소한의 조건을 요구하지 않기 때문에 불필요한 속성을 포함할 수 있습니다.
- 모든 후보키와 기본키는 슈퍼키에 포함됩니다.
- 단, 슈퍼키는 반드시 유일성을 보장해야 합니다.
예시:
학생 테이블 Student
에서 (student_id, name), (student_id, ssn), (ssn, name) 등은 모두 슈퍼키가 될 수 있습니다. 이 예시들은 각각 학생을 고유하게 식별할 수 있기 때문입니다.
CREATE TABLE Student (
student_id INT PRIMARY KEY,
name VARCHAR(50),
ssn CHAR(13) UNIQUE,
birth_date DATE,
UNIQUE (name, birth_date)
);
💾 2. 예시 데이터를 이용한 상세 설명
위의 테이블 구조를 기준으로 예시 데이터를 넣어보겠습니다.
INSERT INTO Student (student_id, name, ssn, birth_date) VALUES (1, 'Alice', '900101-1234567', '1990-01-01');
INSERT INTO Student (student_id, name, ssn, birth_date) VALUES (2, 'Bob', '900202-2345678', '1990-02-02');
Student
테이블에 두 명의 학생 데이터가 들어갔습니다.- 각 학생은
student_id
로 고유하게 식별됩니다.
INSERT INTO Course (course_id, course_name) VALUES (1, 'Database Systems');
INSERT INTO Course (course_id, course_name) VALUES (2, 'Operating Systems');
Course
테이블에 두 개의 과목이 추가되었습니다.
INSERT INTO Enrollment (enrollment_id, student_id, course_id) VALUES (1, 1, 1);
INSERT INTO Enrollment (enrollment_id, student_id, course_id) VALUES (2, 2, 2);
Enrollment
테이블에 학생과 과목의 등록 정보가 추가되었습니다.student_id
와course_id
는 각각Student
테이블과Course
테이블을 참조하고 있습니다.
📝 3. 슈퍼키와 후보키의 차이
슈퍼키 (Super Key)
슈퍼키는 하나 이상의 속성(attribute)의 집합으로, 테이블 내의 모든 행을 고유하게 식별할 수 있습니다. 즉, 특정 속성 집합이 슈퍼키라면, 그 속성 집합을 이용해 각 행을 유일하게 구분할 수 있어야 합니다.
- 특징:
- 슈퍼키는 최소한의 조건을 요구하지 않기 때문에 불필요한 속성을 포함할 수 있습니다.
- 모든 후보키와 기본키는 슈퍼키에 포함됩니다.
- 단, 슈퍼키는 반드시 유일성을 보장해야 합니다.
예시:
학생 테이블 Student
에서 (student_id, name), (student_id, ssn), (ssn, name) 등은 모두 슈퍼키가 될 수 있습니다. 이 예시들은 각각 학생을 고유하게 식별할 수 있기 때문입니다.
CREATE TABLE Student (
student_id INT PRIMARY KEY,
name VARCHAR(50),
ssn CHAR(13) UNIQUE,
birth_date DATE,
UNIQUE (name, birth_date)
);
후보키 (Candidate Key)
후보키는 슈퍼키의 부분집합으로, 최소의 속성 집합으로 테이블 내의 모든 행을 고유하게 식별할 수 있습니다. 후보키는 중복되는 속성이 없어야 하고, 유일성을 유지해야 합니다.
- 특징:
- 후보키는 슈퍼키와 달리 중복된 속성을 포함하지 않는 최소 집합이어야 합니다.
- 하나의 테이블에는 여러 개의 후보키가 존재할 수 있습니다.
- 후보키 중 하나는 기본키로 선택됩니다.
예시:
Student
테이블에서 student_id와 ssn은 각각 후보키가 될 수 있습니다. 이 두 속성은 각각 학생을 고유하게 식별할 수 있는 최소의 속성 집합이기 때문입니다.
CREATE TABLE Student (
student_id INT PRIMARY KEY,
name VARCHAR(50),
ssn CHAR(13) UNIQUE,
birth_date DATE,
UNIQUE (name, birth_date)
);
또한, name
과 birth_date
의 조합도 유일성을 만족할 경우 후보키가 될 수 있습니다.
CREATE TABLE Student (
student_id INT PRIMARY KEY,
name VARCHAR(50),
ssn CHAR(13) UNIQUE,
birth_date DATE,
UNIQUE (name, birth_date)
);
🚦 슈퍼키와 후보키의 차이 요약
- 슈퍼키는 테이블 내의 모든 행을 고유하게 식별할 수 있는 하나 이상의 속성의 집합입니다. 불필요한 속성을 포함할 수 있습니다.
- 후보키는 슈퍼키의 최소 부분집합으로, 테이블 내의 모든 행을 고유하게 식별할 수 있는 최소한의 속성 집합입니다. 불필요한 속성을 포함하지 않습니다.
📋 4. 요약
- 후보키 (Candidate Key): 튜플을 고유하게 식별할 수 있는 키.
- 기본키 (Primary Key): 후보키 중 하나를 선택하여 설정, null 값과 중복 불가.
- 참조키 (Foreign Key): 다른 테이블의 기본키를 참조하여 테이블 간의 관계 설정. 참조키 자체는 반드시 유일할 필요는 없습니다.
- 대체키 (Alternate Key): 후보키 중 기본키로 선택되지 않은 나머지 키.
- 슈퍼키 (Super Key): 테이블 내 튜플을 고유하게 식별할 수 있는 모든 속성의 집합.
이제 키의 종류와 사용 방법을 잘 이해하셨나요? 데이터베이스 설계 시 이러한 키들을 적절히 활용하면
'DB' 카테고리의 다른 글
[DB] NoSQL의 모든 것 (0) | 2024.11.24 |
---|---|
MariaDB란 무엇인가 (0) | 2024.11.23 |
[DB] JOIN과 EXISTS의 차이점 (1) | 2024.09.27 |
테이블 관계 정리 #1:1 #1:N #N:M #1:0 (0) | 2024.02.22 |