22 ก.ย. เวลา 11:00 • การศึกษา
Data By Shoper Gamer

Surrogate Key คืออะไร

โดย
ในโลกของการออกแบบฐานข้อมูลสมัยใหม่ Surrogate Key (คีย์เทียม) ได้กลายเป็นเครื่องมือสำคัญที่ช่วยแก้ไขข้อจำกัดของ Natural Key บทความนี้จะพาคุณเจาะลึกไปกับ Surrogate Key ตั้งแต่แนวคิดพื้นฐานไปจนถึงการนำไปใช้งานจริงในระบบต่างๆ
  • ​Surrogate Key คืออะไร
Surrogate Key คือ ตัวระบุหลัก (primary identifier) ที่ถูกสร้างขึ้นมาเฉพาะสำหรับฐานข้อมูล โดยไม่มีความหมายในเชิงธุรกิจมีลักษณะสำคัญคือ
✅️ ไม่มีความหมายในตัวเอง (Meaningless)
✅️ ไม่เปลี่ยนแปลง (Immutable)
✅️ ถูกสร้างขึ้นมาเฉพาะ สำหรับฐานข้อมูล
✅️ มักเป็นตัวเลขที่เพิ่มขึ้นอัตโนมัติ
  • ​Surrogate Key ทำงานอย่างไร
☆ หลักการทำงาน
1) การสร้างตัวระบุใหม่ที่ไม่ซ้ำกัน
2) การกำกับข้อมูลแต่ละแถว
3) การใช้อ้างอิงระหว่างตาราง
4) การรักษาความสัมพันธ์ ของข้อมูล
☆ กลไกการทำงาน
○ ระบบเป็นผู้สร้างค่าอัตโนมัติ
○ ไม่ขึ้นกับข้อมูลธุรกิจ
○ ใช้สำหรับการอ้างอิงเท่านั้น
  • ​ประเภทของ Surrogate Keys
1) Auto-increment Integers
ตัวเลขที่เพิ่มขึ้นทีละ 1
ตัวอย่าง 1, 2, 3, ...
🟢 ข้อดี ง่ายและมีประสิทธิภาพ
🔴 ข้อเสีย สามารถเดาค่าได้
2) UUID/GUID
รหัส 128-bit ที่ไม่ซ้ำกัน
ตัวอย่าง 123e4567-e89b-12d3-a456-426614174000
🟢 ข้อดี ไม่ซ้ำกันสูงมาก
🔴 ข้อเสีย ใช้พื้นที่มากกว่า
3) Sequence Numbers
ตัวเลขจาก sequence object
ตัวอย่าง NextVal() ใน Oracle
🟢 ข้อดีสามารถควบคุมได้
  • ​ประโยชน์ของ Surrogate Key
✅ ประสิทธิภาพสูง ในการเชื่อมโยงตาราง และ สร้างดัชนี
✅ ไม่เปลี่ยนแปลงแน่นอน
✅ ไม่ขึ้นกับตรรกะทางธุรกิจ
✅ รองรับการรวมข้อมูลจากหลายแหล่ง
✅ ปกป้องความเป็นส่วนตัวของข้อมูล
  • ​ตัวอย่างการใช้งาน Surrogate Key
☆ ตัวอย่าง 1 ระบบลูกค้า
```sql
CREATE TABLE Customers (
CustomerID INT AUTO_INCREMENT PRIMARY KEY, -- Surrogate Key
CitizenID CHAR(13) UNIQUE, -- Natural Key
FirstName VARCHAR(50),
LastName VARCHAR(50),
Email VARCHAR(100) UNIQUE
);
```
☆ ตัวอย่าง 2 ระบบ Orders
```sql
CREATE TABLE Orders (
OrderID INT AUTO_INCREMENT PRIMARY KEY, -- Surrogate Key
OrderNumber VARCHAR(20) UNIQUE, -- Natural Key
CustomerID INT,
OrderDate DATE,
TotalAmount DECIMAL(10,2),
FOREIGN KEY (CustomerID) REFERENCES Customers(CustomerID)
);
```
☆ ตัวอย่าง 3 ใช้ UUID
```sql
CREATE TABLE Products (
ProductID CHAR(36) PRIMARY KEY DEFAULT UUID(), -- Surrogate Key
ProductCode VARCHAR(20) UNIQUE, -- Natural Key
ProductName VARCHAR(100),
Price DECIMAL(10,2)
);
```
  • ​เมื่อไหร่ควรใช้ Surrogate Key
☆ เหมาะสำหรับใช้เมื่อ
○ Natural Key เปลี่ยนแปลงได้
○ Natural Key มีขนาดใหญ่
○ ต้องการประสิทธิภาพสูง
○ มีการรวมระบบหลายระบบ
○ ต้องการปกป้องความเป็นส่วนตัว
☆ ไม่เหมาะเมื่อ
○ มี Natural Key ที่เสถียร
○ ระบบขนาดเล็กที่ไม่ซับซ้อน
○ ต้องการให้คีย์มีความหมาย
  • ​การนำ Surrogate Key ไปใช้งาน
1) MySQL Auto-increment
```sql
CREATE TABLE Employees (
EmployeeID INT AUTO_INCREMENT PRIMARY KEY,
EmployeeCode VARCHAR(10) UNIQUE,
FullName VARCHAR(100),
Department VARCHAR(50)
);
```
2) PostgreSQL Serial
```sql
CREATE TABLE Products (
ProductID SERIAL PRIMARY KEY,
ProductCode VARCHAR(20) UNIQUE,
ProductName VARCHAR(100)
);
```
3) SQL Server Identity
```sql
CREATE TABLE Orders (
OrderID INT IDENTITY(1,1) PRIMARY KEY,
OrderNumber VARCHAR(20) UNIQUE,
OrderDate DATE
);
```
  • ​แนวทางการออกแบบที่ดี
1) ใช้ร่วมกับ Natural Key
```sql
CREATE TABLE Students (
StudentID INT AUTO_INCREMENT PRIMARY KEY, -- Surrogate
StudentCode VARCHAR(10) UNIQUE NOT NULL, -- Natural
FirstName VARCHAR(50),
LastName VARCHAR(50)
);
```
2) การสร้าง Foreign Key
```sql
CREATE TABLE Enrollments (
EnrollmentID INT AUTO_INCREMENT PRIMARY KEY,
StudentID INT, -- Surrogate FK
CourseID INT, -- Surrogate FK
EnrollmentDate DATE,
FOREIGN KEY (StudentID) REFERENCES Students(StudentID),
FOREIGN KEY (CourseID) REFERENCES Courses(CourseID)
);
```
  • ​กรณีศึกษา
🛒 ระบบ E-Commerce
```sql
-- ตาราง Products
CREATE TABLE Products (
ProductID INT AUTO_INCREMENT PRIMARY KEY, -- Surrogate
SKU VARCHAR(20) UNIQUE, -- Natural
ProductName VARCHAR(100),
Price DECIMAL(10,2)
);
-- ตาราง Orders
CREATE TABLE Orders (
OrderID INT AUTO_INCREMENT PRIMARY KEY, -- Surrogate
OrderNumber VARCHAR(25) UNIQUE, -- Natural
CustomerID INT,
OrderDate DATETIME
);
```
✏️ Shoper Gamer
Credit :
👇
  • ​https://milvus.io/ai-quick-reference/what-is-a-surrogate-key-in-sql
  • ​https://www.sisense.com/blog/when-and-how-to-use-surrogate-keys/
  • ​https://www.naukri.com/code360/library/surrogate-key-in-dbms

ดูเพิ่มเติมในซีรีส์

โฆษณา