เมื่อฉันตรวจสอบโมเดลฐานข้อมูลสำหรับ RDBMS ฉันมักจะประหลาดใจที่พบข้อ จำกัด เพียงเล็กน้อยหรือไม่มีเลย (นอกเหนือจาก PK / FK) ตัวอย่างเช่นเปอร์เซ็นต์มักถูกเก็บไว้ในคอลัมน์ประเภทint
(ในขณะที่tinyint
จะเหมาะสมกว่า) และไม่มีCHECK
ข้อ จำกัด ในการ จำกัด ค่าให้อยู่ในช่วง 0..100 ในทำนองเดียวกันกับ SE.SE คำตอบที่แนะนำข้อ จำกัด การตรวจสอบมักจะได้รับความคิดเห็นที่แนะนำว่าฐานข้อมูลเป็นสถานที่ที่ไม่ถูกต้องสำหรับข้อ จำกัด
เมื่อฉันถามเกี่ยวกับการตัดสินใจที่จะไม่บังคับใช้ข้อ จำกัด สมาชิกในทีมตอบว่า:
พวกเขาไม่รู้ด้วยซ้ำว่ามีคุณสมบัติดังกล่าวอยู่ในฐานข้อมูลที่ชื่นชอบ เป็นที่เข้าใจได้จากโปรแกรมเมอร์ที่ใช้ ORM เท่านั้น แต่น้อยกว่ามากจาก DBA ที่อ้างว่ามีประสบการณ์มากกว่า 5 ปีกับ RDBMS ที่กำหนด
หรือว่าพวกเขาบังคับใช้ข้อ จำกัด ดังกล่าวในระดับแอปพลิเคชันและการทำซ้ำกฎเหล่านั้นในฐานข้อมูลไม่ใช่ความคิดที่ดีละเมิด SSOT
เมื่อเร็ว ๆ นี้ฉันเห็นโครงการมากขึ้นเรื่อย ๆ ซึ่งไม่ได้ใช้กุญแจต่างประเทศ ในทำนองเดียวกันฉันได้เห็นความคิดเห็นเล็กน้อยที่นี่ใน SE.SE ซึ่งแสดงให้เห็นว่าผู้ใช้ไม่สนใจการอ้างอิงที่สมบูรณ์มากนักทำให้แอปพลิเคชันจัดการกับมัน
เมื่อถามทีมถึงทางเลือกที่จะไม่ใช้ FK พวกเขาบอกว่า:
มันเป็น PITA เช่นเมื่อต้องลบองค์ประกอบที่อ้างอิงในตารางอื่น ๆ
หิน NoSQL และไม่มีกุญแจต่างประเทศอยู่ที่นั่น ดังนั้นเราไม่ต้องการพวกมันใน RDBMS
มันไม่ได้เป็นเรื่องใหญ่ในแง่ของประสิทธิภาพ (บริบทมักจะเป็นเว็บแอปพลิเคชันอินทราเน็ตขนาดเล็กที่ทำงานกับชุดข้อมูลขนาดเล็กดังนั้นแน่นอนว่าแม้ดัชนีจะไม่สำคัญมากเกินไป . ถึง 20 ms.)
เมื่อฉันดูที่แอปพลิเคชันตัวเองฉันสังเกตเห็นรูปแบบสองรูปแบบ:
แอปพลิเคชั่นจะทำการรักษาข้อมูลให้ถูกต้องและตรวจสอบก่อนที่จะส่งไปยังฐานข้อมูล ตัวอย่างเช่นไม่มีวิธีเก็บค่า
102
เป็นเปอร์เซ็นต์ผ่านแอปพลิเคชันแอปพลิเคชั่นสันนิษฐานว่าข้อมูลทั้งหมดที่มาจากฐานข้อมูลนั้นสมบูรณ์ นั่นคือถ้า
102
มาเป็นเปอร์เซ็นต์ไม่ว่าจะเป็นบางสิ่งบางอย่างจะล้มเหลวหรือจะปรากฏขึ้นตามที่ผู้ใช้นำไปสู่สถานการณ์แปลก ๆในขณะที่เคียวรีมากกว่า 99% ทำโดยแอปพลิเคชั่นเดียวเมื่อเวลาผ่านไปสคริปต์ก็เริ่มปรากฏขึ้น - สคริปต์ทำงานด้วยมือเมื่อต้องการหรืองาน cron การดำเนินการบางอย่างของข้อมูลจะดำเนินการด้วยตัวเองบนฐานข้อมูลเอง ทั้งสคริปต์และแบบสอบถาม SQL ด้วยตนเองมีความเสี่ยงสูงในการแนะนำค่าที่ไม่ถูกต้อง
และคำถามของฉันมาที่นี่:
อะไรคือเหตุผลในการสร้างแบบจำลองฐานข้อมูลเชิงสัมพันธ์โดยไม่มีข้อ จำกัด ในการตรวจสอบและในที่สุดแม้ไม่มีกุญแจต่างประเทศ?
สำหรับสิ่งที่คุ้มค่าคำถามนี้และคำตอบที่ฉันได้รับ (โดยเฉพาะการอภิปรายที่น่าสนใจกับโทมัส Kilian) นำให้ผมเขียนบทความด้วยกับข้อสรุปของฉันในเรื่องของข้อ จำกัด ฐานข้อมูลที่