StepCoding

การสร้างและใช้งาน Primary Key

อ่าน [4853] หมวดหมู่: การสร้างฐานข้อมูล

สาเหตุหลักในการสร้าง index ก็เพื่อต้องการลดระยะเวลาการดำเนินการในการ query หรือกระบวนการต่าง ๆ ในการค้นหา field นั้น ๆ โดยเฉพาะตารางที่มีข้อมูลขนาดใหญ่ แต่ยังมีสิ่งสำคัญอีกอย่างหนึ่งในการกำหนด index ก็คือการสร้างข้อกำหนดที่ระบุว่าต้องการให้ field นั้น ๆ มีค่าที่ไม่ซ้ำกันเลย

ชนิดของ INDEX ใน MySQL ที่ถูกใช้ใน concept ของการกำหนดคีย์หลักให้กับตาราง ก็คือ

  • การสร้าง index ด้วยคำสั่ง PRIMARY KEY
  • การสร้าง index ด้วยคำสั่ง UNIQUE

ในทั้งสองกรณีนี้ field นั้น ๆ ที่ถูกกำหนดเป็น index ในสองประเภทนี้ จะต้องถูกกำหนดให้เป็นคุณสมบัติ NOT NULL ด้วย ในส่วนของ PRIMARY KEY นั้น มันเป็นสิ่งที่จำเป็นมากที่จะต้องกำหนดเป็น NOT NULL เนื่องจากว่า MySQL จะไม่ยอมสร้าง primary key ให้กับ field ที่อาจจะมีค่าเป็นค่า NULL ได้

ในส่วนของ UNIQUE การประกาศเป็น NOT NULL นั้นเป็นเพียงความต้องการทาง logical เท่านั้น เนื่องจาก UNIQUE สามารถมีค่า NULL ได้ ทำให้อาจจะเกิดค่า NULL หลาย ๆ ค่าก็ได้ ซึ่งจะทำให้บางเรคอร์ดอาจจะไม่มีตัวบอกความแตกต่างจากเรคอร์ดอื่น ๆ และ index นั้น ๆ จะไม่สามารถถูกใช้เป็น primary key ได้

ตัวอย่างต่อไปนี้เป็นการสร้าง table "t" ที่ประกอบไปด้วย field "id" โดยกำหนดให้เป็น NOT NULL และ primary key โดยใช้คำสั่ง PRIMARY KEY

CREATE TABLE t
(
	id	INT NOT NULL,
	name	CHAR(30) NOT NULL,
	PRIMARY KEY (id)
);

จากตัวอย่างนี้เป็นการกำหนดให้ primary key มีเพียง field เดียวเท่านั้น ดังนั้นเราอาจจะกำหนด PRIMARY KEY ใน field นั้น ๆ เลยก็ได้เช่น

CREATE TABLE t
(
	id	INT NOT NULL PRIMARY KEY,
	name	CHAR(30) NOT NULL
);

แต่ในกรณีที่เรากำหนดให้ PRIMARY KEY นั้นประกอบไปด้วยหลาย ๆ field จะไม่สามารถประกาศภายใน field นั้น ๆ ได้ เราก็จะต้องประกาศหลังจากกำหนด field เสร็จแล้ว

CLASS TABLE people
(
	last_name	CHAR(30) NOT NULL,
	first_name	CHAR(30) NOT NULL,
	PRIMARY KEY (last_name, first_name)
);

การประกาศ PRIMARY KEY หลาย ๆ field นั้น ๆ หมายความว่า ในตัวอย่างนี้ได้กำหนดให้ "last_name" และ "first_name" เป็น primary key ดังนั้นในตารางนี้จะสามารถมีข้อมูลใน "first_name" หรือ "last_name" ที่ซ้ำกันได้ แต่ถ้านำมารวมกันแล้วจะไม่สามารถซ้ำกันได้ เช่น

last_namefirst_name
GeneticAdmin
GeneticProgramming
ProgrammingAdmin

จากข้อมูลด้านบนนั้นเป็นข้อมูลที่สามารถนำเข้าในตาราง "people" ได้ เนื่องจากว่าข้อมูลในนี้มันไม่มีเรคอร์ดไหนที่มีทั้ง "last_name" และ "first_name" เหมือนกันเลย แต่ถ้าเราเพิ่มข้อมูลไปอีกเรคอร์ดหนึ่งเป็น last_name = "Genetic" และ first_name = "Admin" ก็จะทำให้เกิด error ทันที เนื่องจากทั้ง 2 field นี้ถูกกำหนดให้เป็น PRIMARY KEY ดังนั้นมันจะมีข้อมูลที่ซ้ำกันไม่ได้

ผู้สนับสนุน