數據庫键:綜合指南

在數據庫管理的世界中,键扮演著組織、存取和維護數據完整性的重要角色。無論您是经验豐富的數據庫管理員還是刚開始數據管理之旅,了解各種數據庫鍵的類型是必要的。在本文中,我們將探索各種類型的鍵、它們的用途以及它們如何促進有效的數據庫設計

為解釋這些概念,我們將使用一個簡單的大學數據庫,該數據庫有以下表格:

  1. 學生
  2. 課程
  3. 註冊
  4. 教授
  5. 院系

讓我們深入了解各種類型的鍵,並看看它們如何在我們的大學數據庫中應用。

1. 主鍵

定義

一個列或列的集合,用於唯一標識表中的每一行

特性

  • 對每一条記錄必須唯一
  • 不允許含有NULL
  • 應該是不可變的(不會随時間變化)

例子

在我們的Students表中,我們使用StudentID作為主鍵。

SQL

 


CREATE TABLE Students (

    StudentID INT PRIMARY KEY,

    FirstName VARCHAR(50),

    LastName VARCHAR(50),

    Email VARCHAR(100) UNIQUE

);

在此处,StudentID唯一標識每位學生,確保沒有两名學生具有相同的ID。

定義

一個表中的列或列集,指向另一個表中的主鍵

用途

維護引用完整性並創建表之間的關係

例子

在我們的Enrollments表中,我們使用StudentIDCourseID作為外鍵。

SQL

 


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表,使用复合键:

SQL

 

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)

);

在這裡,StudentIDCourseID的組合形成了一個复合键,唯一標識了每一條註冊記錄。

4. 候选键

定義

能唯一標識記錄的最小属性集合

特點

  • 必須是唯一的
  • 不能含有NULL
  • 一個表可以有多個候選鍵。

例子

在我們的學生表中,學生ID電子郵件都可以作為候選键,因為它們都能唯一標識一個學生。我們選擇了學生ID作為主鍵,但電子郵件也可以作為備選鍵。

5. 超大鍵

定義

能夠唯一標識記錄的任何列集合,包括不必要的列

與候選鍵的差異

可能包含用於唯一標識的額外屬性

例子

在我們的學生表中,超大鍵可以包括:

  • {學生ID, 名字, 姓氏, 電子郵件}
  • {學生ID, 電子郵件}
  • {電子郵件, 名字, 姓氏}

這些都包括候選鍵(學生ID電子郵件)加上額外的字段。

6. 備選鍵

定義

未選擇為主鍵的候選鍵

目的

提供一種唯一標識記錄的替代方法

例子

在我們的學生表中,如果我們選擇學生ID作為主鍵,那麼電子郵件成為一個備選鍵:

SQL

 

CREATE TABLE Students (

    StudentID INT PRIMARY KEY,

    FirstName VARCHAR(50),

    LastName VARCHAR(50),

    Email VARCHAR(100) UNIQUE  -- This is an alternate key

);

UNIQUE約束在電子郵件上確保它也可以用來唯一標識學生。

7. 代理鍵

定義

用於唯一識別而創造的人為键

特性

  • 通常由數據庫自動生成
  • 沒有商業意義

例子

在我們的Courses表中,我們可能會使用一個自增的CourseID:

SQL

 

CREATE TABLE Courses (

    CourseID INT PRIMARY KEY AUTO_INCREMENT,

    CourseCode VARCHAR(10) UNIQUE,

    CourseName VARCHAR(100),

    Credits INT

);

CourseID是一個代理键,而CourseCode可能會是一個更自然的識別符。

8. 自然键

定義

由现实世界中已存在的数据形成的键

優點

提供有意義的識別

缺點

可能會随時間變化

例子

在一個Professors表中,我們可能會考慮使用社會安全號碼(尽管由於隐私原因不推薦使用):

SQL

 

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. 复合键

定義

由兩個或更多列组成,其中组合可能具有某些商業意義

與复合键的不同

通常在合併的列有意义於唯一識別以外的情況下使用。

例子

在一個CourseOfferings表中:

SQL

 

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)

);

課程代碼(CourseID)和學期(Semester)的組合形成一個複合键,它不僅唯一标识一個課程提供,並且具有商業意義。

10. 簡單键

定義

由單一列構成的鍵

優點

容易實施和使用

示例

在我們的Departments表中:

SQL

 

CREATE TABLE Departments (

    DepartmentID INT PRIMARY KEY,

    DepartmentName VARCHAR(100) UNIQUE,

    Building VARCHAR(50),

    Budget DECIMAL(10, 2)

);

DepartmentID是一個簡單键:單一列可以用來唯一標識每個院系。

11. 唯一键

定義

確保列中或列集合中的所有值都是唯一的鍵

與主鍵的差異

可以允許NULL值(除非另有指定)

示例

在我們的Students表中,Email是唯一键的示例:

SQL

 

CREATE TABLE Students (

    StudentID INT PRIMARY KEY,

    FirstName VARCHAR(50),

    LastName VARCHAR(50),

    Email VARCHAR(100) UNIQUE  -- This is a unique key

);

UNIQUE約束確保沒有兩個學生可以具有相同的電子郵件地址。

結論

了解這些不同類型的键是 effectively 資料庫設計 和管理的关键。每種類型的鍵都有其特定的用途,從確保數據完整性到建立表之間的關係。通過謹慎選擇和實施適當的鍵,您可以創建高效、可靠和 可擴展的數據庫系統

請記住,鍵的選擇可能會顯著影響您的數據庫性能、可維護性和準確表達現實世界中關係的能力。在決定使用哪些鍵時,總是要考慮您的應用程序的具體需求和您的數據的本質。

這篇文章是我們 數據庫基礎 系列的一部分。繼續關注我們推出更多深入的數據庫管理和設計篇文章。

Source:
https://dzone.com/articles/database-keys-a-comprehensive-guide