การสร้างฐานข้อมูลที่ดีนั้น ข้อมูลจะต้องมีความถูกต้องเพื่อให้เกิดความน่าเชื่อถือ เช่น ฐานข้อมูลนักศึกษาจะต้องมีไม่ซ้ำกัน เเต่หากในกรณีที่ชื่อนักศึกษาซ้ำกัน เราก็สามารถเเยกตัวนักศึกออกได้ โดยการที่ Primary Key ไม่ซ้ำกัน เป็นต้น
สามารถทำให้ข้อมูลถูกต้องสมบูรณ์ได้โดยการใช้ NOT NULL, UNIQUE, Foreign Key, Check
ข้อมูลที่ถูกต้องสมบูรณ์จะต้องเป็นไปตามกฎที่ใช้จัดเก็บข้อมูลเชิงสัมพันธ์ 2 กฎดังนี้
1. ความถูกต้องสมบูรณ์ของเอนทิตี้ (Entity integrity rule)
- " ทุกเอนทิตี้ต้องมี Primary Key เเละ Primary Key จะต้องมีค่าไม่ซ้ำ "
- ดังนั้น ทุกครั้งที่สร้าง Primary Key ให้เป็นไปตามกฎข้อที่ 1
- - ต้องกำหนดให้ไม่เป็นค่าว่างโดยใช้ "NOT NULL" เเละ
- - กำหนดให้ไม่เป็นค่าซ้ำโดยใช้ "UNIQUE"
- ตัวอย่างเช่น
จากตัวอย่าง code ด้านบน Primary Key ของตารางนี้คือ "stu_id" กำหนดเอาไว้ว่า NOT NULL เเละ UNIQUE หมายความว่า
โค้ด: เลือกทั้งหมด
CREATE TABLE student (stu_id char(4) NOT NULL UNIQUE, stu_fname char(40) NOT NULL, stu_lname char(40) NOT NULL, stu_address char(255) NOT NULL, stu_phone char(10), stu_email char(40), PRIMARY KEY (stu_id));
- 1) ในฐานข้อมูลมีรหัสนักศึกษา "S001" เเละ นักศึกษาชื่อ "พิชัย" เเล้วต้องการเพิ่มรหัสนักศึกษา "S001" ชื่อ "นันทกร" ?
- คำตอบ ไม่ได้เพราะ Primary เป็น UNIQUE คือ ห้ามซ้ำ
- คำตอบ ไม่ได้เพราะ Primary เป็น NOT NULL คือ ห้ามว่าง
- คำตอบ ได้เพราะ Primary ไม่เป็นค่าซ้ำ เเละ ค่าว่าง
- 1) ในฐานข้อมูลมีรหัสนักศึกษา "S001" เเละ นักศึกษาชื่อ "พิชัย" เเล้วต้องการเพิ่มรหัสนักศึกษา "S001" ชื่อ "นันทกร" ?
- " Foreign Key (คีย์นอก) จะต้องมีค่าข้อมูลตรงกับ Primary Key ของอีกตารางหนึ่งที่มีความสัมพันธ์ด้วย "
- ดังนั้น เมื่อมีการกำหนด Foreign Key ทุกครั้งให้เป็นไปตามกฎข้อที่ 2
- - ต้องกำหนดโดยใช้ "FOREIGN KEY (<ชื่อคอลัมน์ของตารางหลัก>) REFERENCES <ชื่อตารางที่มีความสัมพันธ์ด้วย>"
- ตัวอย่างเช่น
จากตัวอย่าง code ข้างต้น ตาราง student จะมี Foreign Key คือ "subj_id" ซึ่งมีค่าตรงกับ Primary Key ของตาราง subject
โค้ด: เลือกทั้งหมด
CREATE TABLE student (stu_id char(4) NOT NULL UNIQUE, stu_fname char(40) NOT NULL, stu_lname char(40) NOT NULL, stu_address char(255) NOT NULL, stu_phone char(10), stu_email char(40), PRIMARY KEY (stu_id), FOREIGN KEY (subj_id) REFERENCES subject);
CHECK คือ การตรวจสอบข้อมูลก่อนบันทึกลงฐานข้อมูล
- ตัวอย่างเช่น
จากตัวอย่าง code ข้างต้น ตาราง student จะมีการตรวจสอบข้อมูลอายุของนักศึกษาที่ต้องระบุเอาไว้โดยมากกว่าหรือเท่ากับ 18
โค้ด: เลือกทั้งหมด
CREATE TABLE student (stu_id char(4) NOT NULL UNIQUE, stu_fname char(40) NOT NULL, stu_lname char(40) NOT NULL, stu_address char(255) NOT NULL, stu_age int NOT NULL, stu_phone char(10), stu_email char(40), PRIMARY KEY (stu_id), FOREIGN KEY (subj_id) REFERENCES subject, CONSTRAINT chk_age CHECK (stu_age >= 18));
- 1) หากต้องการระบุของอายุนักศึกษา "17" ?
- คำตอบ ไม่ได้เพราะ 17 มีค่าน้อยกว่า 18
- 1) หากต้องการระบุของอายุนักศึกษา "20" ?
- คำตอบ ได้เพราะ 20 มีค่ามากกว่า 18
- 1) หากต้องการระบุของอายุนักศึกษา "17" ?
- ฐานข้อมูลที่ดี คือ การทำให้ข้อมูลมีความถูกต้องสมบูรณ์โดยเป็นไปตามกฎข้างต้น 2 ข้อซึ่งสามารถใช้ NOT NULL, UNIQUE เข้ามาช่วยในการสร้าง Primary ส่วนเรื่องของ Foreign Key ก็จะต้องมีค่าตรงกับ Primary Key ของตารางหลัก เเละ นอกจากนั้นยังสามารถใช้ CHECK ในการตรวจสอบค่าก่อนที่จะทำการบันทึกลงฐานข้อมูล