พื้นฐานการออกแบบฐานข้อมูล

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

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

ในบทความนี้


คำศัพท์เกี่ยวกับฐานข้อมูลที่ควรรู้

Microsoft Office Access 2007 จะจัดระเบียบข้อมูลของคุณลงใน ตาราง ซึ่งเป็นรายการของแถวและคอลัมน์ที่มีลักษณะคล้ายกับกระดาษบันทึกของนักบัญชี หรือแผ่นงาน Microsoft Office Excel 2007 ในฐานข้อมูลอย่างง่ายนั้น คุณอาจมีตารางเพียงหนึ่งตาราง แต่สำหรับฐานข้อมูลส่วนใหญ่ คุณอาจต้องการตารางมากกว่าหนึ่งตาราง ตัวอย่างเช่น คุณอาจมีตารางหนึ่งตารางที่ใช้เก็บข้อมูลเกี่ยวกับผลิตภัณฑ์ อีกหนึ่งตารางใช้เก็บข้อมูลเกี่ยวกับใบสั่งซื้อ และอีกหนึ่งตารางสำหรับเก็บข้อมูลเกี่ยวกับลูกค้า

รูปแสดงตารางสามตารางในแผ่นข้อมูล

นอกจากนี้ แถวแต่ละแถวจะถูกเรียกว่า ระเบียน และแต่ละคอลัมน์ จะถูกเรียกว่า เขตข้อมูล ระเบียนเป็นวิธีการรวมข้อมูลเกี่ยวกับสิ่งใดสิ่งหนึ่งไว้อย่างสอดคล้องกันและมีความหมาย เขตข้อมูลคือรายการเดี่ยวของข้อมูล นั่นคือเป็นชนิดรายการที่ปรากฏในทุกๆ ระเบียน เช่น ในตารางผลิตภัณฑ์ แต่ละแถวหรือแต่ละระเบียนจะมีข้อมูลของผลิตภัณฑ์หนึ่งอย่าง แต่ละคอลัมน์หรือแต่ละเขตข้อมูลจะมีข้อมูลชนิดหนึ่งเกี่ยวกับผลิตภัณฑ์ดังกล่าว เช่น ชื่อหรือราคาของผลิตภัณฑ์นั้นๆ

ด้านบนของหน้า ด้านบนของหน้า

การออกแบบฐานข้อมูลที่ดีคืออะไร

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

ดังนั้น การออกแบบฐานข้อมูลที่ดีคือ

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

ด้านบนของหน้า ด้านบนของหน้า

กระบวนการออกแบบ

กระบวนการออกแบบประกอบด้วยขั้นตอนต่อไปนี้

  • กำหนดวัตถุประสงค์ของฐานข้อมูลของคุณ    

การทำเช่นนี้จะเป็นการเตรียมพร้อมสำหรับขั้นตอนในขั้นต่อๆ ไป

  • ค้นหาและจัดระเบียบข้อมูลที่ต้องการ     

รวบรวมข้อมูลทุกชนิดที่คุณอาจต้องการบันทึกลงในฐานข้อมูล เช่น ชื่อผลิตภัณฑ์และหมายเลขใบสั่งซื้อ

  • แบ่งข้อมูลลงในตารางต่างๆ    

แบ่งรายการข้อมูลของคุณออกเป็นกลุ่มหรือหัวเรื่องหลักๆ เช่น ผลิตภัณฑ์ หรือใบสั่งซื้อ จากนั้นแต่ละหัวเรื่องจะถูกนำมาทำเป็นตาราง

  • เปลี่ยนรายการของข้อมูลให้เป็นคอลัมน์ต่างๆ    

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

  • ระบุคีย์หลัก    

เลือกคีย์หลักของตารางแต่ละตาราง คีย์หลักคือคอลัมน์ที่ใช้เพื่อระบุแต่ละแถวแบบไม่ซ้ำกัน ตัวอย่างเช่น หมายเลขผลิตภัณฑ์ หรือ ID ใบสั่งซื้อ

  • กำหนดความสัมพันธ์ของตาราง    

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

  • การปรับการออกแบบให้ดียิ่งขึ้น    

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

  • การใช้กฎ Normalization    

ใช้กฎ Normalization ข้อมูลเพื่อดูว่าตารางของคุณมีโครงสร้างที่ถูกต้องหรือไม่ ปรับเปลี่ยนการออกแบบได้ถ้าจำเป็น

ด้านบนของหน้า ด้านบนของหน้า

การกำหนดวัตถุประสงค์ของฐานข้อมูลของคุณ

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

ด้านบนของหน้า ด้านบนของหน้า

การค้นหาและการจัดระเบียบข้อมูลที่ต้องการ

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

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

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

บุคคลกำลังจินตนาการเกี่ยวกับรายงานสินค้าคงคลังของผลิตภัณฑ์

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

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

เป็นเรื่องสมเหตุสมผลที่จะสร้างแบบตัวอย่างของรายงานหรือรายการผลลัพธ์ แล้วพิจารณาว่ารายการใดที่คุณต้องการสร้างเป็นรายงาน ตัวอย่างเช่น เมื่อคุณตรวจสอบฟอร์มจดหมาย อาจทำให้นึกอะไรได้หลายอย่าง ตัวอย่างเช่น ถ้าคุณต้องการใส่คำทักทายที่เหมาะสม คุณต้องสร้างรายการคำทักทายด้วยสตริงที่เริ่มคำขึ้นต้นจดหมายว่า "คุณ" หรือ "Mr." "Mrs." หรือ "Ms." และคุณอาจเริ่มต้นจดหมายแบบทั่วไปด้วย “เรียน คุณสิทธิชัย” แทนที่จะเป็น “เรียน คุณสิทธิชัย ตันติแสงอรุณ" หรือ "Dear Mr. Smith” แทนที่จะเป็น “Dear Mr. Sylvester Smith” ดังนี้คุณจึงรู้ว่าควรเก็บชื่อกับนามสกุลไว้แยกกัน

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

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

หลังจากรวบรวมข้อมูลนี้แล้ว คุณก็จะพร้อมสำหรับขั้นตอนต่อไป

ด้านบนของหน้า ด้านบนของหน้า

การแบ่งข้อมูลลงในตารางต่างๆ

เมื่อต้องการแบ่งข้อมูลลงในตาราง ให้เลือกข้อมูลเฉพาะตัวหรือเรื่องสำคัญ ตัวอย่างเช่น หลังจากค้นหาและจัดระเบียบข้อมูลสำหรับฐานข้อมูลการขายสินค้าแล้ว รายการเบื้องต้นอาจเป็นดังนี้

รายการข้อมูลที่เขียนด้วยลายมือถูกจัดกลุ่มตามหัวเรื่อง

ข้อมูลเฉพาะตัวที่สำคัญซึ่งแสดงในที่นี้ได้แก่ ผลิตภัณฑ์ ผู้จำหน่าย ลูกค้า และใบสั่งซื้อ ดังนั้น จึงสมควรเริ่มต้นด้วยตาราง 4 ตาราง คือ ตารางหนึ่งสำหรับข้อเท็จจริงเกี่ยวกับผลิตภัณฑ์ ตารางหนึ่งสำหรับข้อเท็จจริงเกี่ยวกับผู้จำหน่าย ตารางหนึ่งสำหรับข้อเท็จจริงเกี่ยวกับลูกค้า และตารางหนึ่งสำหรับใบสั่งซื้อ ถึงแม้ว่าทั้งหมดนี้จะไม่ใช่รายการที่ครบถ้วน แต่ก็เป็นจุดเริ่มต้นที่ดี คุณสามารถปรับปรุงรายการนี้ต่อจนกว่าคุณจะมีการออกแบบที่ทำงานได้ดี

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

รูปแสดงตารางที่มีทั้งข้อมูลเกี่ยวกับผลิตภัณฑ์และผู้จำหน่ายผลิตภัณฑ์

ในกรณีนี้ แต่ละแถวมีข้อมูลเกี่ยวกับผลิตภัณฑ์และผู้จำหน่ายผลิตภัณฑ์นั้น เนื่องจากคุณสามารถมีผลิตภัณฑ์หลายอย่างจากผู้จำหน่ายรายเดียวกัน ชื่อและที่อยู่ผู้จำหน่ายจึงปรากฏซ้ำหลายครั้ง ทำให้เปลืองเนื้อที่ดิสก์ การบันทึกข้อมูลผู้จำหน่ายเพียงครั้งเดียวในตารางผู้จำหน่าย ซึ่งแยกต่างหากแล้วเชื่อมโยงมายังตารางผลิตภัณฑ์ จึงเป็นวิธีแก้ปัญหาที่ดีกว่า

ปัญหาที่สองของการออกแบบนี้เกิดขึ้นเมื่อคุณต้องการปรับเปลี่ยนข้อมูลเกี่ยวกับผู้จำหน่าย ตัวอย่างเช่น สมมติว่าคุณต้องการเปลี่ยนที่อยู่ของผู้จำหน่าย เนื่องจากที่อยู่ปรากฏในหลายแห่ง คุณอาจเปลี่ยนที่อยู่ในรายการหนึ่งแล้วลืมเปลี่ยนอีกรายการโดยไม่ได้ตั้งใจ การบันทึกที่อยู่ของผู้จำหน่ายไว้ในที่เดียวจะแก้ปัญหานี้

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

สุดท้าย สมมติว่ามีเพียงผลิตภัณฑ์เดียวที่ Coho Winery จำหน่าย และคุณต้องการลบผลิตภัณฑ์นั้นแต่ต้องการเก็บข้อมูลชื่อผู้จำหน่ายและที่อยู่ไว้ คุณจะลบระเบียนผลิตภัณฑ์โดยไม่สูญเสียข้อมูลผู้จำหน่ายได้อย่างไร คำตอบคือทำไม่ได้ เพราะว่าระเบียนแต่ละระเบียนมีข้อเท็จจริงเกี่ยวกับผลิตภัณฑ์และเกี่ยวกับผู้จำหน่ายด้วย คุณไม่สามารถลบอย่างหนึ่งโดยไม่ลบอีกอย่างได้ ถ้าต้องการเก็บข้อเท็จจริงเหล่านี้แยกจากกัน คุณต้องแบ่งตารางออกเป็นสองตาราง คือ ตารางหนึ่งสำหรับข้อมูลผลิตภัณฑ์ และอีกตารางสำหรับข้อมูลผู้จำหน่าย การลบระเบียนของผลิตภัณฑ์ควรลบแค่ข้อเท็จจริงเกี่ยวกับผลิตภัณฑ์เท่านั้น ไม่ใช่ข้อเท็จจริงเกี่ยวกับผู้จำหน่าย

เมื่อคุณได้เลือกเรื่องที่จะแทนด้วยตารางแล้ว คอลัมน์ในตารางนั้นควรเก็บเฉพาะข้อเท็จจริงเกี่ยวกับเรื่องนั้นเท่านั้น ตัวอย่างเช่น ตารางผลิตภัณฑ์ควรเก็บเฉพาะข้อเท็จจริงเกี่ยวกับผลิตภัณฑ์ เนื่องจากที่อยู่ของผู้จำหน่ายเป็นข้อเท็จจริงเกี่ยวกับผู้จำหน่าย ไม่ใช่ข้อเท็จจริงเกี่ยวกับผลิตภัณฑ์ ดังนั้นต้องอยู่ในตารางผู้จำหน่าย

ด้านบนของหน้า ด้านบนของหน้า

การเปลี่ยนรายการข้อมูลให้เป็นคอลัมน์

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

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

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

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

  • ไม่รวมข้อมูลจากการคำนวณ    

ในกรณีส่วนใหญ่ คุณไม่ควรเก็บผลลัพธ์ของการคำนวณไว้ในตาราง แต่คุณสามารถให้ Access ทำการคำนวณได้เมื่อคุณต้องการดูผลลัพธ์ ตัวอย่างเช่น สมมติว่ามีรายงานผลิตภัณฑ์ที่สั่งซื้อซึ่งแสดงผลรวมย่อยของจำนวนที่สั่งซื้อสำหรับผลิตภัณฑ์แต่ละประเภทในฐานข้อมูล อย่างไรก็ตาม จะไม่มีคอลัมน์ผลรวมย่อยจำนวนที่สั่งซื้ออยู่ในตาราง แต่ตารางผลิตภัณฑ์จะมีคอลัมน์จำนวนที่สั่งซื้อซึ่งเก็บข้อมูลจำนวนหน่วยของแต่ละผลิตภัณฑ์ในใบสั่งซื้อไว้ Access จะใช้ข้อมูลดังกล่าวในการคำนวณผลรวมย่อยเมื่อคุณพิมพ์รายงานในแต่ละครั้ง และผลรวมย่อยเองไม่ควรจะถูกเก็บอยู่ในตาราง

  • เก็บข้อมูลในส่วนตรรกะที่เล็กที่สุด    

คุณอาจอยากมีเขตข้อมูลหนึ่งเขตสำหรับชื่อเต็ม หรือชื่อผลิตภัณฑ์ควบคู่ไปกับรายละเอียดผลิตภัณฑ์ ถ้าคุณใส่ข้อมูลมากกว่าหนึ่งชนิดลงในลงในเขตข้อมูลหนึ่งเขต จะทำให้ยากต่อการดึงข้อมูลแต่ละชนิดออกมาในภายหลัง ให้ลองแตกย่อยข้อมูลลงเป็นหน่วยเชิงตรรกะ เช่น สร้างเขตข้อมูลเฉพาะสำหรับชื่อและอีกเขตหนึ่งสำหรับนามสกุล หรือสำหรับชื่อผลิตภัณฑ์ ประเภท และคำอธิบาย

ชุดของรายการข้อมูลในระหว่างกระบวนการออกแบบ

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

ด้านบนของหน้า ด้านบนของหน้า

การระบุคีย์หลัก

ในแต่ละตารางควรจะมีคอลัมน์หรือชุดของคอลัมน์ที่ระบุแต่ละแถวที่เก็บอยู่ในตารางโดยไม่ซ้ำกัน ซึ่งมักจะเป็นหมายเลขการระบุที่ไม่ซ้ำกัน เช่น หมายเลข ID พนักงาน หรือหมายเลขผลิตภัณฑ์ ในเชิงศัพท์เกี่ยวกับฐานข้อมูลนั้น ข้อมูลนี้จะมีชื่อเรียกว่า คีย์หลัก ของตาราง ซึ่ง Access จะใช้เขตข้อมูลคีย์หลักในการเชื่อมโยงข้อมูลจากตารางหลายตารางอย่างรวดเร็ว แล้วนำข้อมูลเหล่านี้มารวมกันให้คุณ

ถ้าคุณมีตัวระบุที่ไม่ซ้ำกันสำหรับตารางนั้นแล้ว เช่น หมายเลขผลิตภัณฑ์ซึ่งระบุผลิตภัณฑ์ในแค็ตตาล็อกของคุณโดยไม่ซ้ำกัน คุณสามารถใช้ตัวระบุนั้นเป็นคีย์หลักของตารางได้ แต่มีเงื่อนไขว่าค่าในคอลัมน์นี้ต้องไม่เหมือนกันในทุกระเบียนเสมอ คุณไม่สามารถมีค่าซ้ำกันในคีย์หลักได้ ตัวอย่างเช่น ไม่ใช้ชื่อคนเป็นคีย์หลักเนื่องจากชื่ออาจซ้ำกันได้ เป็นเรื่องง่ายที่คุณจะมีคนสองคนซึ่งชื่อเหมือนกันในตารางเดียวกัน

คีย์หลักต้องมีค่าเสมอ ถ้าค่าของคอลัมน์นั้นไม่มีหรือไม่ทราบค่า (ค่าที่หายไป) จะไม่สามารถใช้เป็นส่วนหนึ่งของคีย์หลักได้

คุณควรเลือกคีย์หลักที่ค่าจะไม่เปลี่ยน ในฐานข้อมูลที่ใช้มากกว่าหนึ่งตาราง คีย์หลักของตารางสามารถใช้เป็นการอ้างอิงในตารางอื่นได้ ถ้าคีย์หลักเปลี่ยนแปลง การเปลี่ยนแปลงนั้นจะมีผลกับทุกแห่งที่อ้างอิงคีย์นั้น การใช้คีย์หลักที่ไม่เปลี่ยนแปลงจะลดโอกาสที่คีย์หลักอาจไม่เปลี่ยนให้ตรงกันกับตารางอื่นที่อ้างถึงคีย์หลักนั้น

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

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


รูปแสดงตารางผลิตภัณฑ์ที่มีเขตข้อมูลคีย์หลัก

บรรยายภาพ 1 มีอยู่บ่อยครั้งที่คอลัมน์ที่ตั้งค่าเป็นชนิดข้อมูล AutoNumber มักจะสามารถใช้เป็นคีย์หลักที่ดีได้ เนื่องจากไม่มีหมายเลขผลิตภัณฑ์ที่ตรงกันสองรายการ

ในบางกรณี คุณอาจต้องการใช้เขตข้อมูลอย่างน้อยสองเขตข้อมูลร่วมกันเป็นคีย์หลักของตาราง ตัวอย่างเช่น ตารางรายละเอียดใบสั่งซื้อที่เก็บรายการใบสั่งซื้อควรใช้สองคอลัมน์เป็นคีย์หลัก ได้แก่ ID ใบสั่งซื้อและหมายเลขผลิตภัณฑ์ เมื่อมีการใช้คีย์หลักมากกว่าหนึ่งคอลัมน์ จะเรียกว่า คีย์ผสม

สำหรับฐานข้อมูลยอดขายผลิตภัณฑ์ คุณสามารถสร้างคอลัมน์ AutoNumber สำหรับแต่ละตารางเพื่อใช้เป็นคีย์หลักได้ ได้แก่ หมายเลขผลิตภัณฑ์สำหรับตารางผลิตภัณฑ์ ID ใบสั่งซื้อสำหรับตารางใบสั่งซื้อ ID ประจำตัวลูกค้าสำหรับตารางลูกค้า และ ID ผู้จำหน่ายสำหรับตารางผู้จำหน่าย

รูปแสดงรายการข้อมูลต่างๆ ในระหว่างกระบวนการออกแบบ

ด้านบนของหน้า ด้านบนของหน้า

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

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


ฟอร์มใบสั่งซื้อ

บรรยายภาพ 1 ข้อมูลในฟอร์มนี้มาจากตารางลูกค้า...
บรรยายภาพ 2 ...ตารางพนักงาน...
บรรยายภาพ 3 ...ตารางใบสั่งซื้อ...
บรรยายภาพ 4 ...ตาราง ผลิตภัณฑ์...
บรรยายภาพ 5 ...และตารางรายละเอียดใบสั่งซื้อ

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

ด้านบนของหน้า ด้านบนของหน้า

การสร้างความสัมพันธ์แบบหนึ่ง-ต่อ-กลุ่ม

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

กรอบความคิดแบบหนึ่ง-ต่อ-กลุ่ม

เมื่อต้องการแสดงความสัมพันธ์แบบหนึ่ง-ต่อ-กลุ่มในการออกแบบฐานข้อมูลของคุณ ให้ใช้คีย์หลักที่ด้าน "หนึ่ง" ของความสัมพันธ์ แล้วเพิ่มคีย์หลักนั้นเข้าไปเป็นอีกคอลัมน์หรือหลายคอลัมน์ในตารางของด้าน "กลุ่ม" ของความสัมพันธ์ ตัวอย่างเช่น ในกรณีนี้ คุณเพิ่มคอลัมน์ ID ผู้จำหน่ายจากตารางผู้จำหน่ายลงในตารางผลิตภัณฑ์ จากนั้น Access จึงสามารถใช้ ID ผู้จำหน่ายในตารางผลิตภัณฑ์ระบุตำแหน่งของผู้จำหน่ายที่ถูกต้องของผลิตภัณฑ์แต่ละอย่าง

คอลัมน์ ID ผู้จำหน่ายในตารางผลิตภัณฑ์เรียกว่า Foreign Key ซึ่งเป็นคีย์หลักของอีกตารางหนึ่ง คอลัมน์ ID ผู้จำหน่ายในตารางผลิตภัณฑ์เป็น Foreign Key เนื่องจากคอลัมน์นี้เป็นคีย์หลักในตารางผู้จำหน่ายด้วย

ชุดของรายการข้อมูลในระหว่างกระบวนการออกแบบ

คุณรวมตารางที่สัมพันธ์กันด้วยการจับคู่ระหว่างคีย์หลักกับ Foreign Key ถ้าคุณไม่แน่ใจว่าตารางใดควรใช้คอลัมน์ร่วมกัน การระบุความสัมพันธ์แบบหนึ่ง-ต่อ-กลุ่มจะทำให้แน่ใจว่าตารางสองตารางที่เกี่ยวข้องกันนั้นต้องใช้คอลัมน์ร่วมกันจริง

ด้านบนของหน้า ด้านบนของหน้า

การสร้างความสัมพันธ์แบบกลุ่ม-ต่อ-กลุ่ม

ให้พิจารณาความสัมพันธ์ระหว่างตารางผลิตภัณฑ์และตารางใบสั่งซื้อ

ใบสั่งซื้อหนึ่งใบอาจมีผลิตภัณฑ์สินค้าได้มากกว่าหนึ่งรายการ ในทางตรงกันข้าม ผลิตภัณฑ์สินค้ารายการหนึ่งอาจปรากฏในใบสั่งซื้อได้หลายใบ ดังนั้นแต่ละระเบียนในตารางใบสั่งซื้อจึงอาจมีหลายระเบียนในตารางผลิตภัณฑ์ และในแต่ละระเบียนของตารางผลิตภัณฑ์ก็อาจมีหลายระเบียนในตารางใบสั่งซื้อ ความสัมพันธ์เช่นนี้เรียกว่าความสัมพันธ์แบบกลุ่ม-ต่อ-กลุ่ม เนื่องจากผลิตภัณฑ์หนึ่งอาจอยู่ในใบสั่งซื้อหลายใบ และใบสั่งซื้อหนึ่งก็อาจมีผลิตภัณฑ์สินค้าหลายรายการ ให้สังเกตว่าเมื่อต้องการตรวจหาความสัมพันธ์แบบกลุ่ม-ต่อ-กลุ่มในตารางของคุณ สิ่งสำคัญคือคุณต้องพิจารณาความสัมพันธ์ของทั้งสองด้าน

หัวเรื่องของสองตาราง ได้แก่ ใบสั่งซื้อและผลิตภัณฑ์ มีความสัมพันธ์แบบกลุ่ม-ต่อ-กลุ่ม ซึ่งเป็นปัญหา เมื่อต้องการที่จะเข้าใจปัญหาดังกล่าว ให้ลองนึกภาพว่าจะเกิดอะไรขึ้นถ้าคุณพยายามสร้างความสัมพันธ์ระหว่างสองตารางด้วยการเพิ่มเขตข้อมูลหมายเลขผลิตภัณฑ์ลงในตารางใบสั่งซื้อ เมื่อต้องการมีผลิตภัณฑ์มากกว่าหนึ่งรายการต่อใบสั่งซื้อหนึ่งใบ คุณต้องใช้ระเบียนในตารางใบสั่งซื้อมากกว่าหนึ่งระเบียนต่อใบสั่งซื้อหนึ่งใบ คุณต้องทำซ้ำแถวข้อมูลการสั่งซื้อแต่ละแถวที่สัมพันธ์กับใบสั่งซื้อใบเดียว ผลที่ได้คือการออกแบบที่ขาดประสิทธิภาพซึ่งจะนำไปสู่ข้อมูลที่ไม่ถูกต้อง คุณจะพบปัญหาเดิมถ้าเอาเขตข้อมูล ID ใบสั่งซื้อไปใส่ในตารางผลิตภัณฑ์ เมื่อตารางผลิตภัณฑ์ของคุณมีระเบียนสำหรับผลิตภัณฑ์แต่ละอย่างมากกว่าหนึ่งระเบียน คุณจะแก้ปัญหานี้อย่างไร

คำตอบคือการสร้างตารางที่สามขึ้น ซึ่งมักจะเรียกว่าตารางเชื่อมต่อ (junction table) ซึ่งจะแตกความสัมพันธ์แบบกลุ่ม-ต่อ-กลุ่มลงเป็นความสัมพันธ์แบบหนึ่ง-ต่อ-กลุ่มจำนวนสองความสัมพันธ์ ให้คุณแทรกคีย์หลักจากแต่ละตารางลงในตารางที่สาม ผลที่ได้คือตารางที่สามจะบันทึกแต่ละรายการหรืออินสแตนซ์ของความสัมพันธ์ไว้

ความสัมพันธ์แบบกลุ่ม-ต่อ-กลุ่ม

ระเบียนในตารางรายละเอียดใบสั่งซื้อแต่ละระเบียนจะแทนรายการหนึ่งบรรทัดของใบสั่งซื้อ คีย์หลักของตารางรายละเอียดใบสั่งซื้อประกอบด้วยเขตข้อมูลสองเขตคือ Foreign Key จากตารางใบสั่งซื้อและตารางผลิตภัณฑ์ การใช้เขตข้อมูล ID ใบสั่งซื้ออย่างเดียวไม่เพียงพอที่จะเป็นคีย์หลักของตารางนี้ เนื่องจากใบสั่งซื้อหนึ่งใบสามารถมีรายการได้หลายบรรทัด ID ใบสั่งซื้อจะซ้ำกันทุกบรรทัดของใบสั่งซื้อ ดังนั้นเขตข้อมูลนี้จึงมีค่าซ้ำกัน การใช้เขตข้อมูล หมายเลขผลิตภัณฑ์อย่างเดียวก็ไม่เพียงพอเช่นกัน เนื่องจากผลิตภัณฑ์สินค้าหนึ่งรายการอาจปรากฏในใบสั่งซื้อหลายต่อหลายใบ แต่ถ้าใช้พร้อมกันทั้งสองเขตข้อมูลก็จะให้ค่าที่ไม่ซ้ำกันสำหรับแต่ละระเบียน

ในฐานข้อมูลยอดขายผลิตภัณฑ์นั้น ตารางใบสั่งซื้อและตารางผลิตภัณฑ์จะไม่สัมพันธ์กันและกันโดยตรง แต่จะสัมพันธ์กันโดยอ้อมผ่านตารางรายละเอียดใบสั่งซื้อ ความสัมพันธ์แบบกลุ่ม-ต่อ-กลุ่มระหว่างใบสั่งซื้อและผลิตภัณฑ์จะแสดงอยู่ในฐานข้อมูลโดยใช้ความสัมพันธ์แบบหนึ่ง-ต่อ-กลุ่ม จำนวนสองความสัมพันธ์คือ

  • ตารางใบสั่งซื้อและตารางรายละเอียดใบสั่งซื้อมีความสัมพันธ์แบบหนึ่ง-ต่อ-กลุ่ม ใบสั่งซื้อแต่ละใบสามารถมีรายการบรรทัดได้มากกว่าหนึ่งรายการ แต่รายการบรรทัดแต่ละรายการจะเชื่อมต่อกับใบสั่งซื้อเพียงหนึ่งใบเท่านั้น
  • ตารางผลิตภัณฑ์และตารางรายละเอียดใบสั่งซื้อมีความสัมพันธ์แบบหนึ่ง-ต่อ-กลุ่ม ผลิตภัณฑ์แต่ละรายการสามารถมีบรรทัดรายการหลายบรรทัดที่สัมพันธ์อยู่ด้วยกัน แต่บรรทัดของรายการแต่ละบรรทัดจะอ้างอิงถึงผลิตภัณฑ์เพียงหนึ่งรายการเท่านั้น

จากตารางรายละเอียดใบสั่งซื้อ คุณสามารถกำหนดให้มีผลิตภัณฑ์ทั้งหมดในใบสั่งซื้อเฉพาะใบ นอกจากนี้คุณยังสามารถกำหนดให้ใบสั่งซื้อทุกใบมีผลิตภัณฑ์ใดผลิตภัณ์หนึ่งโดยเฉพาะได้

หลังจากรวมตารางรายละเอียดใบสั่งซื้อแล้ว รายการของตารางและเขตข้อมูลอาจมีลักษณะดังต่อไปนี้

ชุดของรายการข้อมูลในระหว่างกระบวนการออกแบบ

ด้านบนของหน้า ด้านบนของหน้า

การสร้างความสัมพันธ์แบบหนึ่ง-ต่อ-หนึ่ง

ความสัมพันธ์อีกชนิดหนึ่งคือความสัมพันธ์แบบหนึ่ง-ต่อ-หนึ่ง เช่น สมมติว่าคุณจำเป็นต้องบันทึกข้อมูลเกี่ยวกับผลิตภัณฑ์อาหารเสริมพิเศษชนิดหนึ่งที่คุณจะใช้น้อยครั้งมาก หรือจะนำไปใช้กับผลิตภัณฑ์เพียงไม่กี่รายการเท่านั้น เนื่องจากคุณไม่จำเป็นต้องใช้ข้อมูลดังกล่าวบ่อยครั้ง และเนื่องจากการเก็บบันทึกข้อมูลในตารางผลิตภัณฑ์อาจส่งผลให้เกิดพื้นที่ว่างในผลิตภัณฑ์อื่นๆ ที่ไม่เกี่ยวข้องกับผลิตภัณฑ์นี้ ให้คุณใส่ผลิตภัณฑ์ดังกล่าวลงในตารางอื่นแยกต่างหาก และเช่นเดียวกันกับตารางผลิตภัณฑ์ ให้คุณใช้หมายเลขผลิตภัณฑ์เป็นคีย์หลัก ความสัมพันธ์ระหว่างตารางเสริมนี้และตารางผลิตภัณฑ์จะเป็นความสัมพันธ์แบบหนึ่ง-ต่อ-หนึ่ง สำหรับแต่ละระเบียนในตารางผลิตภัณฑ์นั้น จะมีระเบียนที่ตรงกันอยู่หนึ่งระเบียนในตารางเสริม เมื่อคุณระบุความสัมพันธ์ดังกล่าว ตารางทั้งสองตารางจะต้องมีเขตข้อมูลที่ใช้ร่วมกัน

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

  • ถ้าตารางทั้งสองตารางนี้มีหัวเรื่องเดียวกัน คุณอาจตั้งค่าความสัมพันธ์ด้วยการใช้คีย์หลักเดียวกันในทั้งสองตาราง
  • ถ้าตารางสองตารางมีหัวเรื่องที่ต่างกันและมีคีย์หลักที่ต่างกัน ให้เลือกตารางหนึ่งตาราง (ตารางใดก็ได้) และแทรกคีย์หลักของตารางนั้นลงในอีกตารางหนึ่งเป็น Foreign Key

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

ด้านบนของหน้า ด้านบนของหน้า

การปรับการออกแบบให้ดียิ่งขึ้น

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

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

ขณะที่คุณลองใช้ฐานข้อมูลในขั้นเริ่มต้น คุณอาจพบสิ่งที่ต้องปรับปรุง สิ่งที่ควรตรวจสอบไม่กี่อย่างมีดังนี้

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

การปรับปรุงตารางผลิตภัณฑ์

สมมติว่าผลิตภัณฑ์แต่ละชนิดในฐานข้อมูลการขายผลิตภัณฑ์อยู่ในประเภททั่วไป เช่น เครื่องดื่ม เครื่องเทศ หรืออาหารทะเล ตารางผลิตภัณฑ์ควรจะมีเขตข้อมูลที่แสดงประเภทของผลิตภัณฑ์แต่ละชนิดด้วย

สมมติว่าหลังจากที่ตรวจสอบและปรับปรุงการออกแบบฐานข้อมูลแล้ว คุณตัดสินใจเก็บคำอธิบายประเภทผลิตภัณฑ์พร้อมกับชื่อ ถ้าคุณเพิ่มเขตข้อมูล 'คำอธิบายประเภท' ลงในตารางผลิตภัณฑ์ คุณต้องอธิบายซ้ำแต่ละประเภทสำหรับแต่ละผลิตภัณฑ์ที่อยู่ในประเภทเดียวกัน ซึ่งไม่ใช่วิธีแก้ปัญหาที่ดีนัก

ทางแก้ปัญหาที่ดีกว่าคือให้ "ประเภท" เป็นหัวเรื่องใหม่ในฐานข้อมูลที่จะติดตามโดยมีตารางและคีย์หลักเป็นของตัวเอง จากนั้นคุณสามารถเพิ่มคีย์หลักจากตารางประเภทให้เป็น Foreign Key ในตารางผลิตภัณฑ์ได้

ตารางประเภทและตารางผลิตภัณฑ์มีความสัมพันธ์แบบหนึ่ง-ต่อ-กลุ่ม นั่นคือ ประเภทหนึ่งอาจมีผลิตภัณฑ์มากกว่าหนึ่งอย่าง แต่ผลิตภัณฑ์หนึ่งจะอยู่ในประเภทเดียวเท่านั้น

เมื่อคุณตรวจทานโครงสร้างตารางของคุณ ให้มองหากลุ่มที่ซ้ำกัน ตัวอย่างเช่น พิจารณาตารางซึ่งมีคอลัมน์ต่อไปนี้

  • หมายเลขผลิตภัณฑ์
  • ชื่อ
  • หมายเลขผลิตภัณฑ์1
  • ชื่อ1
  • หมายเลขผลิตภัณฑ์2
  • ชื่อ2
  • หมายเลขผลิตภัณฑ์3
  • ชื่อ3

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

การออกแบบดังกล่าวมีข้อผิดพลาดหลายแห่ง ประการแรก คุณต้องระบุจำนวนผลิตภัณฑ์ที่มีได้มากสุด ทันทีที่คุณมีผลิตภัณฑ์เกินจำนวนที่จำกัดไว้ คุณต้องเพิ่มกลุ่มของคอลัมน์ใหม่ลงในโครงสร้างตาราง ซึ่งเป็นงานหลักของผู้ดูแลระบบ

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

เมื่อใดก็ตามที่คุณเห็นกลุ่มซ้ำ ให้ตรวจทานการออกแบบอย่างละเอียดโดยเน้นที่การแบ่งตารางออกเป็นสองตาราง ในตัวอย่างข้างต้น จะเป็นการดีกว่าถ้าใช้สองตาราง ตารางหนึ่งสำหรับผู้จำหน่ายและอีกตารางสำหรับผลิตภัณฑ์ แล้วเชื่อมโยงกันด้วย ID ผู้จำหน่าย

ด้านบนของหน้า ด้านบนของหน้า

การใช้กฎ Normalization

คุณสามารถใช้กฎ Normalization ข้อมูล (บางครั้งเรียกแค่ว่า กฎ Normalization) ในขั้นต่อไปของการออกแบบ คุณใช้กฎเหล่านี้เพื่อดูว่าตารางของคุณมีโครงสร้างที่ถูกต้องหรือไม่ กระบวนการใช้กฎเหล่านี้กับการออกแบบฐานข้อมูลเรียกว่าการ Normalizing ฐานข้อมูล หรือ Normalization

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

คุณใช้กฎ Normalization ไปตามลำดับในแต่ละขั้นเพื่อตรวจสอบให้แน่ใจว่าการออกแบบของคุณตรงกับสิ่งที่รู้จักกันว่าเป็น "รูปแบบปกติ" โดยรูปแบบปกติที่ยอมรับกันอย่างกว้างขวางมีอยู่ 5 แบบ นั่นคือรูปแบบปกติที่หนึ่งจนถึงรูปแบบปกติที่ห้า บทความนี้ครอบคลุมรูปแบบปกติในสามรูปแบบแรก เนื่องจากเป็นสิ่งที่ต้องมีสำหรับการออกแบบฐานข้อมูลส่วนมาก

รูปแบบปกติที่หนึ่ง

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

รูปแบบปกติที่สอง

รูปแบบปกติที่สองบังคับว่าคอลัมน์แต่ละคอลัมน์ที่ไม่ใช่คีย์ต้องขึ้นกับคีย์หลักทั้งหมด ไม่ใช่เพียงบางส่วนของคีย์หลัก กฎนี้ใช้เมื่อคุณมีคีย์หลักซึ่งประกอบด้วยคอลัมน์มากกว่าหนึ่งคอลัมน์ ตัวอย่างเช่น สมมติว่าคุณมีตารางซึ่งมีคอลัมน์ต่อไปนี้ โดยที่ ID ใบสั่งซื้อและหมายเลขผลิตภัณฑ์รวมกันเป็นคีย์หลัก

  • ID ใบสั่งซื้อ (คีย์หลัก)
  • หมายเลขผลิตภัณฑ์ (คีย์หลัก)
  • ชื่อผลิตภัณฑ์

การออกแบบนี้ละเมิดรูปแบบปกติที่สอง เนื่องจากชื่อผลิตภัณฑ์ขึ้นอยู่กับหมายเลขผลิตภัณฑ์ แต่ไม่ขึ้นกับ ID ใบสั่งซื้อ ดังนั้นจึงไม่ขึ้นกับคีย์หลักทั้งหมด คุณต้องเอาชื่อผลิตภัณฑ์ออกจากตารางเพราะเป็นของตารางอื่น (ผลิตภัณฑ์)

รูปแบบปกติที่สาม

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

อธิบายได้อีกอย่างว่า แต่ละคอลัมน์ที่ไม่ใช่คีย์ต้องขึ้นกับคีย์หลักทั้งหมดและต้องขึ้นกับคีย์หลักอย่างเดียวเท่านั้น ตัวอย่างเช่น สมมติว่าคุณมีตารางซึ่งมีคอลัมน์ต่อไปนี้ คือ

  • หมายเลขผลิตภัณฑ์ (คีย์หลัก)
  • ชื่อ
  • ราคาขายปลีก
  • ส่วนลด

สมมติว่าส่วนลดขึ้นกับราคาขายปลีก ตารางนี้ละเมิดรูปแบบปกติที่สามเนื่องจากคอลัมน์ที่ไม่ใช่คีย์คือส่วนลดขึ้นกับราคาขายปลีกซึ่งไม่ใช่คอลัมน์คีย์ ความเป็นอิสระของคอลัมน์หมายความว่าคุณควรสามารถเปลี่ยนแปลงคอลัมน์ที่ไม่ใช่คีย์ได้โดยไม่มีผลต่อคอลัมน์อื่น ถ้าคุณเปลี่ยนค่าในเขตข้อมูลราคาขายปลีกแล้ว ส่วนลดก็จะเปลี่ยนตามด้วย ดังนั้นจึงละเมิดกฎ ในกรณีนี้ควรย้ายส่วนลดไปอยู่อีกตารางหนึ่งซึ่งมีราคาขายปลีกเป็นคีย์อยู่

ด้านบนของหน้า ด้านบนของหน้า

สำหรับข้อมูลเพิ่มเติม

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับพื้นฐานการออกแบบตาราง ให้ดูบทความการสร้างตารางในฐานข้อมูล

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการออกแบบฐานข้อมูล ให้ดูในหนังสือต่อไปนี้

  • Hernandez, Michael J. Database Design for Mere Mortals: A Hands-On Guide to Relational Database Design, Second Edition. Addison-Wesley Professional. 2003.
  • Fleming, Candace C. von Halle, Barbara. Handbook of Relational Database Design. Addison-Wesley Professional. 1989.
  • Riordan, Rebecca M. Designing Effective Database Systems. Addison-Wesley Professional. 2005.

ด้านบนของหน้า ด้านบนของหน้า

 
 
นำไปใช้กับ:
Access 2007