อธิบาย Primary Key (PRIMARY KEY) ของ MySQL: วิธีตั้งค่า แก้ไขข้อผิดพลาด และเลือกการออกแบบที่ดีที่สุด

目次

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

  1. Guarantees uniqueness ค่าที่อยู่ในคอลัมน์ที่กำหนดเป็น primary key ไม่สามารถทำซ้ำกันภายในตารางได้
  2. NULL values are not allowed Primary key ต้องมีค่าเสมอและไม่อนุญาตให้เป็น NULL
  3. 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);

ข้อได้เปรียบของคีย์หลักแบบคอมโพสิต

  1. รับประกันความเป็นเอกลักษณ์
  • คุณสามารถรักษาความเป็นเอกลักษณ์โดยการรวมหลายคอลัมน์.
  1. สอดคล้องกับกฎธุรกิจ
  • ตัวอย่างเช่น เมื่อจัดการข้อมูลคำสั่งซื้อ order_id เพียงอย่างเดียวอาจไม่รับประกันความเป็นเอกลักษณ์ แต่การรวม order_id กับ product_id สามารถรักษาความสมบูรณ์ของข้อมูลได้.
  1. ทำให้การจัดการข้อมูลง่ายขึ้น
  • การใช้คีย์หลักแบบคอมโพสิตช่วยป้องกันข้อมูลซ้ำซ้อนและทำให้โครงสร้างง่ายขึ้น.

สิ่งที่ควรระวังเมื่อใช้คีย์หลักแบบคอมโพสิต

  1. ผลกระทบต่อประสิทธิภาพ
  • เนื่องจากคีย์หลักแบบคอมโพสิตต้องเปรียบเทียบหลายคอลัมน์ระหว่างการค้นหาและการแทรก จึงอาจมีค่าใช้จ่ายสูงกว่าคีย์หลักแบบคอลัมน์เดียว ซึ่งเป็นสิ่งสำคัญโดยเฉพาะในฐานข้อมูลขนาดใหญ่.
  1. ข้อจำกัดการใช้ดัชนี
  • เมื่อกำหนดคีย์หลักแบบคอมโพสิต ดัชนีที่สร้างโดยอัตโนมัติจะครอบคลุมหลายคอลัมน์ หากต้องการทำดัชนีให้กับคอลัมน์แต่ละคอลัมน์ คุณต้องสร้างดัชนีแยกต่างหาก.
  1. การออกแบบที่ซับซ้อนขึ้น
  • การรวมหลายคอลัมน์อาจทำให้การออกแบบซับซ้อนขึ้น การเลือกคอลัมน์ที่เหมาะสมเป็นสิ่งสำคัญ.

เมื่อควรใช้คีย์หลักแบบคอมโพสิต

  • เมื่อความเป็นเอกลักษณ์ต้องจัดการโดยหลายเงื่อนไข ตัวอย่าง: 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)

  1. รับประกันความเป็นเอกลักษณ์
  • คีย์หลักระบุแต่ละแถวในตารางอย่างเป็นเอกลักษณ์.
  • ไม่อนุญาตให้มีค่าซ้ำหรือค่า NULL.
  1. รับประกันความสมบูรณ์ของข้อมูล
  • การตั้งค่าคีย์หลักช่วยรักษาความสอดคล้องของตารางและความสมบูรณ์ของข้อมูล.
  1. ดัชนีจะถูกสร้างโดยอัตโนมัติ
  • เมื่อคุณตั้งค่าคีย์หลัก ดัชนีจะถูกสร้างโดยอัตโนมัติ ซึ่งช่วยปรับปรุงประสิทธิภาพสำหรับการค้นหาและการดำเนินการข้อมูล.

ตัวอย่างของคีย์หลัก

ด้านล่างเป็นตัวอย่างที่คอลัมน์ id ถูกตั้งเป็นคีย์หลัก.

CREATE TABLE users (
    id INT NOT NULL AUTO_INCREMENT,
    username VARCHAR(50),
    PRIMARY KEY (id)
);

ลักษณะของดัชนี (INDEX)

  1. เพิ่มความเร็วในการค้นหา
  • ดัชนีช่วยเร่งการค้นหาข้อมูลและการดำเนินการคิวรี.
  1. ไม่รับประกันความเป็นเอกลักษณ์
  • ดัชนีทั่วไปไม่รับประกันความเป็นเอกลักษณ์ (แต่ดัชนี UNIQUE จะทำเช่นนั้น).
  1. สามารถตั้งค่าได้บนคอลัมน์ใดก็ได้
  • คุณสามารถสร้างดัชนีบนคอลัมน์ที่ไม่ใช่คีย์หลักเพื่อปรับปรุงประสิทธิภาพของคิวรีเฉพาะ.

ตัวอย่างของดัชนี

ด้านล่างเป็นตัวอย่างการเพิ่มดัชนีให้กับคอลัมน์ username.

CREATE INDEX idx_username ON users (username);

คีย์หลักกับดัชนี

FeaturePrimary Key (PRIMARY KEY)Index (INDEX)
Guarantees uniqueness?YesUsually no (except UNIQUE indexes)
Allows NULL values?NoYes
Automatically created?An index is automatically created when a primary key is setMust be created manually
How many can be set?One per tableMultiple 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 เพื่อเร่งการค้นหาผลิตภัณฑ์ตามหมวดหมู่.

วิธีตัดสินใจระหว่างคีย์หลักและดัชนี

  1. การเลือกคีย์หลัก
  • ตั้งค่าคีย์หลักบนคอลัมน์ที่ระบุข้อมูลได้อย่างเอกลักษณ์.
  • ทุกตารางควรมีคีย์หลักเพียงหนึ่งเดียว.
  1. การใช้ดัชนี
  • เพิ่มดัชนีบนคอลัมน์ที่มักถูกค้นหาเป็นประจำที่ไม่ใช่คีย์หลัก.
  • ตัวอย่าง: คอลัมน์ที่มักใช้ในคิวรีเช่น username หรือ email .
  1. หมายเหตุ
  • ดัชนีจำนวนมากเกินไปอาจทำให้ประสิทธิภาพของการแทรกและอัปเดตลดลง ควรตั้งดัชนีเฉพาะที่จำเป็นเท่านั้น.

6. หมายเหตุสำคัญเกี่ยวกับคีย์หลัก

คีย์หลัก (PRIMARY KEY) มีบทบาทสำคัญในการออกแบบฐานข้อมูล แต่หากไม่ได้ออกแบบและจัดการอย่างถูกต้อง อาจเกิดปัญหาด้านประสิทธิภาพและความสมบูรณ์ของข้อมูล ส่วนนี้อธิบายข้อควรพิจารณาที่สำคัญและแนวทางปฏิบัติที่ดีที่สุดสำหรับคีย์หลัก.

หมายเหตุเกี่ยวกับการลบหรือเปลี่ยนคีย์หลัก

วิธีลบคีย์หลัก

เพื่อทำการลบคีย์หลัก ให้ใช้คำสั่ง ALTER TABLE.

ALTER TABLE users DROP PRIMARY KEY;

หมายเหตุ:

  1. การลบคีย์หลักจะทำให้ดัชนีที่สร้างจากคีย์หลักนั้นถูกลบด้วย.
  2. หากข้อจำกัดของคีย์ต่างประเทศพึ่งพาคีย์หลัก การลบจะล้มเหลว คุณต้องลบข้อจำกัดของคีย์ต่างประเทศล่วงหน้า.

วิธีเปลี่ยนคีย์หลัก

เพื่อเปลี่ยนคีย์หลักที่มีอยู่ ให้ทำตามขั้นตอนต่อไปนี้:

  1. ลบคีย์หลักปัจจุบัน.
  2. เพิ่มคีย์หลักใหม่.

ตัวอย่าง:

ALTER TABLE users DROP PRIMARY KEY;
ALTER TABLE users ADD PRIMARY KEY (username);

ข้อควรพิจารณาเมื่อเลือกคีย์หลัก

  1. เลือกคอลัมน์ที่เหมาะสม
  • เลือกคอลัมน์ที่สามารถรับประกันความเป็นเอกลักษณ์ของคีย์หลัก.
  • ตัวเลือกทั่วไปได้แก่: wp:list /wp:list

    • ประเภทตัวเลขที่มีการเพิ่มอัตโนมัติ (AUTO_INCREMENT) (ตัวอย่าง: id )
    • คีย์ธรรมชาติ (ตัวอย่าง: หมายเลขพนักงานหรือรหัสสินค้า)
  1. หลีกเลี่ยงคอลัมน์ที่เปลี่ยนแปลงบ่อย
  • การอัปเดตค่าคีย์หลักบ่อยครั้งอาจส่งผลเสียต่อประสิทธิภาพ.
  1. หลีกเลี่ยงสตริงยาว
  • การใช้สตริงยาว (เช่น ชนิดสตริง 200 ตัวอักษร) เป็นคีย์หลักทำให้ประสิทธิภาพการค้นหาและการดำเนินการลดลง.
  1. หลีกเลี่ยงคอลัมน์ที่อาจมีค่า NULL
  • เนื่องจากคีย์หลักไม่อนุญาตให้มีค่า NULL คุณต้องเลือกคอลัมน์ที่มีค่าตลอดเวลา.

ข้อผิดพลาดทั่วไปเมื่อกำหนดคีย์หลักและวิธีแก้ไข

  1. ข้อผิดพลาด: 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);
  1. ข้อผิดพลาด: 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.
  1. ข้อผิดพลาด: ERROR 1265 (01000): Data truncated for column
  • สาเหตุ : wp:list /wp:list
    • เกิดขึ้นเมื่อข้อมูลของคีย์หลักเกินประเภทหรือความยาวที่คาดหวัง.
  • วิธีแก้ : wp:list /wp:list
    • เปลี่ยนประเภทข้อมูลของคอลัมน์คีย์หลักให้เหมาะสมหรือแก้ไขข้อมูลที่แทรก.

แนวทางปฏิบัติที่ดีที่สุดเมื่อกำหนดคีย์หลัก

  1. ควรใช้คอลัมน์เดียว
  • การใช้คีย์หลักแบบคอลัมน์เดียว (เช่น ชนิดตัวเลขที่มี AUTO_INCREMENT) ทำให้การออกแบบง่ายและมีประสิทธิภาพ.
  1. ใช้คีย์หลักแบบคอมโพสิตอย่างเหมาะสม
  • เมื่อรวมหลายคอลัมน์ ควรรักษาจำนวนคอลัมน์ให้น้อยที่สุดตามที่จำเป็น.
  1. ปรับแต่งประเภทข้อมูลของคอลัมน์คีย์หลัก
  • เลือกประเภทตัวเลข (เช่น INT) หรือสตริงสั้น (เช่น VARCHAR(50)) เพื่อเพิ่มประสิทธิภาพ.
  1. รักษาความสอดคล้องของข้อมูล
  • เพื่อรักษาความเป็นเอกลักษณ์และความสมบูรณ์ ให้ดำเนินการตรวจสอบอินพุตที่เหมาะสมสำหรับค่าคีย์หลัก.

7. แนวทางปฏิบัติที่ดีที่สุดสำหรับการออกแบบคีย์หลัก

ในการออกแบบฐานข้อมูล การออกแบบคีย์หลัก (PRIMARY KEY) อย่างเหมาะสมส่งผลโดยตรงต่อความสอดคล้องของข้อมูลและประสิทธิภาพ ส่วนนี้อธิบายแนวทางปฏิบัติที่ดีที่สุดสำหรับการออกแบบคีย์หลักอย่างมีประสิทธิภาพ.

คีย์ธรรมชาติ vs. คีย์ทดแทน: ควรเลือกแบบไหน?

คีย์ธรรมชาติคืออะไร?

คีย์ธรรมชาติใช้ข้อมูลธุรกิจที่มีอยู่เป็นคีย์หลัก
ตัวอย่าง: หมายเลขพนักงาน, รหัสสินค้า, ที่อยู่อีเมล.

ข้อดี:

  • ความหมายของข้อมูลเป็นที่เข้าใจโดยธรรมชาติ.
  • สอดคล้องกับระบบและกฎธุรกิจที่มีอยู่ได้ดี.

ข้อเสีย:

  • หากรวมสตริงยาวหรือค่าที่เปลี่ยนบ่อย จะส่งผลต่อประสิทธิภาพ.
  • มีความเสี่ยงของข้อมูลซ้ำซ้อน.

คีย์ทดแทนคืออะไร?

คีย์ทดแทนคือรหัสประจำตัวที่สร้างขึ้นภายในฐานข้อมูล
ตัวอย่าง: ID ตัวเลขที่ใช้ AUTO_INCREMENT.

ข้อดี:

  • ความเป็นเอกลักษณ์ได้รับการรับประกันเสมอ.
  • การค้นหาและการอัปเดตทำได้อย่างมีประสิทธิภาพ.
  • ไม่มีความเสี่ยงที่ค่าจะเปลี่ยนแปลง.

ข้อเสีย:

  • เนื่องจากค่ามีความหมายไม่เป็นมนุษย์ จึงไม่ช่วยในการตีความข้อมูล.

ควรเลือกแบบไหน?

  • แนะนำให้ใช้คีย์ทดแทน : ในหลายกรณี การใช้คีย์ทดแทน (เช่น ID ตัวเลขที่มี AUTO_INCREMENT) เป็นทางเลือกที่ดีที่สุด.
  • เมื่อควรเลือกคีย์ธรรมชาติ : เฉพาะเมื่อกฎธุรกิจกำหนดและรับประกันความสมบูรณ์ของข้อมูล.

การเพิ่มประสิทธิภาพการทำงานสำหรับคีย์หลัก

  1. ใช้ประเภทตัวเลข
  • การใช้ประเภทตัวเลขเช่น INT หรือ BIGINT สำหรับคีย์หลักช่วยเร่งการค้นหาและการเปรียบเทียบ.
  • ตัวอย่าง: sql CREATE TABLE customers ( customer_id INT NOT NULL AUTO_INCREMENT, name VARCHAR(100), PRIMARY KEY (customer_id) );
  1. ทำให้เล็กที่สุดเท่าที่จะเป็นไปได้
  • การทำให้คีย์หลักมีขนาดเล็กช่วยลดการใช้พื้นที่จัดเก็บและปรับปรุงประสิทธิภาพของดัชนี.
  • การใช้ INT (4 ไบต์) เป็นที่นิยม และ BIGINT (8 ไบต์) มักจำเป็นเฉพาะชุดข้อมูลขนาดใหญ่มาก.
  1. หลีกเลี่ยงการอัปเดตคีย์หลัก
  • การอัปเดต 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

  1. primary key รับประกันความเป็นเอกลักษณ์หรือไม่?
  2. คุณกำลังหลีกเลี่ยงการใช้สตริงยาวหรือคอลัมน์ที่เปลี่ยนแปลงบ่อยเป็น primary key หรือไม่?
  3. คุณได้พิจารณาว่า surrogate key เหมาะสมกว่าคีย์ธรรมชาติหรือไม่?
  4. ชนิดข้อมูลของคอลัมน์ primary key เหมาะสมหรือไม่ (เช่น INT หรือ BIGINT )?
  5. หากใช้ 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:

  1. คุณไม่สามารถรับประกันความไม่ซ้ำซ้อนของข้อมูลได้
  2. คุณไม่สามารถตั้งข้อจำกัด foreign key ได้
  3. การค้นหาและดำเนินการกับข้อมูลในตารางอาจทำได้ไม่มีประสิทธิภาพ

คำแนะนำ:

  • แนะนำให้ตั้ง 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 ได้โดยตรง แต่ควรระวังสิ่งต่อไปนี้:

  1. หากมีข้อจำกัด foreign key อยู่ ข้อมูลที่เกี่ยวข้องอาจได้รับผลกระทบ
  2. ค่าใช้จ่ายในการอัปเดตอาจสูงและอาจส่งผลต่อประสิทธิภาพ

ตัวอย่าง:

UPDATE users SET user_id = 10 WHERE user_id = 1;

คีย์หลักส่งผลต่อประสิทธิภาพอย่างไร?

ประโยชน์:

  • คีย์หลักจะมีดัชนีโดยอัตโนมัติ ซึ่งช่วยเร่งการค้นหาและการจัดเรียง.

หมายเหตุ:

  • หากประเภทข้อมูลหรือความยาวของคีย์หลักไม่เหมาะสม ประสิทธิภาพอาจลดลง.

ประเภทข้อมูลที่ดีที่สุดสำหรับคีย์หลักคืออะไร?

  • ประเภทตัวเลข (INT หรือ BIGINT) แนะนำเป็นที่สุด.
  • พวกมันมีขนาดกะทัดรัดและเร็วสำหรับการค้นหา.
  • สามารถใช้ร่วมกับการเพิ่มอัตโนมัติ (AUTO_INCREMENT).
  • หากใช้สตริง, แนะนำให้ใช้ VARCHAR แต่ควรทำให้สั้นที่สุด.

คุณสามารถตั้งคีย์หลักหลายคีย์ได้หรือไม่?

ตารางสามารถมี คีย์หลักเพียงหนึ่งคีย์ เท่านั้น อย่างไรก็ตาม คุณสามารถสร้าง คีย์หลักเชิงประกอบ โดยรวมหลายคอลัมน์เข้าด้วยกัน.

ควรทำอย่างไรหากเกิดข้อผิดพลาดเมื่อทำการลบหรือเปลี่ยนคีย์หลัก?

ข้อผิดพลาดทั่วไป:

  • คุณไม่สามารถลบหรือเปลี่ยนคีย์หลักได้เนื่องจากข้อจำกัดของคีย์ต่างประเทศ.

วิธีแก้:

  1. ลบข้อจำกัดคีย์ต่างประเทศ.
  2. เปลี่ยนคีย์หลัก แล้วเพิ่มข้อจำกัดคีย์ต่างประเทศอีกครั้ง.

ตัวอย่าง:

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) อย่างละเอียด — ตั้งแต่พื้นฐานและวิธีการตั้งค่า ไปจนถึงข้อควรพิจารณาที่สำคัญ แนวทางปฏิบัติที่ดีที่สุด และคำถามที่พบบ่อย คีย์หลักเป็นสิ่งจำเป็นในการออกแบบฐานข้อมูล และการตั้งค่าอย่างเหมาะสมส่งผลอย่างมากต่อความเป็นเอกลักษณ์ของข้อมูลและประสิทธิภาพ.

ทบทวนความสำคัญของคีย์หลัก

  1. รับประกันความเป็นเอกลักษณ์ของข้อมูล คีย์หลักระบุแต่ละแถวในตารางอย่างเฉพาะเจาะจงและป้องกันข้อมูลซ้ำ.
  2. เพิ่มประสิทธิภาพในการค้นหาและการดำเนินการ เนื่องจากคีย์หลักมีดัชนีโดยอัตโนมัติ การค้นหาและการดำเนินการข้อมูลจึงเร็วขึ้น.
  3. พื้นฐานสำหรับข้อจำกัดคีย์ต่างประเทศ การตั้งค่าคีย์หลักทำให้สามารถจัดการความสมบูรณ์โดยใช้ข้อจำกัดคีย์ต่างประเทศ.

จุดสำคัญในการออกแบบ

  • เลือกคอลัมน์ที่เหมาะสมสำหรับคีย์หลัก การตั้งค่าคีย์หลักบนคอลัมน์ที่รับประกันความเป็นเอกลักษณ์และไม่เปลี่ยนแปลงบ่อยเป็นสิ่งสำคัญ.
  • ใช้คีย์หลักเชิงประกอบอย่างระมัดระวัง ใช้คีย์หลักเชิงประกอบเฉพาะเมื่อจำเป็นและหลีกเลี่ยงการทำให้การออกแบบซับซ้อนเกินไป.
  • เลือกประเภทข้อมูลที่เหมาะสม การใช้ประเภทตัวเลขเช่น INT หรือ BIGINT ช่วยให้ได้ประสิทธิภาพที่ดี.

หัวข้อถัดไปที่ควรเรียนรู้

เมื่อคุณเข้าใจคีย์หลักอย่างลึกซึ้ง การเรียนรู้หัวข้อต่อไปนี้จะช่วยให้การออกแบบฐานข้อมูลมีประสิทธิภาพยิ่งขึ้น:

  1. การตั้งค่าคีย์ต่างประเทศ (FOREIGN KEY) เรียนรู้วิธีสร้างความสัมพันธ์ระหว่างข้อมูลและรักษาความสมบูรณ์.
  2. การปรับแต่งดัชนี เรียนรู้เทคนิคเพื่อปรับปรุงประสิทธิภาพการสืบค้นโดยการเพิ่มดัชนีให้กับคอลัมน์ที่ไม่ใช่คีย์หลัก.
  3. การทำให้เป็นปกติและการทำให้ไม่เป็นปกติ เรียนรู้พื้นฐานการออกแบบฐานข้อมูลเช่นการทำให้เป็นปกติ และพิจารณาการทำให้ไม่เป็นปกติเพื่อประสิทธิภาพ.

หมายเหตุสุดท้าย

การออกแบบคีย์หลักของ MySQL อย่างถูกต้องเป็นขั้นตอนแรกสู่การปรับปรุงประสิทธิภาพและความน่าเชื่อถือของฐานข้อมูลทั้งหมดของคุณ ใช้บทความนี้เป็นแนวทางเพื่อพัฒนาทักษะในการตั้งค่าและจัดการคีย์หลักที่เหมาะสม ด้วยการออกแบบคีย์หลักที่มั่นคง การพัฒนาและการดำเนินงานของฐานข้อมูลจะราบรื่นยิ่งขึ้น ซึ่งสามารถเพิ่มประสิทธิภาพโดยรวมได้.

นี่คือจุดจบของบทความนี้ ใช้เป็นแนวทางและลองออกแบบคีย์หลักที่มีประสิทธิภาพในโครงการจริง.