การสร้างความสัมพันธ์ตารางข้อมูล Ms access

การเริ่มต้นสร้างฐานข้อมูลด้วย ms access สำหรับมือใหม่แล้ว บางครั้งอาจจะประสพปัญหาเกี่ยวกับการสร้างตารางฐานข้อมูล ที่ต้องการได้ เช่น จำนวนของตารางที่จะเก็บข้อมูล และความสัมพันธ์ระหว่างตารางข้อมูล ซึ่งสำหรับมือใหม่แล้ว การทำตามตัวอย่างนับว่าเป็นทางเลือกทีดี เรามาลองดูวิธีการสร้างความสัมพันธ์ระหว่างตารางในฐานข้อมูล access Database
ขอยกตัวอย่างครู, ที่ต้องการตารางข้อมูลในการบันทึกข้อมูลนักเรียน พร้อมๆ กับรายวิชาที่สอน และคะแนนสอบของแต่ละวิชา ในการเก็บข้อมูลทั้งหมดนี้ในตารางข้อมูลเดียวกัน เราสามารถสร้างตารางและตั้งชื่อฟิลด์ของแต่ละข้อมูลดังนี้
Name ชื่อ
Address ที่อยู่
Home Phone โทรศัพท์
Subject วิชา
Grade เกรด

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

Name ชื่อ
Address ที่อยู่
Home Phone โทรศัพท์
Name of Subject 1 ชื่อวิชา 1
Grade for Subject 1 เกรดของวิชา 1
Name of Subject 2 ชื่อวิชา 2
Grade for Subject 2 เกรดวิชา 2
Name of Subject 3 ชื่อวิชา 3
... และ ... ตามลำดับ

แต่ แบบนี้แล้วจะมีรายวิชาจำนวนมากเท่าใดที่เราจะต้องบันทึกสำหรับนักเรียนแต่ละคน และต้องการพื้นที่จำนวนเท่าใด และเราจะรู้ได้อย่างไรว่า แต่ละคอลัมถ์เช่น "History 104"? และวิธีการที่เราจะหาค่าเฉลี่ยของเกรดที่สามารถอยู่ในคอลัมใดคอลัมหนึ่ง เมื่อใดก็ตามที่เราเห็นฟิลด์ข้อมูลที่มีลักษณะซ้ำๆ แบบนี้ แสดงว่าข้อมูลจำเป็นจะต้องมีการแบ่งหรือแยกออกเป็นแต่ละตาราง

การแก้ไขปัญหาที่ดีที่สุด คือการแยกเก็บข้อมูลของเป็น 3 ตาราง กล่าวคือ ตารางที่ 1 สำหรับเก็บข้อมูลนักเรียน students, ตารางที่ 2 สำหรับรายวิชา subjects,และตารางที่ 3 สำหรับ grades. โดยตาราง Students table จะต้องมีหมายเลข ID ที่แตกต่างกัน ของแต่ละคน เพื่อที่คอมพิวเตอร์จะไม่สับสนหากมีนักเรียนที่มีชื่อซ้ำกัน ดังนั้นตารางที่เก็บข้อมูลนักเรียนก็ควรจะมีรายการดังต่อไปนี้

StudentID รหัสประจำตัวนักเรียน
Surname นามสกุลแยกออกจากชื่อเพื่อให้ง่ายในการค้นหา
FirstName ชื่อแรก
Address ที่อยู่แยกออกเป็นส่วนให้ง่ายหากค้นหา
Suburb เมือง ตำบล
Postcode รหัสเมือง
Phone โทรศัพท์

ตารางวิชา Subjects จะมีฟิลด์:

SubjectID รหัสรายวิชา
Subject ชื่อวิชา
Notes ข้อมูลสั้นเกี่ยวกับรายวิชา

ตาราง Grades table จะมีฟิลด์:

StudentID รหัสประจำตัวนักเรียน ที่จะเชื่อมโยงเข้ากับตาราง Students table
SubjectID รหัสวิชาที่จะใช้ในการโยงเข้ากับตาราง Subjects table
Grade คะแนนหรือเกรดของนักเรียนแต่ละคน.

หลังจากสร้างตารางขึ้นมา 3 ตาราง แล้ว เราจะต้องสร้างความสัมพันธ์ระหว่างตาราง สำหรับรุ่น Access 2007 และ 2010, ไปที่ Database Tools ribbon.สำหรับรุ่น Access 95 - 2003, ไปที่เมนู Tools menu โดยตาราง "Grades" จะเชื่อมโยงเข้ากับตารางทั้งสอง

จากนั้นเป็นการกรอกข้อมูลเข้าไปในแต่ละตาราง โดยกรอกรหัสประจำตัวของนักเรียน กรอกข้อมูลรายวิชาที่เปิดสอน และกรอกข้อมูลเกรดนักเรียน

โดยการกรอกข้อมูล เราอาจจะสร้างฟอร์มขึ้นมาช่วยในการทำงาน โดยใช้เครื่องมือ "Form/Subform" wizard: โดยกำหนดให้ "Subjects" เป็นแหล่งข้อมูลหลักของ main form, และ "Grades" เป็นแหล่งข้อมูลของ subform. โดยรายวิชาที่แสดงบนฟอร์มตอนนี้ เราสามารถใส่ข้อมูล StudentID และ Gradeใน subform.

คะแนน grades จะถูกบันทึกเป็นรายวิชา และสามารถเรียกดูได้เป็นตารางของ student. นอกจากนั้นเราสามารถสร้าง form/subform, โดยเมนฟอร์มรับข้อมูลจากตาราง Student table, และ subform รับข้อมูลจากตาราง Grades table. เนื่องจากเราใช้ StudentID ในการกรอกข้อมูล gradesในฟอร์มที่กล่าวมาแล้ว การเข้าถึงการลิงค์ข้อมูลไปยังหน้าฟอร์มหลัก แบบอัตโนมัติจะแสดงข้อมูล รายวิชา และคะแนนของนักเรียนแต่ละคนบน main form.

ทางเทคนิคแล้ว ,การแยกข้อมูลออกเป็นตารางๆ และเชื่อมโยงข้อมูลเข้าด้วยกันแบบนี้เรียกว่าการ normalization
หมายเหตุ บทความนี้สำหรับมือใหม่หรือผู้สนใจศึกษาการสร้างฐานข้อมูลด้วย MS Access สำหรับมือเก่าหรือท่านที่เซียนๆ แล้วสามารถข้ามไปอ่านเรื่องอื่นๆ เลยครับ สำหรับมือใหม่เท่านั้น ต้องอ่านและลองทำตามดูนะครับ และขอบอกว่าความพยายามอยู่ที่ไหน ความสำเร็จอยู่ที่นั้นครับ และควรเรียนรู้จากง่ายๆ ไปหายากครับ หรือ Simple to complex ครับ ขอให้โชคดี สามารถศึกษาและเข้าใจได้จากบทความครับ หากมีคำถามหรือข้อสงสัยประการใด ก็สามารถ Post ข้อความไว้ได้ตลอดเวลาครับ ยินดีตอบทุกคำถามครับ
Credit : http://allenbrowne.com/casu-06.html

Post a Comment