Key เป็นแอตทริบิวต์ที่ช่วยให้เราสามารถระบุแถว และช่วยเราค้นหาความสัมพันธ์ระหว่าง 2 ตารางได้ และยังช่วยให้เราสามารถค้นหาข้อมูลได้อย่างง่ายอีกด้วย Show มาดูกันดีกว่าว่า Key แต่ละอย่างนั้นมันคืออะไร และใช้งานยังไงกันนะ ?? Primary Key เป็น Key ที่ใช้กำหนดว่าข้อมูลในคอมลัมน์นั้น ๆ ห้ามซ้ำกัน เช่น เบอร์โทร, E-mail, รหัสบัตร เป็นต้น และในตารางห้ามมีข้อมูลที่เป็น NULL CREATE TABLE <Table-Name> ( Column1 datatype, Column2 datatype, PRIMARY KEY (Column-Name) ); มาดูตัวอย่างการใช้งานกันเลยย ทำการสร้างตาราง CustomerInfo โดยมีคอลัมน์ดังนี้ ID, FIRST_NAME, LAST_NAME, ID_CARD_NUM, และ EMAIL โดยที่จะกำหนดให้ ID เป็น Primary Key CREATE TABLE CustomerInfo ( ID INT NOT NULL, FIRST_NAME VARCHAR(255), LAST_NAME VARCHAR(255), ID_CARD_NUM VARCHAR(255), EMAIL VARCHAR(255), PRIMARY KEY (ID) ) ผลลัพธ์ CustomerInfo IDFIRST_NAMELAST_NAMEID_CARD_NUMEMAIL1หนูตัวเล็ก[email protected]ไก่ขัน[email protected]หมูกินเยอะ[email protected] *โดยที่คอลลัมน์ ID ให้เป็น Primary Key เพราะมันจะสามารถทำให้เราสามารถระบุข้อมูลในแถวอื่น ๆ โดยไม่ซ้ำกัน Foreign Key เป็นการกำหนดคอลัมน์เพื่อสร้างความสัมพันธ์กับตารางอื่น ๆ ซึ่งมันจะให้เราสามารถเชื่อมข้อมูลกับตารางอื่น ๆ ได้ และทำให้ข้อมูลในฐานข้อมูลสอดคล้องกันนั่นเองจ้า CREATE TABLE <Table Name>( column1 datatype, column2 datatype, constraint (name of constraint) FOREIGN KEY [column1, column2...] REFERENCES [primary key table name] (List of primary key table column) ...); และตัวอย่างตารางที่มี Foreign Key ดังนี้ มีตาราง SubjectName ซึ่งใช้เก็บข้อมูลของวิชาเรียน, TeacherName ใช้เก็บชื่อและนามสกุลของครู, และตาราง TecherInfo เก็บข้อมูลครูที่สอนแต่ละวิชา ซึ่งทั้ง 3 ตารางนี้จะคอลัมน์ Code, และ TeacherID เป็น Foreign Key ดูง่าย ๆ ในรูปได้เลยจ้า สรุป : จำแบบง่ายๆ เลยคือ Primary Key คือ คีย์ที่ห้ามซ้ำ!! ส่วน Foreign Key คีย์ที่ใช้เชื่อมความสัมพันธ์ระหว่างตาราง ทีนี้ก็พอจะรู้ความแตกต่างของเจ้า Key 2 ตัวนี้แล้วเนอะ อย่าไปใช้ผิดกันล่ะ555 หวังว่าบทความนี้จะเป็นประโยชน์กับเพื่อนๆ ไม่มากก็น้อยนะคะ ❤️ ผู้เขียนได้รับมอบหมาย ให้เขียนบทความเกี่ยวกับ Constraints ซึ่งผู้เขียนขอเรียกว่า Integrity Constraintsโดยหากแปลกันเป็นคำ ๆ Constraint จะแปลว่า “ข้อบังคับ” หรือ “ข้อจำกัด” ขณะที่คำว่า Integrity จะแปลว่า “ความถูกต้องสมบูรณ์” หรือ “ความบูรภาพ” ถ้าเอาสองคำนี้มาผสมกันเป็น Integrity Constraints ก็จะได้ความหมายว่า กฎข้อบังคับต่างๆ ที่ทำให้เกิดความถูกต้องสมบูรณ์ (ของข้อมูล) การบังคับ Integrity Constraints สำหรับฐานข้อมูลเชิงสัมพันธ์ (Relational Database) นั้นจุดเริ่มต้นมาจากเอกสารชื่อ Codd's Twelve Commandments (เป็นกฎ 13 ข้อ นับจาก 0 - 12) ของ Edgar F. Codd ซึ่งเป็นผู้ริเริ่ม Relational Model สำหรับฐานข้อมูล เอกสารดังกล่าวได้พูดถึงการออกแบบระบบจัดการฐานข้อมูลเชิงสัมพันธ์ (RDBMS ย่อมาจาก Relational Database Management System) ต้องมีอะไรหรือทำอะไรได้บ้าง ในข้อที่ 5 ของเอกสารระบุไว้ว่าระบบจะต้องมีภาษาที่สามารถกำหนด Integrity Constraints ส่วนในข้อที่ 10 ระบุภาษานั้นจะต้องสร้าง Integrity Constraints ขึ้นและจัดเก็บเอาไว้ได้ใน Data Catalog ไม่ใช่อยู่ในฝั่ง Application รูปภาพ Edgar F. Codd (1923-2003) ผู้ริเริ่ม Relational Model สำหรับฐานข้อมูล ปัจจุบันภาษาที่ใช้สร้าง Database Objects (หมายรวมถึง Tables และ Constraints) บน Relational Database คงฟันธงไปได้เลยว่าต้องเป็นภาษา SQL (Structured Query Language) ซึ่งมีมาตรฐานรับรองทั้ง ANSI และ ISO/IEC และอาจมีการพัฒนาเพิ่มเติมจากผู้ผลิตและเรียกภาษาที่ปรับปรุงเพิ่มเติมของตนเองในชื่อใหม่ เช่น Microsoft SQL Server จะเรียกภาษา SQL ของตนเองว่า Transact-SQL หรือ Oracle ก็เรียกภาษา SQL ของตนเองว่า PL-SQL เป็นต้น ก่อนที่จะรู้จักประเภทต่าง ๆ ของ Constraint โดยละเอียด เราต้องทราบชนิดของ Data Integrity กันก่อน ทั้งนี้ Constraint ประเภทต่าง ๆ มีผลต่อความถูกต้องของข้อมูลต่างกัน Data Integrity Data Integrity หรือ ความถูกต้องสมบูรณ์ของข้อมูลจำแนกออกเป็น 3 ชนิดด้วยกัน
Integrity Constraints Microsoft SQL server สามารถกำหนด Constraints ได้หลากหลาย เพื่อให้เกิดความถูกต้องสมบูรณ์แก่ข้อมูล (Data Integrity) โดยผู้เขียนได้จำแนกให้เห็นดังตารางต่อไปนี้ Entity Integrity Referential Integrity Domain Integrity √√√√√√√√ตัวอย่างคำสั่ง CREATE TABLE ใช้ประกอบการอธิบาย Constraints 1 2 3 4 5 6 7 8 9 10 11 12 13CREATE TABLE HR.SimpleEmployees ( EmpID int IDENTITY(1,1) NOT NULL , FirstName nvarchar(30) NOT NULL , LastName nvarchar(30) NOT NULL , Title nvarchar(30) NOT NULL , BirthDate datetime NOT NULL , HireDate datetime NOT NULL , ModifiedDate datetime NOT NULL , EndDate datetime NULL CONSTRAINT PK_Employees PRIMARY KEY (EmpID) , CONSTRAINT AK_EmpName UNIQUE (FirstName, LastName) ); Unique Constraintถือเป็นข้อบังคับให้เกิด Entity Integrity เพราะบังคับให้ค่าในแต่ละแถวข้อมูลของคอลัมน์ หรือ กลุ่มของคอลัมน์ที่บังคับด้วย Unique Constraint จะต้องมีค่าไม่ซ้ำกัน (การพิจารณาว่าแถวข้อมูลใดมีค่าซ้ำหรือไม่ เป็นการตรวจและบังคับทั้งตารางจึงถือเป็น Entity Integrity) และ คอลัมน์ดังกล่าวสามารถระบุถึงแถวข้อมูลว่าเป็นแถวข้อมูลใดได้ แม้ว่าบางแถวข้อมูลที่มีค่าเป็น NULL อาจระบุไม่ได้ก็ตาม จากตัวอย่างคำสั่ง CREATE TABLE บรรทัดที่ 12 CONSTRAINT AK_EmpName UNIQUE (FirstName, LastName) จะเป็นการสร้าง Unique Constraint ชื่อ AK_EmpName เพื่อบังคับให้ค่าผสมจากคอลัมน์ FirstName และ LastName จะต้องไม่ซ้ำกับแถวข้อมูลใดเลยในตารางนี้ Nullability Constraintถือเป็นข้อบังคับให้เกิด Domain Integrity เป็นข้อบังคับสำหรับคอลัมน์ เพื่ออนุญาตหรือไม่อนุญาตให้เว้นว่าง(ไม่ใส่ข้อมูล) ในคอลัมน์นั้น ๆ (ระบบจะเก็บเป็นค่า NULL หากเว้นว่างไม่ใส่ค่า) คอลัมน์ใดไม่อนุญาตให้เว้นว่าง ให้ระบุ NOT NULL ท้ายการประกาศชื่อคอลัมน์ คอลัมน์ใดอนุญาตให้เว้นว่างได้ ให้ระบุ NULL ท้ายการประกาศชื่อคอลัมน์ Primary Key Constraintถือเป็นข้อบังคับให้เกิด Entity Integrity มีคุณสมบัติทุกอย่างของ Unique Constraint แต่เพิ่มเงื่อนไขว่าคอลัมน์ หรือกลุ่มของคอลัมน์ จะต้องทำหน้าที่เป็น Unique Identifier ให้กับตาราง พูดง่ายๆก็คือ จะเป็นตัวระบุแถวข้อมูล แต่ละแถวข้อมูล ของตาราง และ เนื่องจากต้องเป็นตัวระบุแถวข้อมูลซึ่งเป็นค่าว่างหรือ NULL ไม่ได้ จากตัวอย่างคำสั่ง CREATE TABLE บรรทัดที่ 11 CONSTRAINT PK_Employees PRIMARY KEY (empid) จะเป็นการสร้าง Primary Key Constraint ชื่อ PK_Employees ให้กับคอลัมน์ EmpID สรุปความแตกต่างระหว่าง Unique Constraint กับ Primary Key Constraint อย่างง่าย ๆ ก็คือ
|