ตอนนี้ เราจะต้องมาวิเคราะห์กันต่อครับ ว่าเราจะเก็บอะไรกันบ้างในแต่ละตาราง โดยแต่ละตารางจะต้องมีฟิลด์ต่างๆ ที่ต้องการจะเก็บ

สวัสดีครับทุกท่าน

            วันนี้มาเขียนบทความเรื่องฐานข้อมูล นศ.ให้อ่านกันต่อไปนะครับ จากตอนที่แล้วเรื่อง ระบบฐานข้อมูลนักศึกษา ตอนที่ 2 ว่าด้วย จะเก็บข้อมูลอะไรบ้าง จะพูดว่า เราจะเก็บข้อมูลอะไรกันบ้างนะครับ ก็ได้มีการแบ่งออกคร่าวๆ ไปแล้วนะครับ มาในตอนนี้ เราจะต้องมาวิเคราะห์กันต่อครับ ว่าเราจะเก็บอะไรกันบ้างในแต่ละตาราง โดยแต่ละตารางจะต้องมีฟิลด์ต่างๆ ที่ต้องการจะเก็บ

ยกตัวอย่างเช่น

  • ตารางข้อมูลประวัติส่วนตัวทั่วไป (Table: Student) โดยที่ตารางนี้ เราจะกำหนดคุณสมบัติของตัว นศ. ว่าจะมีอะไรเก็บบ้าง เช่น

  • StudentID  รหัสนักศึกษา กี่ตำแหน่งก็ว่าไป

  • FirstName_Thai ชื่อภาษาไทย

  • LastName_Thai สกุลภาษาไทย

  • FirstName_Eng ชื่อภาษาอังกฤษ

  • LastName_Eng สกุลภาษาอังกฤษ

  • DOB วันเดือนปีเกิด

  • HomeAddress สถานที่อยู่ที่บ้าน

  • Province จังหวัดของภูมิลำเนา

  • PostalCode รหัสไปรษณีย์

  • Gender เพศ

  • .......อื่นๆ ที่จะเก็บโดยจะต้องควบคุมด้วยรหัสนักศึกษาได้

จากตารางชื่อ Student นี้ เราจะมีกุญแจหลัก (Primary Key) เป็นตัวควบคุมตารางนี้ คีย์หลักคืออะไร คีย์หลักเป็นตัวบอกว่า ข้อมูลฟิลด์ต่างๆในตารางนี้ จะต้องขึ้นตรงกับ รหัสนักศึกษานี้เท่านั้น ซึ่งคีย์หลักรหัสนักศึกษานี้ จะใช้ในการนำไปเชื่อมโยงในตารางอื่นๆ ต่อไป

ผมจะยกตัวอย่างตารางถัดไปนะครับ คือ ตารางรายวิชาเรียน (Table: Subject) โดยที่ตารางนี้ จะเก็บรายละเอียดเกี่ยวกับรายวิชาครับ ได้แก่

  • SubjectID รหัสรายวิชา กี่ตัวอักษรก็แล้วแต่ครับ ตามรูปแบบ

  • SubjectName ชื่อรายวิชา

  • SubjectUnit จำนวนหน่วยกิต

  • ...... อื่นๆ ที่จะเก็บโดยจะต้องควบคุมได้ด้วยรหัสวิชา

หากผมถามว่า ระหว่างตัว นศ. กับรายวิชา ควรจะมีความสัมพันธ์กันอย่างไร ทุกคนก็คงตอบเป็นเสียงเดียวกันว่า  สัมพันธ์กันด้วยการลงทะเบียนเรียนวิชานั้นๆ

ดังนั้น เราจะต้องมีอีกตารางเพื่อตอบสนองการลงทะเบียนเรียน (Table: Registration) นั่นคือ

  • StudentID รหัสนักศึกษา (จากตาราง Student)

  • SubjectID รหัสรายวิชา (จากตาราง Subject)

  • Semester/Year ภาคการศึกษาที่/ปีการศึกษา เก็บข้อมูลเช่น 1/2550, 2/2550 อะไรทำนองนี้

  • Grade ผลการเรียนที่ได้

จากตารางนี้จะเป็นว่าจะมีคีย์ในการควบคุมตาราง กี่คีย์ดีครับ นั่อคือ จะต้องสอดคล้องเงื่อนไขต่อไปนี้คือ

  1. นักศึกษาหนึ่งคนสามารถลงทะเบียนได้มากกว่าหนึ่งวิชาในหนึ่งภาคการศึกษา

  2. แต่ละรายวิชาจะต้องเปิดให้นักเรียนลงได้มากว่าหนึ่งคน

  3. และหากนักศึกษาคนนั้นตกในรายวิชานั้นๆ จะสามารถลงเพิ่มได้อีกในภาคการศึกษาอื่นด้วย

จากเงื่อนไขดังกล่าวทำให้เห็นว่า ในตารางการลงทะเบียนจะต้องมีคีย์หลักถึงสามตัวเลย คือ StudentID SubjectID และ Semester/Year เพื่อที่จะตอบสนองให้ข้อมูลเหล่านี้จะถูกเก็บได้ในตาราง

สำหรับตารางอื่นๆ จากบทความก่อน ก็ทำนองเดียวกันครับ จะต้องออกแบบประมาณนี้นะครับ ให้ครบทุกตาราง แล้วจะได้ความสัมพันธ์ของทั้งฐานข้อมูล

จะเห็นว่าในตารางการลงทะเบียนเราจะไม่เก็บชื่อนักเรียนอีก เพราะเมื่อทราบรหัสนศ. แล้วเราก็จะทราบชื่อว่าคนนี้ชื่ออะไร บ้านอยู่ที่ไหน เพราะรหัสนศ.จะคุมระเบียนนั้นๆ ได้ นั่นคือ รหัสนักศึกษาหนึ่งคน สามารถแทนคนนั้นได้คนเดียว ซ้ำกันไม่ได้ในฐานข้อมูล หากซ้ำแสดงว่าผิดพลาดแล้ว ข้อมูลใหม่จะไม่ถูกป้อนเข้าไป เหมือนกับรหัสประจำตัวประชาชน 13 หลักของเราที่จะไม่ซ้ำครับ

ดังนั้น ลองออกแบบตารางอื่นๆ กันดูนะครับ

มีปัญหาเขียนไว้นะครับผม

ขอบคุณมากครับ

เม้ง สมพร ช่วยอารีย์