Blockdit Logo
Blockdit Logo (Mobile)
สำรวจ
ลงทุน
คำถาม
เข้าสู่ระบบ
มีบัญชีอยู่แล้ว?
เข้าสู่ระบบ
หรือ
ลงทะเบียน
Shoper Gamer
•
ติดตาม
21 ก.ย. เวลา 04:19 • การศึกษา
Data By Shoper Gamer
Foreign Keys คืออะไร
โดย
ในโลกของฐานข้อมูลเชิงสัมพันธ์ (Relational Databases) Foreign Keys (คีย์นอก) ทำหน้าที่เหมือนสะพานที่เชื่อมโยงข้อมูลระหว่างตารางต่างๆ เข้าด้วยกัน บทความนี้จะพาคุณเจาะลึกไปกับ Foreign Keys ตั้งแต่แนวคิดพื้นฐานไปจนถึงการนำไปใช้งานจริง
★
Foreign Keys คืออะไร
Foreign Keys คือ ฟิลด์หรือชุดของฟิลด์ในตารางหนึ่งที่ชี้ไปยัง Primary Key ในตารางอื่น เพื่อสร้างความสัมพันธ์ระหว่างตาราง โดยมีวัตถุประสงค์หลักเพื่อ
○ รักษาความถูกต้องของข้อมูล (Data Integrity)
○ สร้างความสัมพันธ์ระหว่างตาราง (Table Relationships)
○ ป้องกันข้อมูลที่ไม่มีความสัมพันธ์ (Orphan Records)
★
Foreign Keys ทำงานอย่างไร
☆ หลักการทำงานพื้นฐาน
1) การสร้างการอ้างอิง ระหว่างตาราง
2) การบังคับใช้ความสัมพันธ์ (Referential Integrity)
3) การป้องกันการกระทำที่ขัดแย้งกับความสัมพันธ์
4) การรักษาความสอดคล้องของข้อมูล
☆ กลไกการทำงาน
○ การตรวจสอบความถูกต้องก่อนเพิ่ม หรือ แก้ไขข้อมูล
○ การบังคับใช้กฎความสัมพันธ์ผ่าน Constraints
○ การป้องกันการลบหรือแก้ไขที่จะทำให้ข้อมูลไม่สอดคล้อง
★
ประเภทของความสัมพันธ์ของ Foreign Keys
1) One-to-Many (1:N)
หนึ่งแถวในตารางหลัก เกี่ยวข้องกับหลายแถวในตารางย่อย
○ ตัวอย่าง: หนึ่งลูกค้าสามารถมีได้หลายรายการสั่งซื้อ
○ การนำไปใช้งาน Foreign Key อยู่ในตารางฝั่ง Many
2) One-to-One (1:1)
หนึ่งแถวในตารางหลัก เกี่ยวข้องกับหนึ่งแถวในตารางย่อย
○ ตัวอย่าง: หนึ่งพนักงานมีหนึ่งประวัติการทำงาน
○ การนำไปใช้งาน Foreign Key อยู่ในตารางใดตารางหนึ่ง
3) Many-to-Many (M:N)
หลายแถวในตารางหลัก เกี่ยวข้องกับหลายแถวในอีกตาราง
○ ตัวอย่าง: นักเรียนหลายคนสามารถลงทะเบียนได้หลายวิชา
○ การนำไปใช้งาน ต้องใช้ตารางเชื่อมโยง (Junction Table)
★
ประโยชน์ของ Foreign Keys
✅ รักษาความถูกต้อง และ ความสอดคล้องของข้อมูล
✅ ป้องกันข้อมูลที่ไม่มีที่มาที่ไป (Orphan Records)
✅ อำนวยความสะดวกในการสืบค้นข้อมูลที่สัมพันธ์กัน
✅ ลดความซ้ำซ้อนของข้อมูล
✅ เพิ่มประสิทธิภาพการทำงานผ่านการสร้างดัชนี
★
ตัวอย่างการใช้งาน Foreign Keys
1) การสร้างตารางด้วย Foreign Key
```sql
-- ตารางหลัก
CREATE TABLE Customers (
CustomerID INT PRIMARY KEY,
CustomerName VARCHAR(100),
Email VARCHAR(100)
);
-- ตารางย่อยที่มี Foreign Key
CREATE TABLE Orders (
OrderID INT PRIMARY KEY,
CustomerID INT,
OrderDate DATE,
TotalAmount DECIMAL(10,2),
FOREIGN KEY (CustomerID) REFERENCES Customers(CustomerID)
);
```
2) การกำหนดการกระทำเมื่อมีการเปลี่ยนแปลง
```sql
CREATE TABLE Orders (
OrderID INT PRIMARY KEY,
CustomerID INT,
OrderDate DATE,
FOREIGN KEY (CustomerID)
REFERENCES Customers(CustomerID)
ON DELETE CASCADE
ON UPDATE CASCADE
);
```
3) Many-to-Many Relationship
```sql
-- ตาราง Students
CREATE TABLE Students (
StudentID INT PRIMARY KEY,
StudentName VARCHAR(100)
);
-- ตาราง Courses
CREATE TABLE Courses (
CourseID INT PRIMARY KEY,
CourseName VARCHAR(100)
);
-- ตารางเชื่อมโยง
CREATE TABLE StudentCourses (
StudentID INT,
CourseID INT,
EnrollmentDate DATE,
PRIMARY KEY (StudentID, CourseID),
FOREIGN KEY (StudentID) REFERENCES Students(StudentID),
FOREIGN KEY (CourseID) REFERENCES Courses(CourseID)
);
```
★
การกระทำเมื่อข้อมูลมีการเปลี่ยนแปลง (Referential Actions)
1) ON DELETE
○ CASCADE : ลบแถวที่เกี่ยวข้องทั้งหมด
○ SET NULL : ตั้งค่า Foreign Key เป็น NULL
○ SET DEFAULT : ตั้งค่า Foreign Key เป็นค่าเริ่มต้น
○ RESTRICT : ป้องกันการลบหากมีข้อมูลเกี่ยวข้อง
○ NO ACTION : เหมือน RESTRICT
2) ON UPDATE
○ CASCADE : อัปเดต Foreign Key ตามการเปลี่ยนแปลง
○ SET NULL : ตั้งค่า Foreign Key เป็น NULL
○ SET DEFAULT : ตั้งค่า Foreign Key เป็นค่าเริ่มต้น
○ RESTRICT : ป้องกันการอัปเดต
★
ตัวอย่างการใช้งานจริง
🛒 ระบบ E-Commerce
```sql
-- Customers -> Orders (1:N)
-- Orders -> OrderDetails (1:N)
-- Products -> OrderDetails (1:N)
CREATE TABLE OrderDetails (
OrderDetailID INT PRIMARY KEY,
OrderID INT,
ProductID INT,
Quantity INT,
Price DECIMAL(10,2),
FOREIGN KEY (OrderID) REFERENCES Orders(OrderID),
FOREIGN KEY (ProductID) REFERENCES Products(ProductID)
);
```
📗 ระบบโรงเรียน
```sql
-- Teachers -> Classes (1:N)
-- Students -> Enrollments (1:N)
-- Courses -> Enrollments (1:N)
CREATE TABLE Enrollments (
EnrollmentID INT PRIMARY KEY,
StudentID INT,
CourseID INT,
TeacherID INT,
Grade CHAR(2),
FOREIGN KEY (StudentID) REFERENCES Students(StudentID),
FOREIGN KEY (CourseID) REFERENCES Courses(CourseID),
FOREIGN KEY (TeacherID) REFERENCES Teachers(TeacherID)
);
```
★
ข้อควรระวังในการใช้ Foreign Keys
❌ อาจส่งผลกระทบต่อประสิทธิภาพ หากมีข้อมูลจำนวนมหาศาล
❌ ต้องมีการจัดการอย่างระมัดระวังกับการลบ และ อัปเดต
❌ อาจทำให้การนำเข้า/ส่งออกข้อมูลซับซ้อนขึ้น
❌ ต้องมีการบำรุงรักษาดัชนีอย่างสม่ำเสมอ
✏️ Shoper Gamer
>>
https://shopergamer.vercel.app/
✓
Primary Keys คืออะไร 👇
>>
https://www.blockdit.com/posts/68cbaaae9ffcd7713c37ec98
✓
Data Keys คืออะไร 👇
>>
https://www.blockdit.com/posts/68cabc426b515917c10f73d8
Credit :
👇
●
https://www.borntodev.com/2021/06/11/ความแตกต่าง-primary-foreign/
●
https://www.w3schools.com/sql/sql_foreignkey.asp
●
https://www.w3schools.com/sql/sql_ref_foreign_key.asp
●
https://celerdata.com/glossary/foreign-keys
●
https://www.techtarget.com/searchoracle/definition/foreign-key
เทคโนโลยี
data
ข่าวรอบโลก
บันทึก
1
1
ดูเพิ่มเติมในซีรีส์
Data
1
1
โฆษณา
ดาวน์โหลดแอปพลิเคชัน
© 2025 Blockdit
เกี่ยวกับ
ช่วยเหลือ
คำถามที่พบบ่อย
นโยบายการโฆษณาและบูสต์โพสต์
นโยบายความเป็นส่วนตัว
แนวทางการใช้แบรนด์ Blockdit
Blockdit เพื่อธุรกิจ
ไทย