primary key ของฐานข้อมูลแบบ relational database คืออะไร?

Tags: sql

primary key ก็คือ field หรือ column ที่สร้างความ unique ให้กับแต่ละแถว (row ) หรือ record ในตาราง (table) นั้นๆ

ลักษณะต่างๆ ของ primary key

  • primary key ต้องเก็บค่าที่ unique เท่านั้น ซ้ำกันไม่ได้
  • มีค่าเป็น NULL ไม่ได้
  • ในแต่ละตารางมี primary key ได้เพียงแต่เดียวเท่านั้น
  • primary key สามารถสร้างจาก field เดียว หรือรวมกันจากหลาย field ก็ได้ แบบที่รวมกันหลาย filled เรียกว่า composite primary key

ด้วยเหตุนี้ เมื่อ table นั้นมี primary key แล้ว เราไม่สามารถมีสอง record ที่มีค่าใน primary key field ซ้ำกันได้

image title

primary key สามารถสร้างตอน create table หรือ alter ทีหลังก็ได้ แต่ practice ที่ดีควรสร้างตอนที่สร้าง table ไปเลย

การกำหนดค่าให้กับ primary แบ่งเป็นสองวิธีดังนี้

Natural keys กำหนด key จากค่าunique ที่มีอยู่แล้วของระบบนั้นๆเช่น id ของนักเรียน, id ของบัตรประชาชน

  • ข้อดีของวิธีนี้คือ ได้เอา unique key ที่มีอยู่แล้ว ไม่ต้องสร้าง primary key เพิ่มเป็นอีกหนึ่ง field
  • ข้อเสียคือ ถ้าเกิดมีการเปลี่ยนแปลงการเก็บข้อมู เช่น ต้องการเก็บ id ของนักเรียนให้มีตัวอักษรเข้ามาด้วย จะทำให้เกิดความลำบากในการแก้ไขข้อมูล เพราะต้องตาม update ใน table อื่นๆ ที่เก็บ primary key นี้ด้วย

Surrogate key กำหนด key ให้มี unique ขึ้นมาใหม่โดยไม่มีความหมายใดๆ เกี่ยวข้องกับระบบนั้นๆ เลย เช่น เลขจำนวนเต็ม 1, 2,3,..n ไปเรื่อยๆ โดยเราสามารถกำหนด ให้ database server ช่วย assign ค่า id ในลักษณะให้โดยอัตโนมัติ ตอนที่เราสร้างข้อมูลหรือ insert record ใหม่

  • ข้อดี เนื่องจากไม่ความเกี่ยวข้องกับ business logic การเปลี่ยนแปลงค่าใน column ใดๆ จึงไม่ส่งผลกับ primary key ที่ต้องตาม update
  • ข้อเสีย อ่าน key ได้ยากเพราะไม่มีความเหมายเชิง business

ตัวอย่าง คำสั่งในการสร้าง primary ตอนสร้างตาราง

MySQL:

CREATE TABLE persons
(
id int NOT NULL,
first_name varchar(255) NOT NULL,
last_name varchar(255) NOT NULL,
address varchar(255),
PRIMARY KEY (id)
)

SQL Server / Oracle / MS Access:

 CREATE TABLE persons
(
id int NOT NULL PRI
MARY KEY,
first_name varchar(255) NOT NULL,
last_name varchar(255) NOT NULL,
address varchar(255)
)

สร้าง primary key แบบกำหนดชื่อของ pirmary key เอง และสร้างเป็นแบบ composite primary key คือ primary ที่สร้างจากหลาย column

MySQL / SQL Server / Oracle / MS Access:

CREATE TABLE persons
(
id int NOT NULL,
first_name varchar(255) NOT NULL,
last_name varchar(255) NOT NULL,
address varchar(255),
CONSTRAINT pk__person__id__last_name PRIMARY KEY (id, last_name)
)

สร้าง primary key ทีหลังจากที่สร้าง table แล้วด้วยคำสั่ง alter

MySQL / SQL Server / Oracle / MS Access:

ALTER TABLE persons
ADD PRIMARY KEY (Id)

สร้าง primary key แบบกำหนดชื่อเอง และสร้างเป็น composite primary key MySQL / SQL Server / Oracle / MS Access:

ALTER TABLE persons
ADD CONSTRAINT pk__person__id__last_name PRIMARY KEY (id,last_name)

การลบ primary key ด้วยคำสั่ง alter

MySQL:

ALTER TABLE persons
DROP PRIMARY KEY

SQL Server / Oracle / MS Access:

ALTER TABLE persons
DROP CONSTRAINT pk__person__id__last_name

note: column ที่สร้างเป็น primary key ด้วยคำสั่ง alter จำเป็นต้องเป็น column ที่ not null

Credit