- 1 1. Introduction
- 2 2. What Is a Primary Key (PRIMARY KEY)?
- 3 3. How to Set a Primary Key in MySQL
- 4 4. การใช้คีย์หลักแบบคอมโพสิต
- 5 5. ความแตกต่างระหว่าง Primary Keys และ Indexes
- 6 6. หมายเหตุสำคัญเกี่ยวกับคีย์หลัก
- 7 7. แนวทางปฏิบัติที่ดีที่สุดสำหรับการออกแบบคีย์หลัก
- 8 8. FAQ (Frequently Asked Questions)
- 8.1 ความแตกต่างระหว่าง primary key กับ unique key คืออะไร?
- 8.2 จะเกิดอะไรขึ้นหากไม่ได้ตั้ง primary key?
- 8.3 ควรใช้ composite primary key เมื่อใด?
- 8.4 จำเป็นต้องใช้ AUTO_INCREMENT หรือไม่?
- 8.5 จะเปลี่ยนค่า primary key อย่างไร?
- 8.6 คีย์หลักส่งผลต่อประสิทธิภาพอย่างไร?
- 8.7 ประเภทข้อมูลที่ดีที่สุดสำหรับคีย์หลักคืออะไร?
- 8.8 คุณสามารถตั้งคีย์หลักหลายคีย์ได้หรือไม่?
- 8.9 ควรทำอย่างไรหากเกิดข้อผิดพลาดเมื่อทำการลบหรือเปลี่ยนคีย์หลัก?
- 9 9. สรุป
1. Introduction
ในงานออกแบบฐานข้อมูล “primary key (PRIMARY KEY)” เป็นแนวคิดที่สำคัญอย่างยิ่ง
Primary key มีบทบาทสำคัญในการรับประกันความเป็นเอกลักษณ์ของแต่ละบันทึกและทำหน้าที่เป็นพื้นฐานสำหรับการจัดการข้อมูลอย่างมีประสิทธิภาพและความสมบูรณ์ของข้อมูล
ในบทความนี้ เราจะอธิบายทุกอย่างตั้งแต่พื้นฐานของ primary key ใน MySQL ไปจนถึงวิธีการตั้งค่า การแก้ไขข้อผิดพลาด และการเลือกการออกแบบที่ดี คู่มือนี้มุ่งหมายให้เป็นประโยชน์ต่อผู้ใช้หลากหลายระดับ ตั้งแต่ผู้เริ่มต้นจนถึงผู้ใช้ระดับกลาง
เมื่อคุณอ่านคู่มือนี้จนจบแล้ว คุณจะสามารถ:
- เข้าใจแนวคิดพื้นฐานของ primary key
- ตั้งค่า primary key และแก้ไขข้อผิดพลาดที่เกี่ยวข้อง
- เลือก primary key ที่เหมาะสมสำหรับการออกแบบฐานข้อมูล
ตอนนี้มาเริ่มต้นด้วยพื้นฐานของ primary key กันเถอะ
2. What Is a Primary Key (PRIMARY KEY)?
ในฐานข้อมูล “primary key (PRIMARY KEY)” คือประเภทคีย์ที่สำคัญที่สุดหนึ่งประเภทที่ใช้ในตารางเพื่อรับประกันความเป็นเอกลักษณ์ Primary key ทำหน้าที่เป็นตัวระบุข้อมูลและระบุแถวแต่ละแถวอย่างเฉพาะเจาะจง
Characteristics of a Primary Key
- Guarantees uniqueness ค่าที่อยู่ในคอลัมน์ที่กำหนดเป็น primary key ไม่สามารถทำซ้ำกันภายในตารางได้
- NULL values are not allowed Primary key ต้องมีค่าเสมอและไม่อนุญาตให้เป็น NULL
- Only one per table แต่ละตารางสามารถมี primary key ได้เพียงหนึ่งตัวและคุณไม่สามารถกำหนดหลาย primary key ได้ อย่างไรก็ตาม คุณสามารถสร้าง “composite primary key” โดยรวมหลายคอลัมน์เข้าด้วยกันเป็น primary key เดียว
Why You Need a Primary Key
การตั้งค่า primary key ให้ประโยชน์หลายอย่าง เช่น:
- Ensures data integrity : ป้องกันไม่ให้มีบันทึกซ้ำกันถูกแทรกเข้าไป
- Efficient searching : ปรับปรุงประสิทธิภาพการค้นหา การอัปเดต และการลบข้อมูล
- Manages relationships between tables : Primary key เป็นจุดอ้างอิงเมื่อใช้ foreign key
ตัวอย่างเช่น ในตารางที่จัดการข้อมูลผู้ใช้ การตั้งค่า “User ID” เป็น primary key จะทำให้คุณสามารถระบุผู้ใช้แต่ละคนได้อย่างเฉพาะเจาะจง
3. How to Set a Primary Key in MySQL
ใน MySQL คุณสามารถตั้งค่า primary key (PRIMARY KEY) ได้อย่างง่ายดาย ด้านล่างนี้ เราจะอธิบายด้วยตัวอย่างที่เป็นรูปธรรมว่าตั้งค่า primary key อย่างไรเมื่อสร้างตารางใหม่และวิธีเพิ่ม primary key ให้กับตารางที่มีอยู่แล้ว
Setting a Primary Key When Creating a New Table
เพื่อกำหนด primary key เมื่อสร้างตารางใหม่ ให้ใช้คำสั่ง CREATE TABLE คอลัมน์ที่ใช้เป็น primary key ต้องมีข้อจำกัด NOT NULL
Basic example
ในตัวอย่างต่อไปนี้ เราจะสร้างตารางชื่อ users และกำหนดคอลัมน์ id เป็น primary key
CREATE TABLE users (
id INT NOT NULL AUTO_INCREMENT,
username VARCHAR(50) NOT NULL,
email VARCHAR(100),
PRIMARY KEY (id)
);
Explanation:
- คอลัมน์
idใช้AUTO_INCREMENTเพื่อสร้างค่าที่เป็นเอกลักษณ์ต่อเนื่องโดยอัตโนมัติ PRIMARY KEY (id)ระบุว่าคอลัมน์idเป็น primary key
Setting Multiple Columns as a Primary Key (Composite Primary Key)
โดยการกำหนด composite primary key คุณสามารถรับประกันความเป็นเอกลักษณ์โดยใช้การผสมของหลายคอลัมน์ร่วมกัน
Example: Defining a composite primary key
CREATE TABLE orders (
order_id INT NOT NULL,
product_id INT NOT NULL,
quantity INT,
PRIMARY KEY (order_id, product_id)
);
Explanation:
- การผสมของ
order_idและproduct_idถูกกำหนดให้เป็น primary key - แม้ว่า
order_idจะเหมือนกัน คุณก็สามารถบันทึกแถวที่มีค่าproduct_idแตกต่างกันได้
How to Add a Primary Key to an Existing Table
เพื่อเพิ่ม primary key ให้กับตารางที่มีอยู่แล้วในภายหลัง ให้ใช้คำสั่ง ALTER TABLE
Example: Add a primary key on a single column
ด้านล่างเป็นตัวอย่างการเพิ่ม id เป็น primary key ให้กับตาราง users ที่มีอยู่แล้ว
ALTER TABLE users ADD PRIMARY KEY (id);
Example: Add a composite primary key
วิธีเดียวกันนี้ใช้ได้เมื่อกำหนด primary key ด้วยการผสมหลายคอลัมน์ร่วมกัน.
ALTER TABLE orders ADD PRIMARY KEY (order_id, product_id);
วิธีลบ Primary Key
เพื่อทำการลบคีย์หลัก ให้ใช้คำสั่ง ALTER TABLE ตามที่แสดงด้านล่าง.
ALTER TABLE users DROP PRIMARY KEY;
หมายเหตุ:
- การลบคีย์หลักจะทำให้ดัชนีที่สร้างจากคีย์นั้นถูกลบด้วย ดังนั้นควรทำอย่างระมัดระวัง.
การใช้ AUTO_INCREMENT
ฟีเจอร์ที่มักใช้ร่วมกับคีย์หลักคือ AUTO_INCREMENT โดยค่าจะเพิ่มขึ้นโดยอัตโนมัติทุกครั้งที่คุณแทรกข้อมูล.
ตัวอย่าง: คีย์หลักกับ AUTO_INCREMENT
CREATE TABLE customers (
customer_id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(100),
PRIMARY KEY (customer_id)
);
4. การใช้คีย์หลักแบบคอมโพสิต
คีย์หลักแบบคอมโพสิตเป็นวิธีการรวมหลายคอลัมน์เข้าด้วยกันเป็นคีย์หลักเดียวเพื่อรับประกันความเป็นเอกลักษณ์ของข้อมูล มันมีประโยชน์เป็นพิเศษเมื่อคอลัมน์เดียวไม่สามารถรับประกันความเป็นเอกลักษณ์ได้หรือเมื่อคุณต้องระบุข้อมูลตามกฎธุรกิจเฉพาะ.
แนวคิดพื้นฐานของคีย์หลักแบบคอมโพสิต
ด้วยคีย์หลักแบบคอมโพสิต คุณสามารถรับประกันได้ว่าการรวมค่าจากสองคอลัมน์หรือมากกว่าจะเป็นเอกลักษณ์ ตัวอย่างเช่น ในตารางที่จัดการข้อมูลคำสั่งซื้อ การรวม Order ID (order_id) และ Product ID (product_id) ทำให้คุณสามารถระบุผลิตภัณฑ์แต่ละรายการภายในคำสั่งซื้อได้อย่างเป็นเอกลักษณ์.
วิธีตั้งค่าคีย์หลักแบบคอมโพสิต
การตั้งค่าเมื่อสร้างตารางใหม่
ด้านล่างเป็นตัวอย่างการตั้งค่าคีย์หลักแบบคอมโพสิตในตาราง orders.
CREATE TABLE orders (
order_id INT NOT NULL,
product_id INT NOT NULL,
quantity INT,
PRIMARY KEY (order_id, product_id)
);
คำอธิบาย:
order_idและproduct_idถูกระบุร่วมกันเป็นคีย์หลัก.- แม้ว่า
order_idจะเหมือนกัน แต่บันทึกที่มีค่าproduct_idแตกต่างกันก็สามารถแทรกได้.
การเพิ่มคีย์หลักแบบคอมโพสิตให้กับตารางที่มีอยู่
เพื่อเพิ่มคีย์หลักแบบคอมโพสิตให้กับตารางที่มีอยู่ ให้ใช้คำสั่ง ALTER TABLE ดังต่อไปนี้.
ALTER TABLE orders ADD PRIMARY KEY (order_id, product_id);
ข้อได้เปรียบของคีย์หลักแบบคอมโพสิต
- รับประกันความเป็นเอกลักษณ์
- คุณสามารถรักษาความเป็นเอกลักษณ์โดยการรวมหลายคอลัมน์.
- สอดคล้องกับกฎธุรกิจ
- ตัวอย่างเช่น เมื่อจัดการข้อมูลคำสั่งซื้อ
order_idเพียงอย่างเดียวอาจไม่รับประกันความเป็นเอกลักษณ์ แต่การรวมorder_idกับproduct_idสามารถรักษาความสมบูรณ์ของข้อมูลได้.
- ทำให้การจัดการข้อมูลง่ายขึ้น
- การใช้คีย์หลักแบบคอมโพสิตช่วยป้องกันข้อมูลซ้ำซ้อนและทำให้โครงสร้างง่ายขึ้น.
สิ่งที่ควรระวังเมื่อใช้คีย์หลักแบบคอมโพสิต
- ผลกระทบต่อประสิทธิภาพ
- เนื่องจากคีย์หลักแบบคอมโพสิตต้องเปรียบเทียบหลายคอลัมน์ระหว่างการค้นหาและการแทรก จึงอาจมีค่าใช้จ่ายสูงกว่าคีย์หลักแบบคอลัมน์เดียว ซึ่งเป็นสิ่งสำคัญโดยเฉพาะในฐานข้อมูลขนาดใหญ่.
- ข้อจำกัดการใช้ดัชนี
- เมื่อกำหนดคีย์หลักแบบคอมโพสิต ดัชนีที่สร้างโดยอัตโนมัติจะครอบคลุมหลายคอลัมน์ หากต้องการทำดัชนีให้กับคอลัมน์แต่ละคอลัมน์ คุณต้องสร้างดัชนีแยกต่างหาก.
- การออกแบบที่ซับซ้อนขึ้น
- การรวมหลายคอลัมน์อาจทำให้การออกแบบซับซ้อนขึ้น การเลือกคอลัมน์ที่เหมาะสมเป็นสิ่งสำคัญ.
เมื่อควรใช้คีย์หลักแบบคอมโพสิต
- เมื่อความเป็นเอกลักษณ์ต้องจัดการโดยหลายเงื่อนไข ตัวอย่าง: Order ID กับ Product ID หรือ Project ID กับ Task ID.
- เมื่อคอลัมน์เดียวไม่สามารถรับประกันความเป็นเอกลักษณ์ ตัวอย่าง: หากลูกค้าหนึ่งคนสามารถซื้อหลายผลิตภัณฑ์ได้ ให้รวม Customer ID กับ Purchase Date เพื่อจัดการความเป็นเอกลักษณ์.
5. ความแตกต่างระหว่าง Primary Keys และ Indexes
Primary keys (PRIMARY KEY) และ indexes (INDEX) เป็นแนวคิดสำคัญใน MySQL ทั้งคู่ แต่บทบาทและวัตถุประสงค์ของมันต่างกัน ส่วนนี้จะอธิบายความแตกต่างระหว่างคีย์หลักและดัชนีและวิธีการใช้แต่ละอย่างอย่างเหมาะสม.
คุณลักษณะของคีย์หลัก (PRIMARY KEY)
- รับประกันความเป็นเอกลักษณ์
- คีย์หลักระบุแต่ละแถวในตารางอย่างเป็นเอกลักษณ์.
- ไม่อนุญาตให้มีค่าซ้ำหรือค่า NULL.
- รับประกันความสมบูรณ์ของข้อมูล
- การตั้งค่าคีย์หลักช่วยรักษาความสอดคล้องของตารางและความสมบูรณ์ของข้อมูล.
- ดัชนีจะถูกสร้างโดยอัตโนมัติ
- เมื่อคุณตั้งค่าคีย์หลัก ดัชนีจะถูกสร้างโดยอัตโนมัติ ซึ่งช่วยปรับปรุงประสิทธิภาพสำหรับการค้นหาและการดำเนินการข้อมูล.
ตัวอย่างของคีย์หลัก
ด้านล่างเป็นตัวอย่างที่คอลัมน์ id ถูกตั้งเป็นคีย์หลัก.
CREATE TABLE users (
id INT NOT NULL AUTO_INCREMENT,
username VARCHAR(50),
PRIMARY KEY (id)
);
ลักษณะของดัชนี (INDEX)
- เพิ่มความเร็วในการค้นหา
- ดัชนีช่วยเร่งการค้นหาข้อมูลและการดำเนินการคิวรี.
- ไม่รับประกันความเป็นเอกลักษณ์
- ดัชนีทั่วไปไม่รับประกันความเป็นเอกลักษณ์ (แต่ดัชนี UNIQUE จะทำเช่นนั้น).
- สามารถตั้งค่าได้บนคอลัมน์ใดก็ได้
- คุณสามารถสร้างดัชนีบนคอลัมน์ที่ไม่ใช่คีย์หลักเพื่อปรับปรุงประสิทธิภาพของคิวรีเฉพาะ.
ตัวอย่างของดัชนี
ด้านล่างเป็นตัวอย่างการเพิ่มดัชนีให้กับคอลัมน์ username.
CREATE INDEX idx_username ON users (username);
คีย์หลักกับดัชนี
| Feature | Primary Key (PRIMARY KEY) | Index (INDEX) |
|---|---|---|
| Guarantees uniqueness? | Yes | Usually no (except UNIQUE indexes) |
| Allows NULL values? | No | Yes |
| Automatically created? | An index is automatically created when a primary key is set | Must be created manually |
| How many can be set? | One per table | Multiple per table |
ความสัมพันธ์ระหว่างคีย์หลักและดัชนี
- คีย์หลักจะมีดัชนีโดยอัตโนมัติ เมื่อคุณตั้งค่าคีย์หลัก ดัชนีที่เป็นเอกลักษณ์จะถูกสร้างโดยอัตโนมัติ ซึ่งหมายความว่าคอลัมน์คีย์หลักสามารถค้นหาได้อย่างรวดเร็ว.
- คุณยังสามารถสร้างดัชนีบนคอลัมน์ที่ไม่ใช่คีย์หลักได้ การเพิ่มดัชนีบนคอลัมน์ที่ไม่ใช่คีย์หลักสามารถปรับปรุงประสิทธิภาพของคิวรีเฉพาะได้.
ตัวอย่าง: การใช้คีย์หลักและดัชนีพร้อมกัน
ในตัวอย่างต่อไปนี้ คีย์หลักและดัชนีถูกตั้งบนคอลัมน์ที่แตกต่างกัน.
CREATE TABLE products (
product_id INT NOT NULL AUTO_INCREMENT,
product_name VARCHAR(100),
category_id INT,
PRIMARY KEY (product_id),
INDEX idx_category (category_id)
);
คำอธิบาย:
product_idเป็นคีย์หลัก รับประกันความเป็นเอกลักษณ์และไม่อนุญาตค่า NULL.- ดัชนีถูกตั้งบน
category_idเพื่อเร่งการค้นหาผลิตภัณฑ์ตามหมวดหมู่.
วิธีตัดสินใจระหว่างคีย์หลักและดัชนี
- การเลือกคีย์หลัก
- ตั้งค่าคีย์หลักบนคอลัมน์ที่ระบุข้อมูลได้อย่างเอกลักษณ์.
- ทุกตารางควรมีคีย์หลักเพียงหนึ่งเดียว.
- การใช้ดัชนี
- เพิ่มดัชนีบนคอลัมน์ที่มักถูกค้นหาเป็นประจำที่ไม่ใช่คีย์หลัก.
- ตัวอย่าง: คอลัมน์ที่มักใช้ในคิวรีเช่น
usernameหรือemail.
- หมายเหตุ
- ดัชนีจำนวนมากเกินไปอาจทำให้ประสิทธิภาพของการแทรกและอัปเดตลดลง ควรตั้งดัชนีเฉพาะที่จำเป็นเท่านั้น.

6. หมายเหตุสำคัญเกี่ยวกับคีย์หลัก
คีย์หลัก (PRIMARY KEY) มีบทบาทสำคัญในการออกแบบฐานข้อมูล แต่หากไม่ได้ออกแบบและจัดการอย่างถูกต้อง อาจเกิดปัญหาด้านประสิทธิภาพและความสมบูรณ์ของข้อมูล ส่วนนี้อธิบายข้อควรพิจารณาที่สำคัญและแนวทางปฏิบัติที่ดีที่สุดสำหรับคีย์หลัก.
หมายเหตุเกี่ยวกับการลบหรือเปลี่ยนคีย์หลัก
วิธีลบคีย์หลัก
เพื่อทำการลบคีย์หลัก ให้ใช้คำสั่ง ALTER TABLE.
ALTER TABLE users DROP PRIMARY KEY;
หมายเหตุ:
- การลบคีย์หลักจะทำให้ดัชนีที่สร้างจากคีย์หลักนั้นถูกลบด้วย.
- หากข้อจำกัดของคีย์ต่างประเทศพึ่งพาคีย์หลัก การลบจะล้มเหลว คุณต้องลบข้อจำกัดของคีย์ต่างประเทศล่วงหน้า.
วิธีเปลี่ยนคีย์หลัก
เพื่อเปลี่ยนคีย์หลักที่มีอยู่ ให้ทำตามขั้นตอนต่อไปนี้:
- ลบคีย์หลักปัจจุบัน.
- เพิ่มคีย์หลักใหม่.
ตัวอย่าง:
ALTER TABLE users DROP PRIMARY KEY;
ALTER TABLE users ADD PRIMARY KEY (username);
ข้อควรพิจารณาเมื่อเลือกคีย์หลัก
- เลือกคอลัมน์ที่เหมาะสม
- เลือกคอลัมน์ที่สามารถรับประกันความเป็นเอกลักษณ์ของคีย์หลัก.
ตัวเลือกทั่วไปได้แก่: wp:list /wp:list
- ประเภทตัวเลขที่มีการเพิ่มอัตโนมัติ (AUTO_INCREMENT) (ตัวอย่าง:
id) - คีย์ธรรมชาติ (ตัวอย่าง: หมายเลขพนักงานหรือรหัสสินค้า)
- ประเภทตัวเลขที่มีการเพิ่มอัตโนมัติ (AUTO_INCREMENT) (ตัวอย่าง:
- หลีกเลี่ยงคอลัมน์ที่เปลี่ยนแปลงบ่อย
- การอัปเดตค่าคีย์หลักบ่อยครั้งอาจส่งผลเสียต่อประสิทธิภาพ.
- หลีกเลี่ยงสตริงยาว
- การใช้สตริงยาว (เช่น ชนิดสตริง 200 ตัวอักษร) เป็นคีย์หลักทำให้ประสิทธิภาพการค้นหาและการดำเนินการลดลง.
- หลีกเลี่ยงคอลัมน์ที่อาจมีค่า NULL
- เนื่องจากคีย์หลักไม่อนุญาตให้มีค่า NULL คุณต้องเลือกคอลัมน์ที่มีค่าตลอดเวลา.
ข้อผิดพลาดทั่วไปเมื่อกำหนดคีย์หลักและวิธีแก้ไข
- ข้อผิดพลาด:
ERROR 1068 (42000): Multiple primary key defined
- สาเหตุ : wp:list /wp:list
- เกิดขึ้นเมื่อคุณพยายามกำหนดคีย์หลักหลายรายการ.
- วิธีแก้ : wp:list /wp:list
- ลบการกำหนดคีย์หลักที่ซ้ำกัน
sql ALTER TABLE users DROP PRIMARY KEY; ALTER TABLE users ADD PRIMARY KEY (id);
- ลบการกำหนดคีย์หลักที่ซ้ำกัน
- ข้อผิดพลาด:
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails
- สาเหตุ : wp:list /wp:list
- เกิดขึ้นเมื่อข้อจำกัด foreign key ไม่ตรงกับคีย์หลัก.
- วิธีแก้ : wp:list /wp:list
- ทำให้ประเภทข้อมูลและข้อจำกัดสอดคล้องกันระหว่างคีย์หลักและ foreign key.
- ข้อผิดพลาด:
ERROR 1265 (01000): Data truncated for column
- สาเหตุ : wp:list /wp:list
- เกิดขึ้นเมื่อข้อมูลของคีย์หลักเกินประเภทหรือความยาวที่คาดหวัง.
- วิธีแก้ : wp:list /wp:list
- เปลี่ยนประเภทข้อมูลของคอลัมน์คีย์หลักให้เหมาะสมหรือแก้ไขข้อมูลที่แทรก.
แนวทางปฏิบัติที่ดีที่สุดเมื่อกำหนดคีย์หลัก
- ควรใช้คอลัมน์เดียว
- การใช้คีย์หลักแบบคอลัมน์เดียว (เช่น ชนิดตัวเลขที่มี
AUTO_INCREMENT) ทำให้การออกแบบง่ายและมีประสิทธิภาพ.
- ใช้คีย์หลักแบบคอมโพสิตอย่างเหมาะสม
- เมื่อรวมหลายคอลัมน์ ควรรักษาจำนวนคอลัมน์ให้น้อยที่สุดตามที่จำเป็น.
- ปรับแต่งประเภทข้อมูลของคอลัมน์คีย์หลัก
- เลือกประเภทตัวเลข (เช่น
INT) หรือสตริงสั้น (เช่นVARCHAR(50)) เพื่อเพิ่มประสิทธิภาพ.
- รักษาความสอดคล้องของข้อมูล
- เพื่อรักษาความเป็นเอกลักษณ์และความสมบูรณ์ ให้ดำเนินการตรวจสอบอินพุตที่เหมาะสมสำหรับค่าคีย์หลัก.
7. แนวทางปฏิบัติที่ดีที่สุดสำหรับการออกแบบคีย์หลัก
ในการออกแบบฐานข้อมูล การออกแบบคีย์หลัก (PRIMARY KEY) อย่างเหมาะสมส่งผลโดยตรงต่อความสอดคล้องของข้อมูลและประสิทธิภาพ ส่วนนี้อธิบายแนวทางปฏิบัติที่ดีที่สุดสำหรับการออกแบบคีย์หลักอย่างมีประสิทธิภาพ.
คีย์ธรรมชาติ vs. คีย์ทดแทน: ควรเลือกแบบไหน?
คีย์ธรรมชาติคืออะไร?
คีย์ธรรมชาติใช้ข้อมูลธุรกิจที่มีอยู่เป็นคีย์หลัก
ตัวอย่าง: หมายเลขพนักงาน, รหัสสินค้า, ที่อยู่อีเมล.
ข้อดี:
- ความหมายของข้อมูลเป็นที่เข้าใจโดยธรรมชาติ.
- สอดคล้องกับระบบและกฎธุรกิจที่มีอยู่ได้ดี.
ข้อเสีย:
- หากรวมสตริงยาวหรือค่าที่เปลี่ยนบ่อย จะส่งผลต่อประสิทธิภาพ.
- มีความเสี่ยงของข้อมูลซ้ำซ้อน.
คีย์ทดแทนคืออะไร?
คีย์ทดแทนคือรหัสประจำตัวที่สร้างขึ้นภายในฐานข้อมูล
ตัวอย่าง: ID ตัวเลขที่ใช้ AUTO_INCREMENT.
ข้อดี:
- ความเป็นเอกลักษณ์ได้รับการรับประกันเสมอ.
- การค้นหาและการอัปเดตทำได้อย่างมีประสิทธิภาพ.
- ไม่มีความเสี่ยงที่ค่าจะเปลี่ยนแปลง.
ข้อเสีย:
- เนื่องจากค่ามีความหมายไม่เป็นมนุษย์ จึงไม่ช่วยในการตีความข้อมูล.
ควรเลือกแบบไหน?
- แนะนำให้ใช้คีย์ทดแทน : ในหลายกรณี การใช้คีย์ทดแทน (เช่น ID ตัวเลขที่มี
AUTO_INCREMENT) เป็นทางเลือกที่ดีที่สุด. - เมื่อควรเลือกคีย์ธรรมชาติ : เฉพาะเมื่อกฎธุรกิจกำหนดและรับประกันความสมบูรณ์ของข้อมูล.
การเพิ่มประสิทธิภาพการทำงานสำหรับคีย์หลัก
- ใช้ประเภทตัวเลข
- การใช้ประเภทตัวเลขเช่น
INTหรือBIGINTสำหรับคีย์หลักช่วยเร่งการค้นหาและการเปรียบเทียบ. - ตัวอย่าง:
sql CREATE TABLE customers ( customer_id INT NOT NULL AUTO_INCREMENT, name VARCHAR(100), PRIMARY KEY (customer_id) );
- ทำให้เล็กที่สุดเท่าที่จะเป็นไปได้
- การทำให้คีย์หลักมีขนาดเล็กช่วยลดการใช้พื้นที่จัดเก็บและปรับปรุงประสิทธิภาพของดัชนี.
- การใช้
INT(4 ไบต์) เป็นที่นิยม และBIGINT(8 ไบต์) มักจำเป็นเฉพาะชุดข้อมูลขนาดใหญ่มาก.
- หลีกเลี่ยงการอัปเดตคีย์หลัก
- การอัปเดต primary key สามารถอัปเดตดัชนีที่เกี่ยวข้องและข้อจำกัด foreign key ได้ ซึ่งอาจทำให้ประสิทธิภาพลดลงอย่างมาก.
การออกแบบ primary key และ foreign key
- Primary key มักถูกใช้เป็นเป้าหมายอ้างอิงสำหรับ foreign key (FOREIGN KEY) ดังนั้นความเป็นเอกลักษณ์และความสมบูรณ์ของ primary key จึงสำคัญอย่างยิ่งเมื่อออกแบบข้อจำกัด foreign key.
ตัวอย่าง: การออกแบบ primary key และ foreign key
CREATE TABLE customers (
customer_id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(100),
PRIMARY KEY (customer_id)
);
CREATE TABLE orders (
order_id INT NOT NULL AUTO_INCREMENT,
customer_id INT NOT NULL,
order_date DATE,
PRIMARY KEY (order_id),
FOREIGN KEY (customer_id) REFERENCES customers(customer_id)
);
คำอธิบาย:
- คอลัมน์
customer_idในตารางordersอ้างอิงถึงคอลัมน์customer_idในตารางcustomers - หากความสมบูรณ์ของ primary key ไม่ได้รับการรักษา ข้อจำกัด foreign key อาจทำให้เกิดข้อผิดพลาด
เช็คลิสต์การออกแบบ primary key
- primary key รับประกันความเป็นเอกลักษณ์หรือไม่?
- คุณกำลังหลีกเลี่ยงการใช้สตริงยาวหรือคอลัมน์ที่เปลี่ยนแปลงบ่อยเป็น primary key หรือไม่?
- คุณได้พิจารณาว่า surrogate key เหมาะสมกว่าคีย์ธรรมชาติหรือไม่?
- ชนิดข้อมูลของคอลัมน์ primary key เหมาะสมหรือไม่ (เช่น
INTหรือBIGINT)? - หากใช้ composite primary key คุณได้จำกัดจำนวนคอลัมน์ให้เหลือน้อยที่สุดหรือไม่?
การออกแบบ primary key อย่างเหมาะสมช่วยปรับปรุงประสิทธิภาพของฐานข้อมูลและรักษาความสมบูรณ์ของข้อมูล ในส่วนต่อไปเราจะตอบคำถามที่ผู้อ่านมักถามบ่อยใน “8. FAQ (Frequently Asked Questions).”
8. FAQ (Frequently Asked Questions)
ในส่วนนี้เราจะตอบคำถามที่พบบ่อยเกี่ยวกับ MySQL primary key (PRIMARY KEY) โดยอธิบายประเด็นที่ผู้เริ่มต้นจนถึงระดับกลางมักสงสัยในรูปแบบที่เข้าใจง่าย.
ความแตกต่างระหว่าง primary key กับ unique key คืออะไร?
Primary key (PRIMARY KEY):
- ระบุแถวแต่ละแถวอย่างเอกลักษณ์
- สามารถตั้งได้เพียงหนึ่งคีย์ต่อหนึ่งตาราง
- ไม่อนุญาตค่า NULL
Unique key (UNIQUE KEY):
- ทำให้ค่ามีความเป็นเอกลักษณ์ต่อแถว แต่สามารถตั้งหลาย unique key ในตารางเดียวได้
- อนุญาตค่า NULL (แต่ NULL จะถือเป็นค่าที่เป็นเอกลักษณ์)
ตัวอย่าง:
CREATE TABLE example (
id INT NOT NULL AUTO_INCREMENT,
email VARCHAR(100) UNIQUE,
username VARCHAR(50),
PRIMARY KEY (id)
);
- คอลัมน์
idเป็น primary key - คอลัมน์
emailเป็น unique key
จะเกิดอะไรขึ้นหากไม่ได้ตั้ง primary key?
หากไม่ได้ตั้ง primary key:
- คุณไม่สามารถรับประกันความไม่ซ้ำซ้อนของข้อมูลได้
- คุณไม่สามารถตั้งข้อจำกัด foreign key ได้
- การค้นหาและดำเนินการกับข้อมูลในตารางอาจทำได้ไม่มีประสิทธิภาพ
คำแนะนำ:
- แนะนำให้ตั้ง primary key ในทุกตาราง
ควรใช้ composite primary key เมื่อใด?
ใช้ composite primary key เมื่อคุณต้องการรับประกันความเป็นเอกลักษณ์ด้วยการรวมหลายคอลัมน์เข้าด้วยกัน.
ตัวอย่าง:
- เมื่อจัดการข้อมูลคำสั่งซื้อ ให้รับประกันความเป็นเอกลักษณ์ด้วยการรวม
order_idและproduct_id.CREATE TABLE orders ( order_id INT, product_id INT, quantity INT, PRIMARY KEY (order_id, product_id) );
หมายเหตุ:
- เนื่องจาก composite primary key สามารถทำให้การออกแบบซับซ้อนขึ้น คุณควรพิจารณาอย่างรอบคอบก่อนใช้งาน.
จำเป็นต้องใช้ AUTO_INCREMENT หรือไม่?
ไม่จำเป็นต้องใช้ แต่ก็มีประโยชน์ในสถานการณ์ต่อไปนี้:
- เมื่อคุณต้องการให้ค่าของคอลัมน์ primary key ถูกสร้างโดยอัตโนมัติ
- เมื่อคุณต้องการ primary key แบบตัวเลขที่รับประกันความเป็นเอกลักษณ์
ตัวอย่าง:
CREATE TABLE users (
user_id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(100),
PRIMARY KEY (user_id)
);
จะเปลี่ยนค่า primary key อย่างไร?
คุณสามารถเปลี่ยนค่า primary key ได้โดยตรง แต่ควรระวังสิ่งต่อไปนี้:
- หากมีข้อจำกัด foreign key อยู่ ข้อมูลที่เกี่ยวข้องอาจได้รับผลกระทบ
- ค่าใช้จ่ายในการอัปเดตอาจสูงและอาจส่งผลต่อประสิทธิภาพ
ตัวอย่าง:
UPDATE users SET user_id = 10 WHERE user_id = 1;
คีย์หลักส่งผลต่อประสิทธิภาพอย่างไร?
ประโยชน์:
- คีย์หลักจะมีดัชนีโดยอัตโนมัติ ซึ่งช่วยเร่งการค้นหาและการจัดเรียง.
หมายเหตุ:
- หากประเภทข้อมูลหรือความยาวของคีย์หลักไม่เหมาะสม ประสิทธิภาพอาจลดลง.
ประเภทข้อมูลที่ดีที่สุดสำหรับคีย์หลักคืออะไร?
- ประเภทตัวเลข (INT หรือ BIGINT) แนะนำเป็นที่สุด.
- พวกมันมีขนาดกะทัดรัดและเร็วสำหรับการค้นหา.
- สามารถใช้ร่วมกับการเพิ่มอัตโนมัติ (AUTO_INCREMENT).
- หากใช้สตริง, แนะนำให้ใช้
VARCHARแต่ควรทำให้สั้นที่สุด.
คุณสามารถตั้งคีย์หลักหลายคีย์ได้หรือไม่?
ตารางสามารถมี คีย์หลักเพียงหนึ่งคีย์ เท่านั้น อย่างไรก็ตาม คุณสามารถสร้าง คีย์หลักเชิงประกอบ โดยรวมหลายคอลัมน์เข้าด้วยกัน.
ควรทำอย่างไรหากเกิดข้อผิดพลาดเมื่อทำการลบหรือเปลี่ยนคีย์หลัก?
ข้อผิดพลาดทั่วไป:
- คุณไม่สามารถลบหรือเปลี่ยนคีย์หลักได้เนื่องจากข้อจำกัดของคีย์ต่างประเทศ.
วิธีแก้:
- ลบข้อจำกัดคีย์ต่างประเทศ.
- เปลี่ยนคีย์หลัก แล้วเพิ่มข้อจำกัดคีย์ต่างประเทศอีกครั้ง.
ตัวอย่าง:
ALTER TABLE orders DROP FOREIGN KEY fk_customer_id;
ALTER TABLE orders DROP PRIMARY KEY;
ALTER TABLE orders ADD PRIMARY KEY (new_id);
9. สรุป
ในบทความนี้ เราได้อธิบายคีย์หลักของ MySQL (PRIMARY KEY) อย่างละเอียด — ตั้งแต่พื้นฐานและวิธีการตั้งค่า ไปจนถึงข้อควรพิจารณาที่สำคัญ แนวทางปฏิบัติที่ดีที่สุด และคำถามที่พบบ่อย คีย์หลักเป็นสิ่งจำเป็นในการออกแบบฐานข้อมูล และการตั้งค่าอย่างเหมาะสมส่งผลอย่างมากต่อความเป็นเอกลักษณ์ของข้อมูลและประสิทธิภาพ.
ทบทวนความสำคัญของคีย์หลัก
- รับประกันความเป็นเอกลักษณ์ของข้อมูล คีย์หลักระบุแต่ละแถวในตารางอย่างเฉพาะเจาะจงและป้องกันข้อมูลซ้ำ.
- เพิ่มประสิทธิภาพในการค้นหาและการดำเนินการ เนื่องจากคีย์หลักมีดัชนีโดยอัตโนมัติ การค้นหาและการดำเนินการข้อมูลจึงเร็วขึ้น.
- พื้นฐานสำหรับข้อจำกัดคีย์ต่างประเทศ การตั้งค่าคีย์หลักทำให้สามารถจัดการความสมบูรณ์โดยใช้ข้อจำกัดคีย์ต่างประเทศ.
จุดสำคัญในการออกแบบ
- เลือกคอลัมน์ที่เหมาะสมสำหรับคีย์หลัก การตั้งค่าคีย์หลักบนคอลัมน์ที่รับประกันความเป็นเอกลักษณ์และไม่เปลี่ยนแปลงบ่อยเป็นสิ่งสำคัญ.
- ใช้คีย์หลักเชิงประกอบอย่างระมัดระวัง ใช้คีย์หลักเชิงประกอบเฉพาะเมื่อจำเป็นและหลีกเลี่ยงการทำให้การออกแบบซับซ้อนเกินไป.
- เลือกประเภทข้อมูลที่เหมาะสม การใช้ประเภทตัวเลขเช่น
INTหรือBIGINTช่วยให้ได้ประสิทธิภาพที่ดี.
หัวข้อถัดไปที่ควรเรียนรู้
เมื่อคุณเข้าใจคีย์หลักอย่างลึกซึ้ง การเรียนรู้หัวข้อต่อไปนี้จะช่วยให้การออกแบบฐานข้อมูลมีประสิทธิภาพยิ่งขึ้น:
- การตั้งค่าคีย์ต่างประเทศ (FOREIGN KEY) เรียนรู้วิธีสร้างความสัมพันธ์ระหว่างข้อมูลและรักษาความสมบูรณ์.
- การปรับแต่งดัชนี เรียนรู้เทคนิคเพื่อปรับปรุงประสิทธิภาพการสืบค้นโดยการเพิ่มดัชนีให้กับคอลัมน์ที่ไม่ใช่คีย์หลัก.
- การทำให้เป็นปกติและการทำให้ไม่เป็นปกติ เรียนรู้พื้นฐานการออกแบบฐานข้อมูลเช่นการทำให้เป็นปกติ และพิจารณาการทำให้ไม่เป็นปกติเพื่อประสิทธิภาพ.
หมายเหตุสุดท้าย
การออกแบบคีย์หลักของ MySQL อย่างถูกต้องเป็นขั้นตอนแรกสู่การปรับปรุงประสิทธิภาพและความน่าเชื่อถือของฐานข้อมูลทั้งหมดของคุณ ใช้บทความนี้เป็นแนวทางเพื่อพัฒนาทักษะในการตั้งค่าและจัดการคีย์หลักที่เหมาะสม ด้วยการออกแบบคีย์หลักที่มั่นคง การพัฒนาและการดำเนินงานของฐานข้อมูลจะราบรื่นยิ่งขึ้น ซึ่งสามารถเพิ่มประสิทธิภาพโดยรวมได้.
นี่คือจุดจบของบทความนี้ ใช้เป็นแนวทางและลองออกแบบคีย์หลักที่มีประสิทธิภาพในโครงการจริง.


