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

นำไปใช้กับ
Access for Microsoft 365 Access 2024 Access 2021 Access 2019 Access 2016

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

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

ในบทความนี้

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

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

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

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

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

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

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

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

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

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

ขั้นตอนการออกแบบ

ขั้นตอนการออกแบบมีขั้นตอนดังต่อไปนี้:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

1. ข้อมูลในฟอร์มนี้มาจากตารางลูกค้า...

2. ... ตารางพนักงาน...

3. ... ตารางคําสั่งซื้อ...

4. ... ตารางผลิตภัณฑ์...

5. ... และตารางรายละเอียดใบสั่งซื้อ

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

การจำกัดการออกแบบ

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

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

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

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

การกำหนดตารางผลิตภัณฑ์

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

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

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

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

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

  • ID ผลิตภัณฑ์
  • ชื่อ
  • ID ผลิตภัณฑ์1
  • ชื่อ1
  • ID ผลิตภัณฑ์2
  • ชื่อ2
  • ID ผลิตภัณฑ์3
  • ชื่อ3

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

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

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

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

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

การนำกฎการนอร์มัลไลซ์ไปใช้

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

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

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

ฟอร์มปกติที่หนึ่ง

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

ฟอร์มปกติที่สอง

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

  • ID คำสั่งซื้อ (คีย์หลัก)
  • ID ผลิตภัณฑ์ (คีย์หลัก)
  • ชื่อผลิตภัณฑ์

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

ฟอร์มปกติที่สาม

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

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

  • ID ผลิตภัณฑ์ (คีย์หลัก)
  • ชื่อ
  • SRP
  • ส่วนลด

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

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