ความสัมพันธ์และคีย์ในฐานข้อมูล
ความสัมพันธ์และคีย์ในฐานข้อมูล
1. ความสัมพันธ์ (Relationship)
เป็นเอนทิตี้ 2 เอนทิตี้ที่มีการเชื่อมโยงกันด้วยแอททริบิวต์ที่อยู่ภายใน เช่น เอนทิตี้ของนักเรียนจะสัมพันธ์กับเอนทิตี้ของคะแนนสอบรายวิชาโดยเชื่อมโยงกันด้วยแอททริบิวต์ที่ชื่อ “หมายเลขประจำตัว” ซึ่งสามารถอธิบายได้ด้วยรูปดังต่อไปนี้
ความสัมพันธ์สามารถแบ่งได้เป็น 3 ประเภทด้วยกันคือ
1. ความสัมพันธ์แบบ 1 ต่อ 1 (One-to-One Relationship)
2. ความสัมพันธ์แบบ 1 ต่อ N (One-to-Many Relationship)
3. ความสัมพันธ์แบบ M ต่อ N (Many-to-Many Relationship)
1.1 ความสัมพันธ์แบบ 1 ต่อ 1
เป็นความสัมพันธ์ที่จัดการได้ง่ายที่สุด เพราะ 1 เรคอร์ดของตารางหนึ่ง จะสัมพันธ์กับเรคอร์ดเพียง 1 เรคอร์ดของอีกตารางเท่านั้น เช่น ความสัมพันธ์ระหว่างเอนทิตี้ของนักเรียนกับเกรดเฉลี่ยของนักเรียน หรือความสัมพันธ์ระหว่างนักเรียนกับผลการสอบวิชาใดวิชาหนึ่งในภาคการศึกษาที่ระบุ โดยเราสามารถแสดงเป็นตารางได้ดังนี้
ตารางรายชื่อนักเรียน
ตารางสรุปผลสอบวิชาคณิตศาสตร์
จากตารางทั้ง 2 จะเห็นว่า ตารางรายชื่อนักเรียนไม่มีหมายเลขประจำตัวซ้ำกัน ตารางคะแนนก็จะเป็นคะแนนของแต่ละคนที่ไม่ซ้ำกัน โดยทั้ง 2 ตารางมีเลขประจำตัวนักเรียนทั้งคู่ซึ่งเลขประจำตัวทำให้ตารางทั้ง 2 มีความสัมพันธ์กัน
แต่การอธิบายด้วยตารางมีความยุ่งยากมาก ทั้งนี้เพราะข้อมูลที่อยู่ในตารางนั้นมีจำนวนมาก ดังนั้นการใช้เอนทิตี้และแอททริบิวต์ช่วยอธิบายจึงเป็นทางออกที่ดีกว่า
และเรายังสามารถใช้เพียงเอนทิตี้ในการอธิบายเรื่องความสัมพันธ์ได้ด้วย โดยในการใช้เฉพาะเอนทิตี้ในการอธิบายเรื่องความสัมพันธ์นั้นจะต้องใส่หมายเลขบอกถึงความสัมพันธ์เอาไว้แบบในรูปตัวอย่างด้วย
สำหรับสาเหตุที่ความสัมพันธ์แบบนี้เป็นแบบ 1 ต่อ 1 ก็เพราะหมายเลขประจําตัวนักเรียนของแต่ละตารางมีการจับคู่กันเป็นแบบ 1 ต่อ 1 คือนักเรียนหนึ่งคนก็ต้องสอบได้เพียงคะแนนเดียว คือได้ 80 คะแนน หรือ 70 คะแนน ไม่มีทางที่นักเรียนคนเดียวกันจะสอบเลขได้ 70 คะแนน และ 80 คะแนนในเวลาเดียวกัน
1.2 ความสัมพันธ์แบบ 1 ต่อ N
คําจํากัดความของความสัมพันธ์แบบนี้คือ ข้อมูล 1 เรคอร์ดจากตารางหนึ่งสามารถสัมพันธ์กับข้อมูลในอีกตารางหนึ่งตั้งแต่ 1 เรคอร์ดขึ้นไป
ตัวอย่างที่เป็นรูปธรรมเห็นกันได้ง่ายคือ รถโดยสารประจำทาง 1 คัน สามารถรับผู้โดยสารได้หลายคนหรือจะแค่คนเดียวก็รับได้ ในขณะที่คน 1 คนสามารถขึ้นรถโดยสารประจำทางได้ แค่คันเดียวเท่านั้น
ตัวอย่างที่เป็นรูปแบบของฐานข้อมูลได้แก่เรื่องผู้เข้าสอบและสนามสอบ ที่ผู้เข้าสอบจะสามารถเข้าห้องสอบได้เพียง 1 ห้องในช่วงเวลาเดียวกัน แต่ห้องสอบ 1 ห้องจะมีผู้เข้าสอบ พร้อมกันได้หลายคน
เราสามารถอธิบายได้ด้วยตารางดังต่อไปนี้
ตารางชื่อผู้เข้าสอบ
ตารางสนามสอบ
จะเห็นว่าห้องสอบ 1 ห้องมีนักเรียนผู้เข้าสอบได้หลายคน แต่นักเรียน 1 คน เข้าสอบได้แค่ 1 ห้อง ซึ่งสามารถอธิบายในรูปแบบของตารางได้ดังนี้
เราสามารถทำการแปลงตารางให้อยู่ในรูปของเอ็นทิตี้กับแอตตริบิวต์ได้ดังนี้
เราสามารถนําเฉพาะเอ็นทิตี้ อย่างเดียวมาอธิบายเป็นความสัมพันธ์ ได้ดังนี้
1.3 ความสัมพันธ์แบบ M ต่อ N
ความสัมพันธ์แบบนี้เป็นความสัมพันธ์ที่พบเจอได้บ่อยที่สุด และเป็นความสัมพันธ์ที่จัดการได้ยากที่สุด ด้วย ทั้งนี้เพราะข้อมูล 1 เรคอร์ดต่างก็สัมพันธ์กับข้อมูลหลายๆ เรคอร์ดของอีกตาราง ซึ่งอธิบายได้ด้วยตารางดังต่อไปนี้ ซึ่งเป็นตารางข้อมูลของร้านค้าส่งสินค้าเครื่องเขียน
ตารางแสดงรายการสินค้า
ตารางแสดงรายชื่อลูกค้า
เนื่องจากสินค้าแต่ละรายการสามารถถูกซื้อได้โดยลูกค้ารายใดก็ได้ และลูกค้าแต่ละรายก็สามารถสั่งซื้อสินค้าได้หลายรายการ เราสามารถอธิบายความสัมพันธ์โดยรูปภาพดังนี้
ถึงแม้การใช้รูปภาพในการอธิบายจะทำให้เข้าใจได้ง่าย แต่ในแง่ของระบบฐานข้อมูล เราต้องใช้รูปแบบของเอ็นทิตี้กับแอตตริบิวต์อธิบายดังนี้
สุดท้ายอธิบายในรูปแบบของเอ็นทิตี้ เราจะได้ความสัมพันธ์แบบ M ต่อ N แบบนี้
เนื่องจากความสัมพันธ์แบบ M ต่อ N เป็นความสัมพันธ์ที่ยุ่งยากต่อการจัดการ ดังนั้นจึงจำเป็นต้องลดความยุ่งยากลงด้วยการเพิ่มเอ็นทิตี้เข้าไประหว่างความสัมพันธ์นี้
ในกรณีร้านค้าส่ง เราสามารถใช้ใบสั่งซื้อสินค้าจากลูกค้าเป็นตัวช่วยลดความยุ่งยากในการจัดการความสัมพันธ์ได้โดยใบสั่งซื้อสินค้าจะทำหน้าที่เป็นตัวประสานระหว่างความสัมพันธ์ของทั้งคู่ คือลูกค้า 1 รายสามารถสั่งสินค้าได้หลายอย่าง และจะใช้ใบสั่งซื้อสินค้ากี่ใบก็ได้และในใบสั่งซื้อสินค้า 1 ใบจะใส่รายชื่อสินค้าที่สั่งซื้อได้หลายรายการ
ตอนนี้เราก็จะได้ความสัมพันธ์แบบ 1 : N จำนวน 2 ความสัมพันธ์ โดยเราสามารถจับแยกได้ดังนี้
เพียงเท่านี้ความสัมพันธ์อันวุ่นวายของ M:N ก็จะง่ายขึ้นทันที
2. คีย์(Key)
2.1 Primary key
คีย์หรือฟิลด์นี้มีชื่อเป็นภาษาไทยว่า “คีย์หลัก” คือคอลัมน์ (หรือกลุ่มของคอลัมน์) ในตารางฐานข้อมูลที่มีคุณสมบัติพิเศษในการ ระบุแถว (record) แต่ละแถวในตารางได้อย่าง เฉพาะเจาะจงและไม่ซ้ำกัน โดยค่าของ Primary Key จะต้อง ไม่เป็นค่าว่าง (NOT NULL) และ ไม่ซ้ำกัน (Unique)
ต้องไม่ซ้ำกัน (Unique)
ต้องไม่เป็นค่าว่าง (NOT NULL)
แต่ละตารางจะมีได้เพียง 1 Primary Key เท่านั้น
ในตาราง
คอลัมน์ student_id คือ Primary Key
เพราะค่าของมัน ไม่ซ้ำกัน ไม่เป็นค่าว่าง
ระบุตัวตนของนักเรียนแต่ละคนได้อย่างเฉพาะเจาะจง
2.2 Candidate key
ข้อมูลบางประเภทจะมีฟิลด์ให้เลือกใช้เป็น Primary key ได้มากกว่า 1 ฟิลด์ ถ้าจะเลือกทั้ง 2 ฟิลด์เป็น Primary key ก็จะเกินความจําเป็น เพราะถ้ามี Primary key มากเกินไปก็จะสร้างความสับสนให้กับเราได้ในภายหลัง ซึ่งฟิลด์ที่ 2 ที่มีสิทธิ์เป็น Primary key ได้นี้มีชื่อว่า Candidate key ที่แปลว่า คู่แข่ง โดยคีย์นี้สามารถนำมาใช้เป็น Primary key ได้เช่นกัน
ตารางข้อมูลของนักศึกษา
จะเห็นว่าทั้งฟิลด์หมายเลขประจําตัวประชาชนและรหัสประจําตัวนักศึกษา ไม่มีทางที่จะมีข้อมูลซ้ำกันได้ เราสามารถเลือกใช้ฟิลด์ใดเป็น Primary key ก็ได้ แต่เนื่องจากเป็นข้อมูลของสถาบันการศึกษาที่ใช้อยู่ภายใน ดังนั้นจึงควรเลือกรหัสประจําตัวนักศึกษาเป็น Primary key แล้วปล่อยให้เลขประจําตัวประชาชนเป็น Candidate key
Candidate Key 1: StudentID — เพราะ StudentID แต่ละคนไม่ซ้ำกัน และถ้าเอา StudentID ออกตารางจะไม่สามารถระบุคนแต่ละคนได้อย่างแน่นอน
Candidate Key 2: Email — เพราะแต่ละ Email ก็ไม่ซ้ำกันและใช้ระบุแถวได้เช่นกัน
Candidate Key 3: อาจจะเป็น PhoneNumber ถ้าไม่มีหมายเลขโทรศัพท์ซ้ำกัน
แต่ Name ไม่ใช่ Candidate Key เพราะชื่อคนอาจซ้ำกันได้ (เช่น มีคนชื่อ "John Smith" หลายคน)
2.3 Compound key
(บางครั้งก็เรียกว่า Composite Key) คือ กุญแจที่ประกอบด้วยแอตทริบิวต์(ฟิลด์) มากกว่าหนึ่งตัวรวมกัน เพื่อใช้ระบุแถวข้อมูลในตารางฐานข้อมูลอย่างเฉพาะเจาะจง ไม่สามารถกําหนดให้แอตทริบิวต์ใดเพียงแอตทริบิวต์เดียวเป็น Primary key ได้
การใช้ StudentID อย่างเดียว ไม่สามารถระบุแถวได้เพราะนักศึกษา 1001 ลงเรียนหลายวิชา
หากใช้ CourseID อย่างเดียวไม่ unique เพราะหลายคนเรียนวิชาเดียวกัน
หรือใช้ Semester อย่างเดียวไม่ unique เช่นกัน
ดังนั้น เราต้องใช้ StudentID + CourseID + Semester รวมกันเป็น Compound Key เพื่อระบุแถวข้อมูลการลงทะเบียนเรียนของนักศึกษาแต่ละคนในแต่ละวิชาและภาคการศึกษาอย่างไม่ซ้ำกัน
สรุป:
Compound Key = คีย์ที่มีมากกว่า 1 แอตทริบิวต์รวมกัน
ใช้เมื่อแอตทริบิวต์ตัวเดียวไม่สามารถระบุข้อมูลเฉพาะแถวได้
ช่วยทำให้แต่ละแถวในตารางมีความ unique ชัดเจน
2.4 Foreign key
คีย์ชนิดนี้เป็นฟิลด์ที่มีอยู่ใน 2 ตาราง คือในตารางหนึ่งจะทำหน้าที่เป็น Primary key แบบเดี่ยวๆ ส่วนในอีกตารางถ้าไม่ได้เป็นฟิลด์ร่วมใน Compound key ก็จะเป็น Non key จึงเป็นฟิลด์ที่มีข้อมูลซ้ำได้
หน้าที่ของ Foreign key คือทำหน้าที่เชื่อมความสัมพันธ์ระหว่างตาราง 2 ตาราง
ตัวอย่างของตารางนี้ก็ได้แก่ ตาราง Student Details และตาราง Student Marks ดังนี้
จัดทำโดย
นางสาวทิพย์สุคนธ์ พันธ์กิ่ง (ครูกั้ง)
กลุ่มสาระวิทยาศาสตร์และเทคโนโลยี (คอมพิวเตอร์)
โรงเรียนบุญวัฒนา สำนักงานเขตพื้นที่การศึกษามัธยมศึกษานครราชสีมา