ฐานข้อมูลที่ออกแบบมาอย่างเหมาะสมช่วยให้คุณสามารถเข้าถึงข้อมูลล่าสุดและถูกต้อง เนื่องจากการออกแบบที่ถูกต้องเป็นสิ่งสําคัญในการบรรลุเป้าหมายในการทํางานกับฐานข้อมูลการใช้เวลาที่จําเป็นในการเรียนรู้หลักการของการออกแบบที่ดีเหมาะสม ในท้ายที่สุดคุณมีแนวโน้มที่จะลงเอยด้วยฐานข้อมูลที่ตรงกับความต้องการของคุณและสามารถรองรับการเปลี่ยนแปลงได้อย่างง่ายดาย
บทความนี้จะให้แนวทางสําหรับการวางแผนฐานข้อมูลบนเดสก์ท็อป คุณจะได้เรียนรู้วิธีการตัดสินใจว่าข้อมูลใดที่คุณต้องการ วิธีการแบ่งข้อมูลนั้นลงในตารางและคอลัมน์ที่เหมาะสม และตารางเหล่านั้นเกี่ยวข้องกันอย่างไร คุณควรอ่านบทความนี้ก่อนที่คุณจะสร้างฐานข้อมูลเดสก์ท็อปแรกของคุณ
ในบทความนี้
คำศัพท์เกี่ยวกับฐานข้อมูลบางอย่างที่ควรรู้
Access จัดระเบียบข้อมูลของคุณลงใน ตาราง: รายการแถวและคอลัมน์ทําให้นึกถึงแผ่นบัญชีหรือสเปรดชีตของนักบัญชี ในฐานข้อมูลอย่างง่าย คุณอาจมีเพียงหนึ่งตาราง สําหรับฐานข้อมูลส่วนใหญ่ คุณจะต้องมีมากกว่าหนึ่งฐานข้อมูล ตัวอย่างเช่น คุณอาจมีตารางที่จัดเก็บข้อมูลเกี่ยวกับผลิตภัณฑ์ อีกตารางหนึ่งที่จัดเก็บข้อมูลเกี่ยวกับใบสั่งซื้อ และตารางอื่นที่มีข้อมูลเกี่ยวกับลูกค้า
แต่ละแถวจะถูกเรียกว่าระเบียนอย่างถูกต้องมากขึ้น และแต่ละคอลัมน์คือเขตข้อมูล ระเบียนเป็นวิธีที่มีประสิทธิภาพและสอดคล้องกันในการรวมข้อมูลเกี่ยวกับบางสิ่งบางอย่าง เขตข้อมูลเป็นรายการเดียวของข้อมูล ซึ่งเป็นชนิดรายการที่ปรากฏในทุกระเบียน ในตารางผลิตภัณฑ์ แถวแต่ละแถวหรือระเบียนแต่ละระเบียนจะมีข้อมูลเกี่ยวกับผลิตภัณฑ์หนึ่งผลิตภัณฑ์ แต่ละคอลัมน์หรือเขตข้อมูลจะมีข้อมูลบางชนิดเกี่ยวกับผลิตภัณฑ์นั้น เช่น ชื่อหรือราคา
การออกแบบฐานข้อมูลที่ดีคืออะไร
หลักการบางอย่างเป็นแนวทางในกระบวนการออกแบบฐานข้อมูล หลักการแรกคือข้อมูลที่ซ้ํากัน (หรือเรียกว่าข้อมูลซ้ําซ้อน) นั้นไม่ดีเพราะมันจะเสียพื้นที่และเพิ่มความเป็นไปได้ที่จะเกิดข้อผิดพลาดและความไม่สอดคล้องกัน หลักการที่สองคือความถูกต้องและความสมบูรณ์ของข้อมูลเป็นสิ่งสําคัญ ถ้าฐานข้อมูลของคุณมีข้อมูลที่ไม่ถูกต้อง รายงานใดๆ ที่ดึงข้อมูลจากฐานข้อมูลจะมีข้อมูลที่ไม่ถูกต้องด้วย ดังนั้นการตัดสินใจใด ๆ ที่คุณทําที่ยึดตามรายงานเหล่านั้นจะได้รับการเข้าใจผิด
การออกแบบฐานข้อมูลที่คือ ฐานข้อมูลที่:
-
แบ่งข้อมูลของคุณลงในตารางตามหัวข้อเพื่อลดข้อมูลที่ซ้ำกัน
-
มอบการเข้าถึงข้อมูลที่จำเป็นเพื่อใช้งานข้อมูลในตารางร่วมกันตามจำเป็น
-
ช่วยสนับสนุนและแน่ใจในความถูกต้องและความสมบูรณ์ของข้อมูลของคุณ
-
เหมาะสำหรับการดำเนินการข้อมูลและความต้องการในการทำรายงานของคุณ
ขั้นตอนการออกแบบ
ขั้นตอนการออกแบบมีขั้นตอนดังต่อไปนี้:
-
กำหนดวัตถุประสงค์ของฐานข้อมูลของคุณ
ซึ่งช่วยให้คุณเตรียมพร้อมสำหรับขั้นตอนที่เหลือ
-
ค้นหาและจัดระเบียบข้อมูลที่ต้องการ
รวบรวมข้อมูลทุกชนิดที่คุณอาจต้องการบันทึกไว้ในฐานข้อมูล เช่น ชื่อผลิตภัณฑ์และหมายเลขคำสั่งซื้อ
-
แบ่งข้อมูลเป็นตาราง
แบ่งรายการข้อมูลของคุณเป็นรายการหรือหัวข้อหลัก เช่น ผลิตภัณฑ์หรือคําสั่งซื้อ จากนั้นแต่ละหัวข้อจะกลายเป็นตาราง
-
เปลี่ยนรายการข้อมูลเป็นคอลัมน์
ตัดสินใจว่าข้อมูลใดที่คุณต้องการจัดเก็บในแต่ละตาราง แต่ละรายการจะกลายเป็นเขตข้อมูล และจะแสดงเป็นคอลัมน์ในตาราง ตัวอย่างเช่น ตารางพนักงานอาจมีเขตข้อมูล เช่น นามสกุล และ วันที่จ้างงาน
-
ระบุคีย์หลัก
เลือกคีย์หลักของแต่ละตาราง คีย์หลักคือคอลัมน์ที่ใช้เพื่อระบุแต่ละแถวโดยไม่ซ้ํากัน ตัวอย่างอาจเป็น ID ผลิตภัณฑ์หรือรหัสคําสั่งซื้อ
-
ตั้งค่าความสัมพันธ์ตาราง
ดูที่แต่ละตารางและตัดสินใจว่าข้อมูลในตารางหนึ่งเกี่ยวข้องกับข้อมูลในตารางอื่นๆ อย่างไร เพิ่มเขตข้อมูลลงในตารางหรือสร้างตารางใหม่เพื่อทําให้ความสัมพันธ์ชัดเจนขึ้นตามความจําเป็น
-
จำกัดการออกแบบของคุณ
วิเคราะห์การออกแบบของคุณเพื่อหาข้อผิดพลาด สร้างตารางและเพิ่มระเบียนข้อมูลตัวอย่างสองสามระเบียน ดูว่าคุณสามารถรับผลลัพธ์ที่คุณต้องการจากตารางของคุณหรือไม่ ปรับเปลี่ยนการออกแบบได้ตามต้องการ
-
นำกฎการนอร์มัลไลซ์ไปใช้
นํากฎการนัลไลซ์ข้อมูลไปใช้เพื่อดูว่าตารางของคุณมีโครงสร้างอย่างถูกต้องหรือไม่ ทําการปรับเปลี่ยนตารางตามต้องการ
การกำหนดวัตถุประสงค์ของฐานข้อมูลของคุณ
คุณควรจดบันทึกวัตถุประสงค์ของฐานข้อมูลไว้บนเอกสาร เช่น วัตถุประสงค์ วิธีที่คุณคาดหวังที่จะใช้ฐานข้อมูล และผู้ที่จะใช้ฐานข้อมูล สําหรับฐานข้อมูลขนาดเล็กสําหรับธุรกิจที่บ้าน คุณอาจเขียนบางอย่างง่ายๆ เช่น "ฐานข้อมูลลูกค้าเก็บรายชื่อข้อมูลลูกค้าเพื่อวัตถุประสงค์ในการสร้างการส่งจดหมายและรายงาน" ถ้าฐานข้อมูลมีความซับซ้อนหรือมีการใช้โดยบุคคลหลายคน บ่อยครั้งที่เกิดขึ้นในการตั้งค่าขององค์กร วัตถุประสงค์อาจเป็นย่อหน้าหรือมากกว่าและควรรวมเวลาและวิธีการที่แต่ละคนจะใช้ฐานข้อมูล ความคิดคือการมีพันธกิจที่ได้รับการพัฒนามาอย่างดีซึ่งสามารถอ้างอิงได้ตลอดกระบวนการออกแบบ การมีคําชี้แจงดังกล่าวช่วยให้คุณมุ่งเน้นไปที่เป้าหมายของคุณเมื่อคุณตัดสินใจ
การค้นหาและการจัดระเบียบข้อมูลที่จำเป็น
เมื่อต้องการค้นหาและจัดระเบียบข้อมูลที่ต้องการ ให้เริ่มต้นด้วยข้อมูลที่มีอยู่ของคุณ ตัวอย่างเช่น คุณอาจบันทึกใบสั่งซื้อในบัญชีแยกประเภท หรือเก็บข้อมูลลูกค้าไว้ในแบบฟอร์มกระดาษในตู้เอกสาร รวบรวมเอกสารเหล่านั้นและแสดงรายการข้อมูลแต่ละชนิด (ตัวอย่างเช่น แต่ละกล่องที่คุณกรอกลงในฟอร์ม) ถ้าคุณไม่มีแบบฟอร์มใดๆ ที่มีอยู่ ให้จินตนาการแทนว่าคุณต้องออกแบบฟอร์มเพื่อบันทึกข้อมูลลูกค้า คุณจะใส่ข้อมูลอะไรลงในฟอร์ม คุณจะสร้างกล่องเติมข้อความแบบใด ระบุและแสดงรายการแต่ละรายการเหล่านี้ ตัวอย่างเช่น สมมติว่าคุณเก็บรายชื่อลูกค้าไว้ในบัตรดัชนี การตรวจสอบบัตรเหล่านี้อาจแสดงว่าบัตรแต่ละใบมีชื่อลูกค้า ที่อยู่ เมือง รัฐ รหัสไปรษณีย์ และหมายเลขโทรศัพท์ แต่ละรายการเหล่านี้แสดงถึงคอลัมน์ที่เป็นไปได้ในตาราง
เมื่อคุณเตรียมรายการนี้ไม่ต้องกังวลกับการทําให้สมบูรณ์แบบในตอนแรก แต่ให้ระบุข้อมูลแต่ละรายการที่อยู่ในใจแทน ถ้ามีบุคคลอื่นกําลังใช้ฐานข้อมูลให้ขอแนวคิดของพวกเขาด้วย คุณสามารถปรับแต่งรายการได้ในภายหลัง
จากนั้น ให้พิจารณาชนิดของรายงานหรือการส่งจดหมายที่คุณอาจต้องการสร้างจากฐานข้อมูล ตัวอย่างเช่น คุณอาจต้องการให้รายงานยอดขายผลิตภัณฑ์แสดงยอดขายตามภูมิภาค หรือรายงานสรุปสินค้าคงคลังที่แสดงระดับสินค้าคงคลังของผลิตภัณฑ์ นอกจากนี้ คุณอาจต้องการสร้างฟอร์มจดหมายเพื่อส่งถึงลูกค้าที่ประกาศเหตุการณ์การขายหรือข้อเสนอพิเศษ ออกแบบรายงานในใจของคุณ และจินตนาการถึงลักษณะของรายงาน ข้อมูลใดที่คุณจะใส่ไว้ในรายงาน แสดงรายการแต่ละรายการ ทําแบบเดียวกันสําหรับฟอร์มจดหมายและรายงานอื่นๆ ที่คุณคาดว่าจะสร้าง
การให้ความคิดกับรายงานและการส่งจดหมายที่คุณอาจต้องการสร้างจะช่วยคุณระบุรายการที่คุณต้องการในฐานข้อมูลของคุณ ตัวอย่างเช่น สมมติว่าคุณเปิดโอกาสให้ลูกค้าเลือกรับการอัปเดตอีเมลประจํางวด (หรือไม่เข้าร่วม) และคุณต้องการพิมพ์รายการของผู้ที่เข้าร่วม เมื่อต้องการบันทึกข้อมูลนั้น ให้คุณเพิ่มคอลัมน์ "ส่งอีเมล" ลงในตารางลูกค้า สําหรับลูกค้าแต่ละราย
ความต้องการในการส่งข้อความอีเมลไปยังลูกค้าจะแนะนํารายการอื่นให้บันทึก เมื่อคุณทราบว่าลูกค้าต้องการรับข้อความอีเมล คุณจะต้องทราบที่อยู่อีเมลที่จะส่งไปให้ลูกค้าด้วย ดังนั้น คุณจึงจําเป็นต้องบันทึกที่อยู่อีเมล์สําหรับลูกค้าแต่ละราย
การสร้างต้นแบบของรายงานหรือรายการผลลัพธ์แต่ละรายการให้เหมาะสมและพิจารณาว่ารายการใดที่คุณจะต้องสร้างรายงาน ตัวอย่างเช่น เมื่อคุณตรวจสอบฟอร์มจดหมาย อาจมีบางสิ่งที่คุณอาจนึกถึง ถ้าคุณต้องการใส่คําทักทายที่เหมาะสม ตัวอย่างเช่น สตริง "Mr.", "Mrs." หรือ "Ms" ที่เริ่มต้นคําทักทาย คุณจะต้องสร้างรายการคําทักทาย นอกจากนี้ โดยทั่วไปคุณอาจเริ่มตัวอักษรด้วย "เรียนคุณสมิธ" แทนที่จะเป็น "เรียน" คุณซิลเวสเตอร์ สมิธ" วิธีนี้แนะนําให้คุณมักจะเก็บนามสกุลแยกจากชื่อ
จุดสําคัญที่ต้องจําคือคุณควรแบ่งข้อมูลแต่ละส่วนออกเป็นส่วนที่มีประโยชน์ที่เล็กที่สุด ในกรณีของชื่อ เพื่อให้นามสกุลพร้อมใช้งาน คุณจะต้องแบ่งชื่อออกเป็นสองส่วน ได้แก่ ชื่อและนามสกุล ตัวอย่างเช่น เมื่อต้องการเรียงลําดับรายงานตามนามสกุล จะช่วยให้นามสกุลของลูกค้าจัดเก็บแยกต่างหากกัน โดยทั่วไปแล้ว ถ้าคุณต้องการเรียงลําดับ ค้นหา คํานวณ หรือรายงานโดยยึดตามรายการของข้อมูล คุณควรใส่รายการนั้นในเขตข้อมูลของรายการ
ลองนึกถึงคําถามต่างๆ ที่คุณอาจต้องการให้ฐานข้อมูลตอบ ตัวอย่างเช่น คุณปิดการขายผลิตภัณฑ์เด่นของคุณเท่าใดเมื่อเดือนที่แล้ว ลูกค้าที่ดีที่สุดของคุณอยู่ที่ไหน ใครคือซัพพลายเออร์สําหรับผลิตภัณฑ์ที่ขายดีที่สุดของคุณ การคาดว่าคําถามเหล่านี้จะช่วยให้คุณเน้นไปที่รายการเพิ่มเติมเพื่อบันทึก
หลังจากรวบรวมข้อมูลนี้ คุณพร้อมสำหรับขั้นตอนถัดไปแล้ว
การแบ่งข้อมูลลงในตาราง
เมื่อต้องการแบ่งข้อมูลออกเป็นตาราง ให้เลือกเอนทิตีหลักหรือหัวข้อ ตัวอย่างเช่น หลังจากการค้นหาและจัดระเบียบข้อมูลสําหรับฐานข้อมูลยอดขายผลิตภัณฑ์ รายการเบื้องต้นอาจมีลักษณะดังนี้
เอนทิตีหลักที่แสดงที่นี่คือผลิตภัณฑ์ ซัพพลายเออร์ ลูกค้า และคําสั่งซื้อ ดังนั้นจึงเหมาะสมที่จะเริ่มต้นด้วยสี่ตารางเหล่านี้: หนึ่งตารางสําหรับข้อมูลเกี่ยวกับผลิตภัณฑ์หนึ่งสําหรับข้อเท็จจริงเกี่ยวกับซัพพลายเออร์หนึ่งสําหรับข้อเท็จจริงเกี่ยวกับลูกค้าและอีกตารางหนึ่งสําหรับข้อมูลเกี่ยวกับคําสั่งซื้อ แม้ว่าวิธีนี้จะไม่ทําให้รายการเสร็จสมบูรณ์ แต่ก็เป็นจุดเริ่มต้นที่ดี คุณสามารถปรับปรุงรายการนี้ต่อไปได้จนกว่าคุณจะมีการออกแบบที่ทํางานได้ดี
เมื่อคุณตรวจทานรายการเบื้องต้นเป็นครั้งแรก คุณอาจอยากวางทั้งหมดลงในตารางเดียว แทนที่จะวางทั้งสี่ที่แสดงในภาพประกอบก่อนหน้า คุณจะได้เรียนรู้ที่นี่ว่าทําไมที่เป็นความคิดที่ไม่ดี พิจารณาสักครู่ ตารางที่แสดงที่นี่:
ในกรณีนี้ แต่ละแถวจะมีข้อมูลเกี่ยวกับทั้งผลิตภัณฑ์และผู้จําหน่าย เนื่องจากคุณสามารถมีผลิตภัณฑ์มากมายจากซัพพลายเออร์รายเดียวกันข้อมูลชื่อซัพพลายเออร์และที่อยู่ต้องทําซ้ําหลายครั้ง การดําเนินการนี้จะทําให้เนื้อที่ดิสก์สิ้นเปลือง การบันทึกข้อมูลผู้ขายเพียงครั้งเดียวในตารางผู้จําหน่ายที่แยกจากกัน แล้วเชื่อมโยงตารางนั้นไปยังตารางผลิตภัณฑ์ เป็นโซลูชันที่ดีกว่ามาก
ปัญหาที่สองเกี่ยวกับการออกแบบนี้เกิดขึ้นเมื่อคุณจําเป็นต้องปรับเปลี่ยนข้อมูลเกี่ยวกับซัพพลายเออร์ ตัวอย่างเช่น สมมติว่าคุณจําเป็นต้องเปลี่ยนที่อยู่ของซัพพลายเออร์ เนื่องจากที่อยู่ปรากฏในหลายที่ คุณอาจเปลี่ยนที่อยู่โดยไม่ได้ตั้งใจในที่เดียว แต่ลืมเปลี่ยนในที่อื่นๆ การบันทึกที่อยู่ของซัพพลายเออร์ไว้ในที่เดียวสามารถแก้ไขปัญหาได้
เมื่อคุณออกแบบฐานข้อมูลของคุณ ให้พยายามบันทึกข้อเท็จจริงแต่ละข้อเพียงครั้งเดียวเสมอ ถ้าคุณพบว่าคุณใส่ข้อมูลเดียวกันซ้ํามากกว่าหนึ่งที่ เช่น ที่อยู่ของผู้ขายรายใดรายหนึ่ง ให้ใส่ข้อมูลนั้นลงในตารางที่แยกต่างหาก
ในที่สุดสมมติว่ามีผลิตภัณฑ์ที่จัดหาโดย Coho Winery เพียงผลิตภัณฑ์เดียวและคุณต้องการลบผลิตภัณฑ์ แต่รักษาข้อมูลชื่อและที่อยู่ของซัพพลายเออร์ไว้ คุณจะลบระเบียนผลิตภัณฑ์โดยไม่สูญเสียข้อมูลผู้จัดจําหน่ายได้อย่างไร คุณทําไม่ได้ เนื่องจากแต่ละระเบียนมีข้อเท็จจริงเกี่ยวกับผลิตภัณฑ์รวมถึงข้อเท็จจริงเกี่ยวกับซัพพลายเออร์คุณจึงไม่สามารถลบได้โดยไม่ลบอีกระเบียนหนึ่ง เมื่อต้องการแยกข้อเท็จจริงเหล่านี้ออกจากกัน คุณต้องแยกตารางหนึ่งออกเป็นสองตาราง: ตารางหนึ่งสําหรับข้อมูลผลิตภัณฑ์ และอีกตารางหนึ่งสําหรับข้อมูลผู้ขาย การลบเรกคอร์ดผลิตภัณฑ์ควรลบเฉพาะข้อเท็จจริงเกี่ยวกับผลิตภัณฑ์ ไม่ใช่ข้อเท็จจริงเกี่ยวกับซัพพลายเออร์
เมื่อคุณเลือกหัวข้อที่แสดงด้วยตาราง คอลัมน์ในตารางนั้นควรเก็บข้อมูลเกี่ยวกับเรื่องเท่านั้น ตัวอย่างเช่นตารางผลิตภัณฑ์ควรจัดเก็บข้อเท็จจริงเกี่ยวกับผลิตภัณฑ์เท่านั้น เนื่องจากที่อยู่ผู้ขายเป็นข้อเท็จจริงเกี่ยวกับผู้ขายและไม่ใช่ข้อเท็จจริงเกี่ยวกับผลิตภัณฑ์ จึงอยู่ในตารางผู้ขาย
การเปลี่ยนรายการข้อมูลลงในคอลัมน์
เมื่อต้องการกําหนดคอลัมน์ในตาราง ให้ตัดสินใจว่าข้อมูลใดที่คุณต้องติดตามเกี่ยวกับเรื่องที่ถูกบันทึกในตาราง ตัวอย่างเช่น สําหรับตาราง Customers, Name, Address, City-State-Zip, Send e-mail, Salutation and E-mail address ประกอบด้วยรายการเริ่มต้นที่ดีของคอลัมน์ แต่ละระเบียนในตารางจะมีชุดของคอลัมน์ที่เหมือนกัน คุณจึงสามารถเก็บชื่อ ที่อยู่ จังหวัด-Zip ส่งอีเมล ข้อมูลคําทักทาย และที่อยู่อีเมลสําหรับแต่ละระเบียนได้ ตัวอย่างเช่น คอลัมน์ที่อยู่จะมีที่อยู่ของลูกค้า แต่ละเร็กคอร์ดจะมีข้อมูลเกี่ยวกับลูกค้าหนึ่งราย และฟิลด์ที่อยู่จะมีที่อยู่สําหรับลูกค้ารายนั้น
เมื่อคุณได้กําหนดชุดคอลัมน์เริ่มต้นสําหรับแต่ละตารางแล้ว คุณสามารถปรับปรุงคอลัมน์เพิ่มเติมได้ ตัวอย่างเช่น คุณควรจัดเก็บชื่อลูกค้าเป็นสองคอลัมน์ที่แยกกัน: ชื่อและนามสกุล เพื่อให้คุณสามารถเรียงลําดับ ค้นหา และทําดัชนีเฉพาะคอลัมน์เหล่านั้นได้ ในทํานองเดียวกันที่อยู่จริงประกอบด้วยห้าส่วนประกอบที่อยู่เมืองรัฐรหัสไปรษณีย์และประเทศ / ภูมิภาคและยังเหมาะสมที่จะจัดเก็บไว้ในคอลัมน์ที่แยกต่างหาก ตัวอย่างเช่น ถ้าคุณต้องการดําเนินการค้นหา กรอง หรือเรียงลําดับตามสถานะ คุณจําเป็นต้องมีข้อมูลสถานะที่เก็บไว้ในคอลัมน์ที่แยกต่างหาก
นอกจากนี้คุณควรพิจารณาว่าฐานข้อมูลจะเก็บข้อมูลที่เป็นแหล่งกําเนิดภายในประเทศเท่านั้นหรือระหว่างประเทศด้วย ตัวอย่างเช่น หากคุณวางแผนที่จะจัดเก็บที่อยู่ระหว่างประเทศ การมีคอลัมน์ภูมิภาคแทนรัฐจะดีกว่า เนื่องจากคอลัมน์ดังกล่าวสามารถรองรับได้ทั้งรัฐภายในประเทศและภูมิภาคของประเทศ/ภูมิภาคอื่น ในทํานองเดียวกันรหัสไปรษณีย์เหมาะสมกว่ารหัสไปรษณีย์หากคุณจะจัดเก็บที่อยู่ต่างประเทศ
รายการต่อไปนี้แสดงเคล็ดลับบางอย่างสำหรับการตรวจสอบคอลัมน์ของคุณ
-
ไม่รวมข้อมูลที่คำนวณแล้ว
ในกรณีส่วนใหญ่ คุณไม่ควรจัดเก็บผลลัพธ์ของการคํานวณในตาราง แต่คุณสามารถให้ Access ทําการคํานวณเมื่อคุณต้องการดูผลลัพธ์แทนได้ ตัวอย่างเช่น สมมติว่ามีรายงาน ผลิตภัณฑ์ในการสั่งซื้อ ที่แสดงผลรวมย่อยของหน่วยตามลําดับสําหรับผลิตภัณฑ์แต่ละประเภทในฐานข้อมูล อย่างไรก็ตาม ไม่มีคอลัมน์ผลรวมย่อยของหน่วยในใบสั่งซื้อในตารางใดๆ แต่ตารางผลิตภัณฑ์จะมีคอลัมน์หน่วยในการสั่งซื้อที่จัดเก็บหน่วยตามลําดับสําหรับแต่ละผลิตภัณฑ์ เมื่อใช้ข้อมูลดังกล่าว Access จะคํานวณผลรวมย่อยทุกครั้งที่คุณพิมพ์รายงาน ไม่ควรเก็บผลรวมย่อยไว้ในตาราง
-
จัดเก็บข้อมูลในส่วนทางตรรกะที่เล็กที่สุด
คุณอาจอยากมีเขตข้อมูลเดียวสําหรับชื่อเต็ม หรือสําหรับชื่อผลิตภัณฑ์พร้อมกับคําอธิบายผลิตภัณฑ์ ถ้าคุณรวมข้อมูลมากกว่าหนึ่งชนิดไว้ในเขตข้อมูล เป็นการยากที่จะเรียกใช้ข้อเท็จจริงแต่ละรายการในภายหลัง พยายามแบ่งข้อมูลออกเป็นส่วนทางตรรกะ ตัวอย่างเช่น สร้างฟิลด์แยกต่างหากสําหรับชื่อและนามสกุล หรือสําหรับชื่อผลิตภัณฑ์ ประเภท และคําอธิบาย
เมื่อคุณกำหนดคอลัมน์ข้อมูลในแต่ละตารางแล้ว คุณพร้อมแล้วที่จะเลือกคีย์หลักของแต่ละตาราง
การระบุคีย์หลัก
แต่ละตารางควรมีคอลัมน์หรือชุดของคอลัมน์ที่ระบุแถวแต่ละแถวที่เก็บอยู่ในตารางโดยไม่ซ้ํากัน หมายเลขนี้มักจะเป็นหมายเลขประจําตัวที่ไม่ซ้ํากัน เช่น หมายเลขรหัสพนักงานหรือหมายเลขลําดับประจําสินค้า ในศัพท์เฉพาะของฐานข้อมูล ข้อมูลนี้เรียกว่า คีย์หลักของ ตาราง Access ใช้เขตข้อมูลคีย์หลักเพื่อเชื่อมโยงข้อมูลจากหลายตารางอย่างรวดเร็วและนําข้อมูลมารวมกันสําหรับคุณ
ถ้าคุณมีตัวระบุที่ไม่ซ้ํากันสําหรับตารางอยู่แล้ว เช่น หมายเลขผลิตภัณฑ์ที่ระบุแต่ละผลิตภัณฑ์ในแค็ตตาล็อกของคุณโดยไม่ซ้ํากัน คุณสามารถใช้ตัวระบุนั้นเป็นคีย์หลักของตารางได้ แต่เฉพาะถ้าค่าในคอลัมน์นี้จะแตกต่างกันสําหรับแต่ละระเบียนเสมอ คุณไม่สามารถมีค่าที่ซ้ํากันในคีย์หลักได้ ตัวอย่างเช่น อย่าใช้ชื่อของบุคคลเป็นคีย์หลัก เนื่องจากชื่อไม่ซ้ํากัน คุณสามารถมีบุคคลสองคนที่มีชื่อเดียวกันในตารางเดียวกันได้อย่างง่ายดาย
คีย์หลักต้องมีค่าเสมอ ถ้าค่าของคอลัมน์ไม่สามารถถูกกําหนดหรือไม่รู้จัก (ค่าที่หายไป) ในบางจุด ค่านั้นจะไม่สามารถใช้เป็นคอมโพเนนต์ในคีย์หลักได้
คุณควรเลือกคีย์หลักที่มีค่าที่ไม่เปลี่ยนแปลงเสมอ ในฐานข้อมูลที่ใช้มากกว่าหนึ่งตาราง คีย์หลักของตารางสามารถใช้เป็นการอ้างอิงในตารางอื่นได้ ถ้าคีย์หลักเปลี่ยนแปลง จะต้องใช้การเปลี่ยนแปลงในทุกที่ที่คีย์ถูกอ้างอิงด้วย การใช้คีย์หลักที่จะไม่เปลี่ยนแปลงจะช่วยลดโอกาสที่คีย์หลักอาจซิงค์กับตารางอื่นที่อ้างอิงคีย์หลักไม่ได้
บ่อยครั้ง หมายเลขเฉพาะโดยพลการจะถูกใช้เป็นคีย์หลัก ตัวอย่างเช่น คุณอาจกําหนดหมายเลขคําสั่งซื้อที่ไม่ซ้ํากันให้กับแต่ละคําสั่งซื้อ วัตถุประสงค์เฉพาะของหมายเลขคําสั่งซื้อคือเพื่อระบุคําสั่งซื้อ เมื่อมอบหมายแล้ว จะไม่มีการเปลี่ยนแปลง
ถ้าคุณไม่มีคอลัมน์หรือชุดของคอลัมน์ที่อาจเป็นคีย์หลักที่ดี ให้พิจารณาใช้คอลัมน์ที่มีชนิดข้อมูล AutoNumber เมื่อคุณใช้ชนิดข้อมูล AutoNumber Access จะกําหนดค่าให้คุณโดยอัตโนมัติ ตัวระบุดังกล่าวไม่มีข้อเท็จจริง ไม่มีข้อมูลจริงที่อธิบายแถวที่อธิบายข้อมูลนั้น ตัวระบุที่ไม่มีข้อเท็จจริงเหมาะสําหรับการใช้เป็นคีย์หลักเนื่องจากไม่มีการเปลี่ยนแปลง คีย์หลักที่มีข้อเท็จจริงเกี่ยวกับแถว เช่น หมายเลขโทรศัพท์หรือชื่อลูกค้า มีแนวโน้มที่จะเปลี่ยนแปลงมากกว่า เนื่องจากข้อมูลจริงอาจเปลี่ยนแปลงได้เอง
1. คอลัมน์ที่ตั้งค่าเป็นชนิดข้อมูล AutoNumber มักจะเป็นคีย์หลักที่ดี ไม่มีรหัสผลิตภัณฑ์สองรหัสที่เหมือนกัน
ในบางกรณี คุณอาจต้องการใช้เขตข้อมูลอย่างน้อยสองเขตข้อมูลร่วมกัน ให้ใส่คีย์หลักของตาราง ตัวอย่างเช่น ตารางรายละเอียดคําสั่งซื้อที่จัดเก็บรายการสินค้าสําหรับคําสั่งซื้อจะใช้สองคอลัมน์ในคีย์หลัก: ID คําสั่งซื้อและรหัสผลิตภัณฑ์ เมื่อคีย์หลักใช้มากกว่าหนึ่งคอลัมน์ จะเรียกว่าคีย์ผสม
สำหรับฐานข้อมูลยอดขายของผลิตภัณฑ์ คุณสามารถสร้างคอลัมน์ AutoNumber สำหรับแต่ละตารางเพื่อให้เป็นคีย์หลักได้: ID ผลิตภัณฑ์สำหรับตารางผลิตภัณฑ์, ID คำสั่งซื้อสำหรับตารางคำสั่งซื้อ, ID ลูกค้าสำหรับตารางลูกค้า, และ ID ผู้ขายสำหรับตารางผู้ขาย
การสร้างความสัมพันธ์ตาราง
ตอนนี้คุณได้แบ่งข้อมูลของคุณลงในตารางแล้ว คุณต้องการวิธีรวบรวมข้อมูลอีกครั้งด้วยวิธีที่สื่อความหมาย ตัวอย่างเช่น แบบฟอร์มต่อไปนี้มีข้อมูลจากหลายตาราง
1. ข้อมูลในฟอร์มนี้มาจากตารางลูกค้า...
2. ...ตารางพนักงาน...
3. ...ตารางใบสั่งซื้อ...
4. ...ตารางผลิตภัณฑ์...
5. ...และตารางรายละเอียดใบสั่งซื้อ
Access เป็นระบบการจัดการฐานข้อมูลเชิงสัมพันธ์ ในฐานข้อมูลเชิงสัมพันธ์ คุณแบ่งข้อมูลของคุณออกเป็นตารางที่ยึดตามหัวเรื่องแยกกัน จากนั้น คุณสามารถใช้ความสัมพันธ์ของตารางเพื่อรวบรวมข้อมูลได้ตามต้องการ
การสร้างความสัมพันธ์แบบหนึ่ง-ต่อ-กลุ่ม
พิจารณาตัวอย่างนี้: ตารางผู้ขายและผลิตภัณฑ์ในฐานข้อมูลคําสั่งซื้อผลิตภัณฑ์ ซัพพลายเออร์สามารถจัดหาผลิตภัณฑ์ได้หลายจํานวน ซึ่งจะตามมาสําหรับผู้จําหน่ายใดๆ ที่แสดงอยู่ในตารางผู้จําหน่าย อาจมีผลิตภัณฑ์จํานวนมากที่แสดงอยู่ในตารางผลิตภัณฑ์ ความสัมพันธ์ระหว่างตารางผู้จําหน่ายและตารางผลิตภัณฑ์จึงเป็นความสัมพันธ์แบบหนึ่ง-ต่อ-กลุ่ม
เมื่อต้องการแสดงความสัมพันธ์แบบหนึ่ง-ต่อ-กลุ่มในการออกแบบฐานข้อมูลของคุณ ให้นําคีย์หลักไปไว้ที่ด้าน "หนึ่ง" ของความสัมพันธ์ และเพิ่มเป็นคอลัมน์เพิ่มเติมลงในตารางบนด้าน "กลุ่ม" ของความสัมพันธ์ ในกรณีนี้ คุณเพิ่มคอลัมน์ ID ผู้ขายจากตารางผู้จําหน่ายลงในตารางผลิตภัณฑ์ จากนั้น Access สามารถใช้หมายเลข ID ผู้ขายในตารางผลิตภัณฑ์เพื่อค้นหาผู้ขายที่ถูกต้องสําหรับแต่ละผลิตภัณฑ์
คอลัมน์ ID ผู้ขายในตารางผลิตภัณฑ์เรียกว่าคีย์นอก Foreign Key คือคีย์หลักของอีกตารางหนึ่ง คอลัมน์ ID ผู้ขายในตารางผลิตภัณฑ์เป็นคีย์นอก เนื่องจากเป็นคีย์หลักในตารางผู้จําหน่ายด้วย
คุณให้พื้นฐานสําหรับการรวมตารางที่เกี่ยวข้องกันโดยการจับคู่คีย์หลักและคีย์นอก ถ้าคุณไม่แน่ใจว่าตารางใดควรใช้คอลัมน์ทั่วไปร่วมกัน การระบุความสัมพันธ์แบบหนึ่ง-ต่อ-กลุ่มจะทําให้แน่ใจได้ว่าตารางทั้งสองตารางที่เกี่ยวข้องกันจะต้องมีคอลัมน์ที่แชร์
การสร้างความสัมพันธ์แบบกลุ่ม-ต่อ-กลุ่ม
พิจารณาความสัมพันธ์ระหว่างตารางผลิตภัณฑ์และตารางคำสั่งซื้อ
คําสั่งซื้อเดียวสามารถรวมผลิตภัณฑ์ได้มากกว่าหนึ่งรายการ ในทางตรงกันข้ามผลิตภัณฑ์เดียวสามารถปรากฏบนคําสั่งซื้อจํานวนมาก ดังนั้น สําหรับแต่ละระเบียนในตารางใบสั่งซื้อ อาจมีหลายระเบียนในตารางผลิตภัณฑ์ และสําหรับแต่ละระเบียนในตาราง ผลิตภัณฑ์ อาจมีหลายระเบียนในตาราง ใบสั่งซื้อ ความสัมพันธ์ชนิดนี้เรียกว่าความสัมพันธ์แบบกลุ่ม-ต่อ-กลุ่ม เนื่องจากสําหรับผลิตภัณฑ์ใดๆ สามารถมีใบสั่งซื้อได้หลายใบ และสําหรับการสั่งซื้อใดๆ, สามารถมีผลิตภัณฑ์จํานวนมากของ โปรดสังเกตว่า การตรวจหาความสัมพันธ์แบบกลุ่ม-ต่อ-กลุ่มระหว่างตารางของคุณ เป็นสิ่งสําคัญที่คุณต้องพิจารณาทั้งสองด้านของความสัมพันธ์
หัวข้อของตารางสองตาราง ได้แก่ คําสั่งซื้อและผลิตภัณฑ์ มีความสัมพันธ์แบบกลุ่ม-ต่อ-กลุ่ม การดําเนินการนี้แสดงปัญหา เมื่อต้องการทําความเข้าใจปัญหา ให้จินตนาการถึงสิ่งที่จะเกิดขึ้นถ้าคุณพยายามสร้างความสัมพันธ์ระหว่างสองตารางโดยการเพิ่มเขตข้อมูล ID ผลิตภัณฑ์ลงในตารางใบสั่งซื้อ เมื่อต้องการมีผลิตภัณฑ์มากกว่าหนึ่งรายการต่อหนึ่งคําสั่งซื้อ คุณต้องมีมากกว่าหนึ่งระเบียนในตารางใบสั่งซื้อต่อใบสั่งซื้อ คุณจะทําซ้ําข้อมูลการสั่งซื้อสําหรับแต่ละแถวที่เกี่ยวข้องกับลําดับเดียว — ส่งผลให้การออกแบบที่ไม่มีประสิทธิภาพที่อาจทําให้ข้อมูลไม่ถูกต้อง คุณพบปัญหาเดียวกันถ้าคุณใส่เขตข้อมูล ID คําสั่งซื้อในตารางผลิตภัณฑ์ คุณจะมีระเบียนมากกว่าหนึ่งระเบียนในตารางผลิตภัณฑ์สําหรับแต่ละผลิตภัณฑ์ คุณจะแก้ไขปัญหานี้อย่างไร
คําตอบคือการสร้างตารางที่สาม ซึ่งมักจะเรียกว่าตารางเชื่อมต่อ ที่แบ่งความสัมพันธ์แบบกลุ่ม-ต่อ-กลุ่มออกเป็นความสัมพันธ์แบบหนึ่ง-ต่อ-กลุ่มสองความสัมพันธ์ คุณแทรกคีย์หลักจากแต่ละตารางในสองตารางลงในตารางที่สาม ด้วยเหตุนี้ ตารางที่สามจึงบันทึกแต่ละเหตุการณ์หรืออินสแตนซ์ของความสัมพันธ์นั้น
แต่ละระเบียนในตารางรายละเอียดใบสั่งซื้อแสดงสินค้าหนึ่งบรรทัดในใบสั่งซื้อ คีย์หลักของตารางรายละเอียดคําสั่งซื้อประกอบด้วยสองเขตข้อมูล ได้แก่ คีย์นอกจากใบสั่งซื้อและตารางผลิตภัณฑ์ การใช้เขตข้อมูล ID คําสั่งซื้อเพียงอย่างเดียวจะไม่ทํางานเป็นคีย์หลักสําหรับตารางนี้ เนื่องจากคําสั่งซื้อหนึ่งรายการสามารถมีรายการได้หลายบรรทัด รหัสคําสั่งซื้อจะถูกทําซ้ําสําหรับสินค้าในบรรทัดแต่ละรายการบนใบสั่ง ดังนั้นเขตข้อมูลจะไม่มีค่าที่ไม่ซ้ํากัน การใช้เขตข้อมูล ID ผลิตภัณฑ์อย่างเดียวจะไม่ทํางานเนื่องจากผลิตภัณฑ์หนึ่งรายการสามารถปรากฏบนคําสั่งซื้อต่างๆ ได้หลายรายการ แต่เมื่ออยู่ด้วยกัน เขตข้อมูลทั้งสองจะสร้างค่าที่ไม่ซ้ํากันสําหรับแต่ละระเบียนเสมอ
ในฐานข้อมูลยอดขายผลิตภัณฑ์ ตารางใบสั่งซื้อและตารางผลิตภัณฑ์จะไม่เกี่ยวข้องกันโดยตรง แต่จะสัมพันธ์กันทางอ้อมผ่านตารางรายละเอียดคําสั่งซื้อแทน ความสัมพันธ์แบบกลุ่ม-ต่อ-กลุ่มระหว่างใบสั่งซื้อและผลิตภัณฑ์จะแสดงในฐานข้อมูลโดยใช้ความสัมพันธ์แบบหนึ่ง-ต่อ-กลุ่มสองความสัมพันธ์:
-
ตารางใบสั่งซื้อและตารางรายละเอียดใบสั่งซื้อมีความสัมพันธ์แบบหนึ่ง-ต่อ-กลุ่ม คําสั่งซื้อแต่ละรายการสามารถมีรายการได้มากกว่าหนึ่งรายการ แต่แต่ละรายการจะเชื่อมต่อกับคําสั่งซื้อเดียวเท่านั้น
-
ตารางผลิตภัณฑ์และตารางรายละเอียดคําสั่งซื้อมีความสัมพันธ์แบบหนึ่ง-ต่อ-กลุ่ม ผลิตภัณฑ์แต่ละชิ้นสามารถมีรายการสินค้าที่เกี่ยวข้องได้หลายบรรทัด แต่สินค้าแต่ละรายการอ้างอิงถึงผลิตภัณฑ์เดียวเท่านั้น
จากตารางรายละเอียดคําสั่งซื้อ คุณสามารถกําหนดผลิตภัณฑ์ทั้งหมดในคําสั่งซื้อเฉพาะได้ คุณยังสามารถกําหนดคําสั่งซื้อทั้งหมดสําหรับผลิตภัณฑ์หนึ่งๆ ได้ด้วย
หลังจากการรวมตารางรายละเอียดคำสั่งซื้อ รายการตารางและเขตข้อมูลอาจมีลักษณะดังนี้:
การสร้างความสัมพันธ์แบบหนึ่ง-ต่อ-หนึ่ง
ความสัมพันธ์อีกชนิดหนึ่งคือความสัมพันธ์แบบหนึ่ง-ต่อ-หนึ่ง ตัวอย่างเช่น สมมติว่าคุณจําเป็นต้องบันทึกข้อมูลผลิตภัณฑ์เสริมพิเศษบางอย่างที่คุณจะต้องการไม่ค่อยมีหรือใช้กับผลิตภัณฑ์บางอย่างเท่านั้น เนื่องจากคุณไม่จําเป็นต้องใช้ข้อมูลบ่อย และเนื่องจากการจัดเก็บข้อมูลในตารางผลิตภัณฑ์จะทําให้มีพื้นที่ว่างสําหรับผลิตภัณฑ์ทั้งหมดที่ไม่นําไปใช้ คุณจึงวางข้อมูลไว้ในตารางแยกต่างหาก เช่นเดียวกับตารางผลิตภัณฑ์ ให้คุณใช้รหัสผลิตภัณฑ์เป็นคีย์หลัก ความสัมพันธ์ระหว่างตารางเสริมนี้และตารางผลิตภัณฑ์เป็นความสัมพันธ์แบบหนึ่ง-ต่อ-หนึ่ง สําหรับแต่ละระเบียนในตารางผลิตภัณฑ์ จะมีระเบียนที่ตรงกันระเบียนเดียวในตารางเสริม เมื่อคุณระบุความสัมพันธ์ดังกล่าว ตารางทั้งสองตารางจะต้องใช้เขตข้อมูลร่วมกัน
เมื่อคุณตรวจพบความต้องการความสัมพันธ์แบบหนึ่ง-ต่อ-หนึ่งในฐานข้อมูลของคุณ ให้พิจารณาว่าคุณสามารถใส่ข้อมูลจากสองตารางไว้ด้วยกันในตารางเดียวได้หรือไม่ ถ้าคุณไม่ต้องการทําเช่นนั้นด้วยเหตุผลบางอย่าง อาจเป็นเพราะอาจส่งผลให้เกิดพื้นที่ว่างจํานวนมาก รายการต่อไปนี้แสดงวิธีที่คุณจะแสดงความสัมพันธ์ในการออกแบบของคุณ:
-
ถ้าสองตารางมีหัวเรื่องเดียวกัน คุณอาจตั้งค่าความสัมพันธ์โดยใช้คีย์หลักเดียวกันทั้งสองตารางได้
-
ถ้าสองตารางมีหัวเรื่องต่างกันและมีคีย์หลักต่างกัน ให้เลือกตารางใดตารางหนึ่งแล้วแทรกคีย์หลักในอีกตารางหนึ่งเป็นคีย์นอก
การกําหนดความสัมพันธ์ระหว่างตารางจะช่วยให้คุณแน่ใจได้ว่าคุณมีตารางและคอลัมน์ที่ถูกต้อง เมื่อมีความสัมพันธ์แบบหนึ่ง-ต่อ-หนึ่งหรือหนึ่ง-ต่อ-กลุ่ม ตารางที่เกี่ยวข้องกันจําเป็นต้องแชร์คอลัมน์ทั่วไปหรือคอลัมน์ เมื่อมีความสัมพันธ์แบบกลุ่ม-ต่อ-กลุ่ม ตารางที่สามจําเป็นต้องแสดงความสัมพันธ์
การจำกัดการออกแบบ
เมื่อคุณมีตาราง เขตข้อมูล และความสัมพันธ์ที่คุณต้องการคุณควรสร้างและใส่ข้อมูลในตารางของคุณด้วยข้อมูลตัวอย่าง และลองทํางานกับข้อมูล: การสร้างคิวรี การเพิ่มระเบียนใหม่ และอื่นๆ การทําเช่นนี้จะช่วยเน้นปัญหาที่อาจเกิดขึ้น ตัวอย่างเช่น คุณอาจจําเป็นต้องเพิ่มคอลัมน์ที่คุณลืมแทรกในระหว่างขั้นตอนการออกแบบ ของคุณ หรือคุณอาจมีตารางที่คุณควรแยกเป็นสองตารางเพื่อเอาการทําซ้ําออก
ดูว่าคุณสามารถใช้ฐานข้อมูลเพื่อรับคําตอบที่คุณต้องการได้หรือไม่ สร้างแบบร่างคร่าวๆ ของฟอร์มและรายงานของคุณ และดูว่าฟอร์มและรายงานแสดงข้อมูลที่คุณคาดหวังหรือไม่ ค้นหาข้อมูลซ้ําซ้อนที่ไม่จําเป็น และเมื่อคุณพบ ให้เปลี่ยนการออกแบบของคุณเพื่อกําจัดข้อมูลนั้น
เมื่อคุณลองใช้ฐานข้อมูลเริ่มต้นคุณอาจค้นพบพื้นที่สําหรับการปรับปรุง ต่อไปนี้คือสิ่งที่ต้องตรวจสอบ:
-
คุณลืมคอลัมน์ใดๆ หรือไม่ ถ้าใช่ ข้อมูลควรอยู่ในตารางที่มีอยู่หรือไม่ ถ้าเป็นข้อมูลเกี่ยวกับสิ่งอื่น คุณอาจต้องสร้างอีกตารางหนึ่ง สร้างคอลัมน์สําหรับทุกรายการข้อมูลที่คุณต้องการติดตาม ถ้าไม่สามารถคํานวณข้อมูลจากคอลัมน์อื่นได้ เป็นไปได้ว่าคุณจะต้องใช้คอลัมน์ใหม่
-
มีคอลัมน์ที่ไม่จําเป็นเนื่องจากสามารถคํานวณจากเขตข้อมูลที่มีอยู่ได้หรือไม่ ถ้ารายการข้อมูลสามารถคํานวณจากคอลัมน์อื่นที่มีอยู่ได้ เช่น ราคาที่ได้รับส่วนลดที่คํานวณจากราคาขายปลีก ซึ่งโดยปกติแล้วจะดีกว่าถ้าทําเช่นนั้น และหลีกเลี่ยงการสร้างคอลัมน์ใหม่
-
คุณใส่ข้อมูลที่ซ้ํากันลงในตารางใดตารางหนึ่งของคุณซ้ําๆ หรือไม่ ถ้าใช่ คุณอาจจําเป็นต้องแบ่งตารางออกเป็นสองตารางที่มีความสัมพันธ์แบบหนึ่ง-ต่อ-กลุ่ม
-
คุณมีตารางที่มีหลายเขตข้อมูล จํานวนระเบียนที่จํากัด และเขตข้อมูลว่างจํานวนมากในแต่ละระเบียนหรือไม่ ถ้าเป็นเช่นนั้น ลองนึกถึงการออกแบบตารางใหม่เพื่อให้มีเขตข้อมูลน้อยลงและมีระเบียนมากขึ้น
-
แต่ละรายการข้อมูลถูกแบ่งเป็นส่วนเล็กๆ ที่มีประโยชน์หรือไม่ ถ้าคุณต้องการรายงาน เรียงลําดับ ค้นหา หรือคํานวณรายการข้อมูล ให้ใส่รายการนั้นในคอลัมน์ของตัวเอง
-
แต่ละคอลัมน์มีข้อเท็จจริงเกี่ยวกับหัวข้อของตารางหรือไม่ ถ้าคอลัมน์ไม่มีข้อมูลเกี่ยวกับหัวข้อของตาราง คอลัมน์นั้นจะอยู่ในตารางอื่น
-
ความสัมพันธ์ทั้งหมดระหว่างตารางจะแสดงไม่ว่าจะโดยเขตข้อมูลร่วมหรือโดยตารางที่สามหรือไม่ ความสัมพันธ์แบบหนึ่ง-ต่อ-หนึ่งและแบบหนึ่ง-ต่อ-กลุ่มจําเป็นต้องมีคอลัมน์ร่วม ความสัมพันธ์แบบกลุ่ม-ต่อ-กลุ่มจําเป็นต้องมีตารางที่สาม
การกำหนดตารางผลิตภัณฑ์
สมมติว่าผลิตภัณฑ์แต่ละรายการในฐานข้อมูลยอดขายผลิตภัณฑ์อยู่ในประเภททั่วไป เช่น เครื่องดื่ม เครื่องปรุง หรืออาหารทะเล ตารางผลิตภัณฑ์อาจมีเขตข้อมูลที่แสดงประเภทของผลิตภัณฑ์แต่ละรายการ
สมมติว่าหลังจากการตรวจสอบและปรับแต่งการออกแบบฐานข้อมูลคุณตัดสินใจที่จะจัดเก็บคําอธิบายของประเภทพร้อมกับชื่อ ถ้าคุณเพิ่มเขตข้อมูล คําอธิบายประเภท ลงในตารางผลิตภัณฑ์ คุณจะต้องทําซ้ําคําอธิบายแต่ละประเภทสําหรับแต่ละผลิตภัณฑ์ที่อยู่ภายใต้ประเภท นั้นไม่ใช่โซลูชันที่ดี
วิธีแก้ไขปัญหาที่ดีกว่าคือทําให้ประเภทเป็นหัวข้อใหม่สําหรับฐานข้อมูลเพื่อติดตาม โดยมีตารางของตนเองและคีย์หลักของตัวเอง จากนั้นคุณสามารถเพิ่มคีย์หลักจากตาราง ประเภท ลงในตาราง ผลิตภัณฑ์ เป็นคีย์นอกได้
ตารางประเภทและผลิตภัณฑ์มีความสัมพันธ์แบบหนึ่ง-ต่อ-กลุ่ม: ประเภทสามารถมีมากกว่าหนึ่งผลิตภัณฑ์ แต่ผลิตภัณฑ์สามารถมีได้ประเภทเดียว
เมื่อคุณตรวจสอบโครงสร้างตารางของคุณ ให้ระวังกลุ่มที่ซ้ํากัน ตัวอย่างเช่น ให้พิจารณาตารางที่มีคอลัมน์ต่อไปนี้
-
ID ผลิตภัณฑ์
-
ชื่อ
-
ID ผลิตภัณฑ์1
-
ชื่อ1
-
ID ผลิตภัณฑ์2
-
ชื่อ2
-
ID ผลิตภัณฑ์3
-
ชื่อ3
ที่นี่ แต่ละผลิตภัณฑ์คือกลุ่มคอลัมน์ที่ซ้ําซึ่งแตกต่างจากคอลัมน์อื่นๆ โดยการเพิ่มตัวเลขลงในส่วนท้ายของชื่อคอลัมน์เท่านั้น เมื่อคุณเห็นคอลัมน์ลําดับเลขด้วยวิธีนี้ คุณควรกลับมาที่การออกแบบของคุณอีกครั้ง
การออกแบบดังกล่าวมีข้อบกพร่องหลายอย่าง สําหรับผู้เริ่มต้นมันบังคับให้คุณวางขีด จํากัด บนจํานวนผลิตภัณฑ์ ทันทีที่คุณใช้งานเกินขีดจํากัดดังกล่าว คุณต้องเพิ่มกลุ่มคอลัมน์ใหม่ลงในโครงสร้างตาราง ซึ่งเป็นงานการจัดการหลัก
ปัญหาอีกประการหนึ่งคือซัพพลายเออร์ที่มีจํานวนผลิตภัณฑ์น้อยกว่าจํานวนสูงสุดจะเสียพื้นที่ว่างเนื่องจากคอลัมน์เพิ่มเติมจะว่างเปล่า ปัญหาที่ร้ายแรงที่สุดเกี่ยวกับการออกแบบดังกล่าวคือทําให้งานหลายอย่างทําได้ยากเช่นการเรียงลําดับหรือการทําดัชนีตารางตาม ID หรือชื่อผลิตภัณฑ์
เมื่อใดก็ตามที่คุณเห็นกลุ่มที่ซ้ํากัน ตรวจสอบการออกแบบอย่างใกล้ชิดด้วยการมองการแยกตารางเป็นสองกลุ่ม ในตัวอย่างข้างต้นจะเป็นการดีกว่าที่จะใช้สองตารางตารางหนึ่งสําหรับซัพพลายเออร์และอีกตารางหนึ่งสําหรับผลิตภัณฑ์ที่เชื่อมโยงกับ ID ผู้ขาย
การนำกฎการนอร์มัลไลซ์ไปใช้
คุณสามารถใช้กฎการนัลไลซ์ข้อมูล (บางครั้งเรียกว่ากฎการนัลไลซ์) เป็นขั้นตอนถัดไปในการออกแบบของคุณ คุณใช้กฎเหล่านี้เพื่อดูว่าตารางของคุณมีโครงสร้างอย่างถูกต้องหรือไม่ กระบวนการนํากฎไปใช้กับการออกแบบฐานข้อมูลของคุณเรียกว่า การนอร์มัลไลซ์ฐานข้อมูล หรือการนอร์มัลไลซ์
การนัลไลซ์มีประโยชน์มากที่สุดหลังจากที่คุณแสดงรายการข้อมูลทั้งหมดและมาถึงการออกแบบเบื้องต้น แนวคิดคือช่วยให้คุณแน่ใจได้ว่า คุณได้แบ่งรายการข้อมูลของคุณออกเป็นตารางที่เหมาะสม สิ่งที่การนัลไลซ์ไม่สามารถทําได้คือการตรวจสอบให้แน่ใจว่าคุณมีรายการข้อมูลที่ถูกต้องทั้งหมดที่จะเริ่มต้นด้วย
คุณนํากฎไปใช้อย่างต่อเนื่องในแต่ละขั้นตอนเพื่อให้แน่ใจว่าการออกแบบของคุณมาถึงหนึ่งในสิ่งที่เรียกว่า "รูปแบบปกติ" ห้ารูปแบบปกติได้รับการยอมรับอย่างกว้างขวาง — รูปแบบปกติแรกผ่านรูปแบบปกติที่ห้า บทความนี้จะขยายในสามส่วนแรก เนื่องจากทั้งหมดนี้จําเป็นสําหรับการออกแบบฐานข้อมูลส่วนใหญ่
ฟอร์มปกติที่หนึ่ง
ฟอร์มปกติแรกจะระบุว่าทุกแถวและจุดตัดของคอลัมน์ในตารางมีค่าเดียว และไม่ใช่รายการของค่า ตัวอย่างเช่น คุณไม่สามารถมีเขตข้อมูลที่ชื่อราคาซึ่งคุณใส่ราคามากกว่าหนึ่งรายการ ถ้าคุณคิดว่าแต่ละจุดตัดของแถวและคอลัมน์เป็นเซลล์ แต่ละเซลล์สามารถมีค่าได้เพียงค่าเดียวเท่านั้น
ฟอร์มปกติที่สอง
ฟอร์มปกติที่สองจําเป็นต้องให้คอลัมน์ที่ไม่ใช่คีย์แต่ละคอลัมน์ขึ้นอยู่กับคีย์หลักทั้งหมด ไม่ใช่เพียงส่วนหนึ่งของคีย์ กฎนี้จะนําไปใช้เมื่อคุณมีคีย์หลักที่มีมากกว่าหนึ่งคอลัมน์ ตัวอย่างเช่น สมมติว่าคุณมีตารางที่มีคอลัมน์ต่อไปนี้ ซึ่ง ID คําสั่งซื้อและ ID ผลิตภัณฑ์จะเป็นคีย์หลัก:
-
ID คำสั่งซื้อ (คีย์หลัก)
-
ID ผลิตภัณฑ์ (คีย์หลัก)
-
ชื่อผลิตภัณฑ์
การออกแบบนี้ละเมิดฟอร์มปกติที่สอง เนื่องจากชื่อผลิตภัณฑ์ขึ้นอยู่กับ ID ผลิตภัณฑ์ แต่ไม่ขึ้นอยู่กับ ID คําสั่งซื้อ ดังนั้นจึงไม่ขึ้นอยู่กับคีย์หลักทั้งหมด คุณต้องลบชื่อผลิตภัณฑ์ออกจากตาราง ซึ่งอยู่ในตารางอื่น (ผลิตภัณฑ์)
ฟอร์มปกติที่สาม
ฟอร์มทั่วไปที่สามจำเป็นต้องมีคอลัมน์ที่ไม่ใช่คีย์ทุกคอลัมน์ขึ้นอยู่กับคีย์หลักทั้งหมด แต่คอลัมน์ที่ไม่คีย์เป็นอิสระต่อกัน
อีกวิธีหนึ่งที่ระบุว่าคอลัมน์ที่ไม่ใช่คีย์แต่ละคอลัมน์จะต้องขึ้นอยู่กับคีย์หลักและไม่มีอะไรนอกจากคีย์หลัก ตัวอย่างเช่น สมมติว่าคุณมีตารางที่มีคอลัมน์ต่อไปนี้:
-
ID ผลิตภัณฑ์ (คีย์หลัก)
-
ชื่อ
-
SRP
-
ส่วนลด
สมมติว่าส่วนลดขึ้นอยู่กับราคาขายปลีกที่แนะนํา (SRP) ตารางนี้ละเมิดฟอร์มปกติที่สามเนื่องจากคอลัมน์ที่ไม่ใช่คีย์ Discount ขึ้นอยู่กับคอลัมน์อื่นที่ไม่ใช่คีย์ SRP ความเป็นอิสระของคอลัมน์หมายความว่าคุณควรสามารถเปลี่ยนแปลงคอลัมน์ที่ไม่ใช่คีย์ได้โดยไม่มีผลกระทบต่อคอลัมน์อื่น หากคุณเปลี่ยนค่าในช่อง SRP ส่วนลดจะเปลี่ยนแปลงตามนั้น จึงเป็นการละเมิดกฎนั้น ในกรณีนี้ ควรย้ายส่วนลดไปยังตารางอื่นที่คีย์บน SRP