세계의 데이터베이스 관리에서, 키는 데이터를 조직化하고, 접근하며, 데이터의 무결성을 유지하는 중요한 역할을 한다. 경험丰富的 데이터베이스 관리자이든 데이터 관리의 여정을 시작하는 격인가, 다양한 유형의 데이터베이스 키를 이해하는 것이 필수적이다. 이 글에서 우리는 모든 다른 유형의 키들을 살펴볼 것이며, 그들의 목적과 효과적인 데이터베이스 설계에 어떻게 기여하는지 알아보자.
이 개념들을 설명하기 위해, 다음과 같은 간단한 대학 데이터베이스를 사용할 것입니다:
- 학생
- 과목
- 수강신청
- 교수
- 학과
각각의 키 유형을 살펴보고 우리의 대학 데이터베이스에서 어떻게 적용되는지 알아보자.
1. 주요 키(Primary Key)
정의
테이블의 각 로우를 고유하게 식별하는 열 또는 열 집합
특징
- 각 레코드마다 고유해야 한다
- `NULL` 값을 포함할 수 없다
- 변경되지 않는(시간이 지나도 변하지 않는) 것이 좋다
예시
우리의 학생
테이블에서는 StudentID
를 주요 키로 사용한다.
CREATE TABLE Students (
StudentID INT PRIMARY KEY,
FirstName VARCHAR(50),
LastName VARCHAR(50),
Email VARCHAR(100) UNIQUE
);
여기서 StudentID
는 각 학생을 고유하게 식별하며, 두 학생이 같은 ID를 가지지 않게 한다.
2. 외래 키(Foreign Key)
정의
하나의 테이블의 열 또는 열 집합이 다른 테이블의 기본 키를 참조하는 것
목적
참조 정보의 일관성을 유지하고 테이블 사이의 관계를 생성하는 것
예시
우리의 Enrollments
테이블에서 StudentID
와 CourseID
를 외국 키로 사용하고 있습니다.
CREATE TABLE Enrollments (
EnrollmentID INT PRIMARY KEY,
StudentID INT,
CourseID INT,
EnrollmentDate DATE,
FOREIGN KEY (StudentID) REFERENCES Students(StudentID),
FOREIGN KEY (CourseID) REFERENCES Courses(CourseID)
)
이 설계는 모든 등록 레코드가 유효한 학생과 과목과 관련づけられ는 것을 보장합니다.
3. 複合키
정의
레코드를 유일하게 识別하기 위해 두 개 이상의 열로 구성된 키
사용
하나의 열이 유일성을 보장할 수 없을 때
예시
우리의 Enrollments
테이블을 다시 설계하여 複合키를 사용할 수 있습니다:
CREATE TABLE Enrollments (
StudentID INT,
CourseID INT,
EnrollmentDate DATE,
Grade CHAR(2),
PRIMARY KEY (StudentID, CourseID),
FOREIGN KEY (StudentID) REFERENCES Students(StudentID),
FOREIGN KEY (CourseID) REFERENCES Courses(CourseID)
);
여기에서 StudentID
와 CourseID
의 조합이 복합 키로, 각 등록을 유일하게 识別합니다.
4. 候補키
정의
레코드를 유일하게 识別할 수 있는 최소한의 속성 집합
특징
- 유일성이 있어야 합니다
NULL
값을 포함할 수 없습니다- 테이블은 여러 候補키를 가질 수 있습니다.
예시
우리의 Students
테이블에서, StudentID
와 Email
가 모두 학생을 고유하게 标识 할 수 있는 候補 키로 사용할 수 있습니다. StudentID
를 기본 키로 선택했지만, Email
도 대체 수요가 있었습니다.
5. Super Key
Definition
レコード를 고유하게 标识 할 수 있는 列の集合, 중요하지 않은 列也包括됨
Difference From Candidate Key
고유 标识 할 수 있는 것이 아닌 추가 속성을 포함 할 수 있음
Example
우리의 Students
테이블에서, 슈퍼 키는 다음과 같이 포함 할 수 있습니다
{StudentID, FirstName, LastName, Email}
{StudentID, Email}
{Email, FirstName, LastName}
이 모두 候補 키 (StudentID
또는 Email
)를 포함하며 추가적인 필드를 포함합니다.
6. Alternate Key
Definition
기본 키로 선택되지 않은 候補 키
Purpose
레코드를 고유하게 标识 할 수 있는 대체 방법을 제공
Example
우리의 Students
테이블에서 StudentID
를 기본 키로 선택한다면, Email
가 대체 키가 되ます
CREATE TABLE Students (
StudentID INT PRIMARY KEY,
FirstName VARCHAR(50),
LastName VARCHAR(50),
Email VARCHAR(100) UNIQUE -- This is an alternate key
);
UNIQUE
제약 조건이 Email
에 적용되어 학생을 고유하게 标识 할 수 있도록 만듭니다.
7. Surrogate Key
정의
유일한 식별 목적으로 생성된 기계적 키
특성
- 대부분 databases에서 자동으로 생성됨
- 사업적 의미가 없음
예시
우리의 Courses
表에서, 자동 증가하는 CourseID
를 사용할 수 있을 수 있음:
CREATE TABLE Courses (
CourseID INT PRIMARY KEY AUTO_INCREMENT,
CourseCode VARCHAR(10) UNIQUE,
CourseName VARCHAR(100),
Credits INT
);
CourseID
는 대안 키이며, CourseCode
는 더 자연스러운 식별자입니다.
8. 자연 키
정의
현실 세계에 이미 존재하는 데이터로 이루어진 키
장점
의미 있는 식별자를 제공함
demerit
시간 안에 변경될 수 있음
예시
Professors
表에서, 사회 보안 编号(尽管隐私原因不推荐使用)를 고려할 수 있습니다:
CREATE TABLE Professors (
ProfessorID INT PRIMARY KEY,
SSN CHAR(9) UNIQUE, -- This could be used as a natural key
FirstName VARCHAR(50),
LastName VARCHAR(50),
Department VARCHAR(50)
);
9. 복합 키
정의
두 개 이상의 열로 이루어진 키이며, 이 조합이 사업적 의미를 가질 수 있음
복합 키와의 차이
이往往 조합된 열들이 유ique 식별자 exclusive로 이해되는 것 이외에도 의미를 가질 수 있을 때 사용됨
예시
CourseOfferings
表에서:
CREATE TABLE CourseOfferings (
CourseID INT,
Semester CHAR(6), -- e.g., '202301' for Spring 2023
ProfessorID INT,
RoomNumber VARCHAR(10),
PRIMARY KEY (CourseID, Semester),
FOREIGN KEY (CourseID) REFERENCES Courses(CourseID),
FOREIGN KEY (ProfessorID) REFERENCES Professors(ProfessorID)
);
과정ID
와 학기
의 조합은 복합 键(compound key)로, 특정 과정을 uniquely 标识(identify)하는 동시에 사업적 의미도 있다.
10. 간단한 键(Simple Key)
정의(Definition)
한 열(column)으로 구성되는 键(key)이다.
장점(Advantage)
実装(implementation)과 사용이 간단하다.
예(Example)
우리의 부서(Departments)
테이블에서:
CREATE TABLE Departments (
DepartmentID INT PRIMARY KEY,
DepartmentName VARCHAR(100) UNIQUE,
Building VARCHAR(50),
Budget DECIMAL(10, 2)
);
부서ID(DepartmentID)
는 간단한 键(simple key)이다: 각 부서를 uniquely 标识(identify)하는 단일 열(column)이다.
11. 유니크 键(Unique Key)
정의(Definition)
열 또는 열 집합에 있는 모든 값이 유니크하다는 것을 보장하는 键(key)이다.
주요 键(Primary Key)와의 차이(Difference From Primary Key)
NULL
값을 허용할 수 있다(다른 조건이 명시되지 않았다면).
예(Example)
우리의 학생(Students)
테이블에서, 이메일(Email)
는 유니크 键(unique key)의 예이다:
CREATE TABLE Students (
StudentID INT PRIMARY KEY,
FirstName VARCHAR(50),
LastName VARCHAR(50),
Email VARCHAR(100) UNIQUE -- This is a unique key
);
UNIQUE
제약조건은 두 학생이 동일한 이메일 주소를 갖을 수 없도록 보장한다.
결론(Conclusion)
이러한 다양한 키 유형을 이해하는 것은 有效的 데이터베이스 설계과 관리를 위한 중요한 요소입니다. 각 유형의 키는 데이터 integrit y를 보장하는 것에서 表格外 관계를 설정하는 것까지 특정 목적을 充当中요합니다. 적절한 키를 精炼하고 적용하는 것으로, 효율적이고 신뢰할 수 있고 スケーラブルな 데이터베이스 시스템을 생성할 수 있습니다.
기억하십시오, 키의 선택은 데이터베이스의 성능, 유지 관리 및 실제 세계 관계를 정확하게 나타내는 능력에 중요한 영향을 미칠 수 있습니다. 어떤 키를 사용할지 결정하는 것은 항상 应用程序의 특정 需求과 데이터의 性质을 고려하십시오.
이 글은 데이터베이스 기본 시리즈의 일부입니다. 데이터베이스 관리와 설계에 대한 자세한 記事을 기대하십시오.
Source:
https://dzone.com/articles/database-keys-a-comprehensive-guide