SQL에서는 여러 종류의 키(key)가 존재해요.
이들은 DB 내에서 데이터를 식별하고, 관계를 정의하고, 무결성을 유지하는 데 중요한 역할을 합니다.
키를 설정해야 관계형 DB의 구조와 데이터 무결성을 보장할 수 있어요.
지금부터 어떤 종류의 key가 있는 지 알아봅시다!.
1. Primary Key(기본 키)
Primary Key는 DB에서 각 레코드를 고유하게 식별하는 데 사용됩니다.
1-1. 고유성
Primary Key로 지정된 열의 값은 DB 테이블 내에서 고유성을 가져야 합니다.
즉, 같은 값이 두 번 나타날 수 없어요.
1-2. NULL 불가
또한, NULL 값을 가질 수 없어요.
모든 레코드는 반드시 Primary Key 값을 가져야 합니다.
1-3. 불변성
Primary Key의 값은 변경되지 않아야 합니다.
일반적으로 ID 같은 인위적인 식별자를 사용하는 것이 좋습니다.
1-4. index
Primary Key는 자동으로 index가 생성됩니다.
1-5. 사용 방법
사용 방법은 다음과 같습니다.
CREATE TABLE Students (
Student ID INT PRIMARY KEY,
Name VARCHAR(10),
Age INT
);
2. Foreign Key(외래 키)
Foreign Key는 DB에서 두 테이블 간의 관계를 설정하는 데 사용됩니다.
또한, 한 테이블의 열이 다른 테이블의 Primary Key (기본 키)를 참조하도록 하여, 데이터 간의 관계를 정의합니다.
2-1. 참조 무결성
Foreign Key는 참조하는 테이블의 기본 키 값이 존재해야 합니다.
이를 통해 데이터의 일관성을 유지할 수 있어요.
2-2. 다중 값 가능
Foreign Key는 동일한 값을 여러 번 가질 수 있으며, 이는 한 테이블의 여러 레코드가 다른 테이블의 단일 레코드를 참조할 수 있음을 의미합니다.
2-3. NULL 값 허용
Foreign Key는 NULL 값을 가질 수 있습니다.
이는 특정 레코드가 다른 테이블의 레코드를 참조하지 않을 수 있음을 나타내요.
2-4. 관계 설정
Foreign Key를 통해 두 테이블 간의 1:1, 1:N, M:N 관계를 정의할 수 있습니다.
2-5. 사용 방법
사용 방법은 다음과 같습니다.
CREATE TABLE Classes (
ClassID INT PRIMARY KEY,
ClassName VARCHAR(100)
);
CREATE TABLE Students (
StudentID INT PRIMARY KEY,
Name VARCHAR(100),
Age INT,
ClassID INT,
FOREIGN KEY (ClassID) REFERENCES Classes(ClassID)
);
방금 코드와 같이 Students 테이블과 Classes테이블이 있을 때, 각 학생이 수강하는 수업을 나타내기 위해 Classes 테이블의 ClassID를 Students 테이블의 Foreign Key로 설정할 수 있습니다.
3. Unique Key(고유 키)
Unique Key는 DB 테이블에서 특정 열의 값이 고유해야 함을 보장하는 제약 조건입니다.
3-1. 고유성
Unique Key로 지정된 열의 값을 테이블 내에서 유일해야 해요.
즉, 같은 값이 두 번 나타날 수 없습니다.
3-2. NULL 값 허용
Unique Key는 NULL 값을 가질 수 있습니다.
하지만, NULL을 포함한 경우에도 고유성을 유지합니다.
즉, 같은 행에는 NULL 값이 하나만 들어갈 수 있다는 뜻이죠.
3-3. 다수 설정 가능
하나의 테이블에 여러 개의 Unique Key를 설정할 수 있습니다.
각 Unique Key는 서로 다른 열 or 열 조합으로 지정할 수 있어요.
3-4. index 생성
Unique Key를 설정하면, 자동으로 inedx가 생성됩니다.
3-5. 사용 방법
사용 방법은 다음과 같습니다.
CREATE TABLE Users (
UserID INT PRIMARY KEY,
Username VARCHAR(50) UNIQUE,
Email VARCHAR(100) UNIQUE,
Password VARCHAR(100)
);
방금 전 코드와 같이 이메일과 유저명에 UNIQUE를 주어, 유일한 값을 줄 수 있도록 설정하였습니다.
4. Composite Key(복합 키)
Composite Key는 두 개 이상의 열(column)을 결합하여, 고유한 식별자를 생성하는 키입니다.
이러한 키는 DB 테이블에서 각 행(row)을 고유하게 식별하는 데, 사용됩니다.
4-1. 고유성 보장
단일 열로는 고유성을 보장할 수 없는 경우, 여러 열을 결합하여 고유성을 유지할 수 있습니다.
4-2. M:N 관계
두 개 이상의 데이블 간의 M:N(다대다) 관계를 나타내기 위해 중간 테이블을 만들 때, Composite Key를 사용할 수 있습니다.
4-3. 사용 방법
사용 방법은 다음과 같습니다.
CREATE TABLE Enrollment (
student_id INT,
course_id INT,
PRIMARY KEY (student_id, course_id)
);
위 쿼리에서 PRIMARY KEY (student_id, course_id) 부분이 Composite Key를 정의하고 있습니다.
student_id와 course_id의 조합이 테이블의 각 행을 고유하게 식별합니다.
5. Candidate Key(후보 키)
Candidate Key는 DB 테이블에서 각 행을 고유하게 식별할 수 있는 열 or 열의 조합을 의미합니다.
이는 Primary Key(기본 키)가 될 수 있는 모든 열의 집합으로, 기본 키는 후보 키 중에서 선택된 것입니다.
5-1. 고유성
Candidate Key는 테이블 내에서 각 행을 고유하게 식별해야 합니다.
5-2. 최소성
Candidate Key는 고유성을 유지하는 데 필요한 최소한의 열로 구성되어야 합니다.
즉, 키의 어떤 부분을 제거해도 여전히 고유성을 유지해야 해요.
5-3. NOT NULL
Candidate Key는 NULL 값을 가질 수 없습니다.
모든 값은 고유해야 하며, NULL은 고유성 조건을 충족하지 않기 때문입니다.
사용 방법은 다음과 같습니다.
CREATE TABLE Students (
student_id INT,
email VARCHAR(255),
name VARCHAR(100),
PRIMARY KEY (student_id)
);
이 테이블에서 student_id는 Primary Key로 설정되어 있습니다.
하지만, email 또한, 고유하게 식별할 수 있는 정보입니다.
즉, 이 테이블에서는 student_id와 email 모두 각각의 학생을 고유하게 식별할 수 있는 열이므로, 둘 다 Candidaate Key가 되는 것이지요.
student_id는 그냥 Candidate Key 중에서 선택된 것 입니다.
6. Alternate Key(대체 키)
Alternate Key는 DB에서 특정 레코드를 고유하게 식별할 수 있는 대안적인 속성 or 속성의 집합을 의미합니다.
Primary Key와 달리, 특정 테이블 내에서 레코드를 유일하게 식별하는 데 사용될 수 있지만, Primary Key로 설정되지 않은 속성을 포함합니다.
6-1. 유일성
Alternate Key는 해당 테이블 내에서 모든 레코드를 고유하게 식별해야 합니다.
6-2. NOT NULL
Alternate Kay는 NULL 값을 가질 수 없습니다.
6-3. 복수 존재 가능
하나의 테이블에 여러 개의 Alternate Key가 존재할 수 있습니다.
사용 방법은 다음과 같습니다.
CREATE TABLE Students {
student_id INT PRIMARY KEY,
email VARCHAR(255) UNIQUE,
name VARCHAR(100)
);
Alternate Key를 정의할 떄는 UNIQUE 제약 조건을 사용합니다.
Email에 Unique를 줘서, 유일성을 유지시켜 줍니다.
이렇게 하면, 중복 데이터를 방지하고 DB의 신뢰성을 높일 수 있어요.
7. Super Key(슈퍼 키)
Super Key는 DB에서 관계형 DB의 테이블에서 각 행(row)을 고유하게 식별할 수 있는 속성 or 속성 집합의 조합을 의미합니다.
7-1. 유일성
Super Key는 테이블 내의 모든 레코드를 구분할 수 있어야 합니다.
7-2. 복수 가능성
하나의 테이블에는 여러 개의 Super Key가 존재할 수 있습니다.
예를 들어, 학생 테이블에서 학생 ID, Email, 전화번호 등은 모두 Super Key가 될 수 있어요.
7-3. 최소성
Super Key의 하위 집합이 유일성을 유지하지 않으면, 그것은 Super Key가 아닙니다.
즉, 더 작은 조합으로도 유일성을 유지할 수 있어야 해요.
7-4. 예시
Super Key는 개념이 복잡하기에 예시를 들어보겠습니다.
예를 들어, 학생 테이블이 다음과 같이 있다고 가정해 볼께요.
학생 ID | 이름 | 이메일 |
12345 | 김철수 | chulsoo@student.com |
67890 | 박영희 | younghee@student.com |
이 경우, 다음과 같은 Super Key가 존재할 수 있어요.
- {학생 ID}
- {이메일}
- {학생 ID, 이름}
- {이름, 이메일}
그러나 {학생 ID}는 최소 Super Key로, 이 경우 Candidate Key(후보키)로도 간주됩니다.
8.정리하며
지금까지 여러 종류의 키에 대해 알아보았습니다.
이를 활용하여 관계형 DB의 구조와 데이터 무결성을 보장할 수 있을 것 같아요.
참고
보딩코 님의 SQL | MySQL | 기본키, 고유키, 외래키
'Back-End Study > DBMS' 카테고리의 다른 글
MySQL vs PostgreSQL (0) | 2024.10.30 |
---|---|
PostgreSQL (4) | 2024.10.25 |
사용자 계정 생성 및 삭제 (2) | 2023.11.20 |
AQueryTool (0) | 2022.09.08 |
JDBC - 11. 회원가입 만들기 (0) | 2022.09.08 |