データベース管理の世界では、キーは組織、アクセス、およびデータの整合性を維持するために重要な役割を果たしています。あなたが熟练なデータベース管理者であれ、データ管理の旅立ちの段階であれ、データベースの様々な種類のキーを理解することは欠かせません。この記事では、すべての異なる種類のキー、その用途、および効果的なデータベース設計に貢献する方法を探索します。
これらの概念を説明するために、以下のような簡単な大学データベースを用います。
- 学生
- 講義
- 登録
- 教授
- 部署
これらのキーのそれぞれの種類を見て、私たちの大学データベースでどのように適用されているかを確認しましょう。
1. 主キー
定義
テーブルの各行を唯一に識別する列または列の集合
特徴
- 各レコードには唯一の値を持つ必要があります
- NULL値を含むことはできません
- 時間とともに変更されるべきではありません
例
私たちのStudents
テーブルでは、StudentID
を主キーとして使用しています。
CREATE TABLE Students (
StudentID INT PRIMARY KEY,
FirstName VARCHAR(50),
LastName VARCHAR(50),
Email VARCHAR(100) UNIQUE
);
StudentID
は各学生を唯一に識別し、2人の学生が同じIDを持つことはないようにするのに使用されます。
2. 外部キー
定義
一つのテーブル内の列または列の集合で、他のテーブルの主キーを参照している
目的
参照的一貫性を保ち、テーブル間の関係を作り出す
例
私たちの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. 複合键
定義
レコードを唯一标识するための2つ以上の列を含む键
用法
单一の列にて唯一性を保証できない場合
例
私たちは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. スーパーキー
定義
レコードを一意に特定できる任意のカラムのセット、不要なカラムを含む場合もある
候補キーとの違い
一意な特定に必要ない追加の属性を含む場合がある
例
私たちのStudents
テーブルでは、スーパーキーには以下が含まれます:
{StudentID, FirstName, LastName, Email}
{StudentID, Email}
{Email, FirstName, LastName}
これらはすべて候補キー(StudentID
またはEmail
)に追加のフィールドを加えたものです。
6. 代替キー
定義
主キーとして選択されなかった候補キー
目的
レコードを一意に特定するための代替手段を提供する
例
私たちの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
);
Email
に対するUNIQUE
制約により、Email
も学生を一意に特定するために使用できます。
7. サロゲートキー
定義
独自の識別を目的として作成された人工的なキー
特徴
- 通常、データベースで自動生成される
- ビジネス意味を持たない
例
私たちのCourses
テーブルでは、自動増分するCourseID
を使用しかもしれません:
CREATE TABLE Courses (
CourseID INT PRIMARY KEY AUTO_INCREMENT,
CourseCode VARCHAR(10) UNIQUE,
CourseName VARCHAR(100),
Credits INT
);
CourseID
は代理キーであり、CourseCode
はより自然な識別子かもしれません。
8. 自然キー
定義
実際の世界に存在するデータから形成されるキー
利点
有意义的な識別を提供します
欠点
時間とともに変更する可能性があります
例
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. 複合キー
定義
2つまたはそれ以上の列を composition したキーであり、これらの組み合わせがビジネス上の意味を持つかもしれません
複合キーとの違い
列が単なる唯一の識別にはないことです。
例
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とセメスターの組み合わせは複合キーとなり、コース提供を一意に識別しながらビジネス的な意味も持つ。
10. 単純キー
定義
単一の列から成るキー
利点
実装と使用が簡単
例
私たちのDepartments
テーブルでは、DepartmentID
は単純キーであり、各部署を一意に識別する単一の列です。
CREATE TABLE Departments (
DepartmentID INT PRIMARY KEY,
DepartmentName VARCHAR(100) UNIQUE,
Building VARCHAR(50),
Budget DECIMAL(10, 2)
);
11. 一意キー
定義
一つまたは複数の列のすべての値が一意であることを保証するキー
主キーとの違い
NULL
値を許可できる(特に指定しない限り)
例
私たちのStudents
テーブルで、Email
は一意キーの一例です。UNIQUE
制約により、2人の学生が同じEメールアドレスを持つことはできません。
CREATE TABLE Students (
StudentID INT PRIMARY KEY,
FirstName VARCHAR(50),
LastName VARCHAR(50),
Email VARCHAR(100) UNIQUE -- This is a unique key
);
結論
これらの異なる種類のキーを理解することは、効果的なデータベース設計と管理にとって非常に重要です。各種類のキーは特定の目的に服するので、データの整性を保証し、テーブル間の関係を設定することができます。適切なキーを慎重に選択し実装することで、効率の高い、信頼性のある、スケーラブルなデータベースシステムを作れます。
Remember, the choice of keys can significantly impact your database’s performance, maintainability, and ability to represent real-world relationships accurately. Always consider the specific needs of your application and the nature of your data when deciding which keys to use.
この投稿は、データベースの基礎シリーズの一部です。データベース管理と設計についての更深入な記事を楽しみにしていきましょう。
Source:
https://dzone.com/articles/database-keys-a-comprehensive-guide