คีย์หลักและคีย์นอกเป็นกาวที่จัดระเบียบหลายตารางให้เป็นฐานข้อมูลเชิงสัมพันธ์ที่มีประสิทธิภาพ การออกแบบคีย์หลักและคีย์นอกมีผลกระทบอย่างมากต่อประสิทธิภาพและความพร้อมใช้งานของฐานข้อมูลจริง
สคีมาฐานข้อมูลจะต้องถูกแปลงจากการออกแบบเชิงตรรกะเชิงทฤษฎีเป็นการออกแบบทางกายภาพจริง โครงสร้างของคีย์หลักและคีย์นอกถือเป็นหัวใจสำคัญของกระบวนการออกแบบนี้ เมื่อใช้ฐานข้อมูลที่ออกแบบในสภาพแวดล้อมการใช้งานจริง การปรับเปลี่ยนคีย์เหล่านี้จะเป็นการยาก ดังนั้นจึงจำเป็นและคุ้มค่าอย่างยิ่งในการออกแบบคีย์หลักและคีย์ภายนอกในระหว่างขั้นตอนการพัฒนา
คีย์หลัก:
ฐานข้อมูลเชิงสัมพันธ์อาศัยคีย์หลักซึ่งเป็นรากฐานสำคัญของสคีมาทางกายภาพของฐานข้อมูล คีย์หลักมีวัตถุประสงค์เพียงสองประการในระดับกายภาพ:
1. ระบุแถวโดยไม่ซ้ำกัน
2. เป็นวัตถุที่สามารถอ้างอิงได้อย่างมีประสิทธิภาพด้วยคีย์ต่างประเทศ
จากการใช้งานทั้งสองข้างต้น ต่อไปนี้เป็นหลักการบางประการที่ฉันปฏิบัติตามเมื่อออกแบบคีย์หลักในระดับกายภาพ:
1. คีย์หลักไม่ควรมีความหมายต่อผู้ใช้ ถ้าผู้ใช้เห็นข้อมูลในตารางรวมที่แสดงถึงความสัมพันธ์แบบกลุ่มต่อกลุ่มและบ่นว่ามีประโยชน์น้อย นั่นพิสูจน์ได้ว่าคีย์หลักได้รับการออกแบบมาอย่างดี
2. คีย์หลักควรเป็นคอลัมน์เดียวเพื่อปรับปรุงประสิทธิภาพของการดำเนินการรวมและตัวกรอง
หมายเหตุ: คนที่ใช้คีย์ผสมมักจะแก้ตัวด้วยเหตุผลสองประการ ซึ่งทั้งสองอย่างนี้ผิด ประการหนึ่งคือคีย์หลักควรมีความหมายที่แท้จริง อย่างไรก็ตาม การทำให้คีย์หลักมีความหมายเพียงอำนวยความสะดวกในการทำลายฐานข้อมูลโดยไม่ตั้งใจเท่านั้น ประการที่สองคือ คุณสามารถใช้วิธีนี้เพื่อใช้คีย์ต่างประเทศสองคีย์เป็นคีย์หลักในตารางรวมที่อธิบายความสัมพันธ์แบบกลุ่มต่อกลุ่ม ฉันไม่เห็นด้วยกับแนวทางนี้เนื่องจาก: คีย์หลักแบบผสมมักจะนำไปสู่คีย์ต่างประเทศที่ไม่ถูกต้อง นั่นคือเมื่อเข้าร่วมตาราง กลายเป็นตารางหลักของตารางทาสอื่น และกลายเป็นส่วนหนึ่งของคีย์หลักของตารางนี้ตามวิธีที่สองข้างต้น อย่างไรก็ตาม ตารางนี้อาจกลายเป็นตารางหลักของตารางทาสอื่น ๆ และคีย์หลักของตารางนั้น อาจกลายเป็นตารางหลักของตารางทาสอื่น ๆ ในฐานะที่เป็นส่วนหนึ่งของคีย์หลัก หากถูกส่งต่อไปในลักษณะนี้ ยิ่งตารางทาสอยู่ทีหลัง คีย์หลักก็จะมีคอลัมน์มากขึ้นเท่านั้น
3. อย่าอัปเดตคีย์หลัก เนื่องจากคีย์หลักไม่มีจุดประสงค์อื่นนอกจากการระบุแถวโดยไม่ซ้ำกัน จึงไม่มีเหตุผลที่จะอัปเดต หากจำเป็นต้องอัปเดตคีย์หลัก หลักการที่ว่าคีย์หลักไม่ควรมีความหมายต่อผู้ใช้จะถูกละเมิด
หมายเหตุ: หลักการนี้ใช้ไม่ได้กับข้อมูลที่มักจำเป็นต้องจัดระเบียบระหว่างการแปลงข้อมูลหรือการรวมฐานข้อมูลหลายรายการ
4. คีย์หลักไม่ควรมีข้อมูลที่เปลี่ยนแปลงแบบไดนามิก เช่น เวลาประทับ คอลัมน์เวลาสร้าง คอลัมน์เวลาแก้ไข ฯลฯ
5. คอมพิวเตอร์ควรสร้างคีย์หลักโดยอัตโนมัติ หากมนุษย์เข้ามาแทรกแซงการสร้างคีย์หลัก มันจะมีความหมายอื่นนอกเหนือจากการระบุแถวโดยไม่ซ้ำกัน เมื่อข้ามขอบเขตนี้ไปแล้ว อาจมีแรงจูงใจในการแก้ไขคีย์หลัก ดังนั้นคีย์ที่ระบบนี้ใช้เพื่อเชื่อมโยงและจัดการแถวของเรคคอร์ดจะตกไปอยู่ในมือของผู้ที่ไม่เข้าใจการออกแบบฐานข้อมูล
Foreign Key คือข้อจำกัดด้านความสมบูรณ์ในระดับฐานข้อมูล ซึ่งเป็นวิธีการใช้งานฐานข้อมูลของ "ความสมบูรณ์ในการอ้างอิง" ที่กล่าวถึงในหนังสือทฤษฎีฐานข้อมูลพื้นฐาน
แน่นอนว่าคุณสามารถลบแอตทริบิวต์ของคีย์นอกได้ หากคุณไม่ต้องการใช้ข้อจำกัดนี้อีกต่อไป ก็จะไม่มีผลกระทบใดๆ ต่อการเขียนโปรแกรม แต่เมื่อป้อนข้อมูล การตรวจสอบ "ความสมบูรณ์ของการอ้างอิง" จะไม่ดำเนินการกับข้อมูลที่ป้อน .
ตัวอย่างเช่น มีสองตาราง
A(a,b): a คือคีย์หลัก b คือคีย์นอก (จาก Bb)
B(b,c,d): b คือคีย์หลัก
หากฉันลบแอตทริบิวต์คีย์ต่างประเทศของฟิลด์ b ก็จะไม่มีผลกระทบต่อการเขียนโปรแกรม
ตามที่กล่าวไว้ข้างต้น b ใน A ว่างเปล่าหรือเป็นค่าที่มีอยู่ใน b ใน B เมื่อมีคีย์นอก ฐานข้อมูลจะตรวจสอบคุณโดยอัตโนมัติว่า b ใน A มีอยู่ใน b ใน B หรือไม่
1. นิพจน์ภายนอกแสดงถึงความสมบูรณ์ของการอ้างอิง: สิ่งนี้มีอยู่ในข้อมูลและไม่เกี่ยวข้องกับโปรแกรม ดังนั้นจึงควรปล่อยให้ DBMS
2. การใช้ฐานข้อมูลภายนอกนั้นง่ายและใช้งานง่าย และสามารถสะท้อนให้เห็นโดยตรงในแบบจำลองข้อมูล ซึ่งมีประโยชน์อย่างมากในแง่ของการออกแบบ การบำรุงรักษา ฯลฯ โดยเฉพาะอย่างยิ่งเมื่อวิเคราะห์ฐานข้อมูลที่มีอยู่ ประโยชน์นั้นชัดเจนมาก - ฉันไม่ได้วิเคราะห์เลย นานมาแล้วฉันพบฐานข้อมูลองค์กรที่มีอยู่ ข้อจำกัดความสมบูรณ์ในการอ้างอิงบางส่วนอธิบายโดยคีย์ต่างประเทศ และบางส่วนถูกนำไปใช้โดยใช้ทริกเกอร์ แน่นอนว่าอาจอยู่ในเอกสารแต่อาจไม่สมบูรณ์ แต่คีย์ต่างประเทศนั้นชัดเจนและใช้งานง่ายมาก
3. เนื่องจากเราสามารถใช้ทริกเกอร์หรือโปรแกรมเพื่อทำงานนี้ให้เสร็จสิ้นได้ (อ้างอิงถึงข้อจำกัดความสมบูรณ์ของการอ้างอิง) DBMS จึงได้เตรียมวิธีการไว้แล้ว ทำไมเราจึงควรทำด้วยตัวเอง? และควรจะบอกว่าสิ่งที่เราทำนั้นไม่ดีเท่า RDBMS ในความเป็นจริง RDBMS ยุคแรกไม่มีคีย์ต่างประเทศ แต่ตอนนี้พวกเขาทั้งหมดมีแล้ว ฉันคิดว่ามันสมเหตุสมผลสำหรับผู้จำหน่ายฐานข้อมูลที่จะเพิ่มคุณสมบัตินี้ จากมุมมองนี้ ปุ่มต่างประเทศจะสะดวกกว่า
4. เกี่ยวกับความสะดวก ตามโครงการที่ฉันเป็นผู้นำ โปรแกรมเมอร์ได้รายงานว่าการป้อนข้อมูลระหว่างการแก้ไขจุดบกพร่องส่วนใหญ่จะเป็นปัญหา: หากข้อมูลสามารถละเมิด Referential Integrity ได้ ดังนั้น Referential Integrity เองก็จะไม่ขัดแย้งกับธุรกิจชื่อเสียง ในขณะนี้ ไม่ควรใช้โปรแกรมทริกเกอร์ฟิวเจอร์ส มิฉะนั้น หมายความว่าข้อมูลไม่ถูกต้องและไม่ควรป้อนลงในฐานข้อมูลเลย! นอกจากนี้ นี่ควรเป็นส่วนหนึ่งของระบบทดสอบ: การบล็อกข้อมูลที่ผิดกฎหมาย ในความเป็นจริง โปรแกรมส่วนหน้าควรจัดการกับความล้มเหลวในการส่งนี้ ข้อมูลเป็นขององค์กร ไม่ใช่โปรแกรม ควรแยกโปรแกรมที่เก็บไว้ออกจากข้อมูลให้มากที่สุด และในทางกลับกัน
สุดท้ายนี้ ให้ฉันพูดถึงหลักการหลายประการในการสร้างกุญแจ:
1. สร้างคีย์ต่างประเทศสำหรับฟิลด์ที่เกี่ยวข้อง
2. คีย์ทั้งหมดจะต้องไม่ซ้ำกัน
3. หลีกเลี่ยงการใช้คีย์ผสม
4. คีย์ต่างประเทศจะเชื่อมโยงกับฟิลด์คีย์ที่ไม่ซ้ำเสมอ
บทความนี้มาจากบล็อก CSDN โปรดระบุแหล่งที่มาเมื่อพิมพ์ซ้ำ: http://blog.csdn.net/c04s31602/archive/2009/12/30/5107568.aspx