เหตุใดจึงมีข้อ จำกัด ในฐานข้อมูล มันจะไม่ยืดหยุ่นกว่าที่จะใส่ไว้ในรหัสหรือไม่
ฉันกำลังอ่านหนังสือผู้เริ่มต้นใช้งานฐานข้อมูลดังนั้นฉันจึงขอให้เป็นผู้เริ่มต้น สมมติว่าฉันได้ออกแบบฐานข้อมูลรวมถึงโมเดลเอนทิตีนี้:
entity type | sub-types
----------------+--------------------------------------------
Person | Employee, Student, ...
Student | Graduate, Undergraduate, ...
Employee | Teacher, Administrator, ...
ข้อ จำกัด ในปัจจุบัน:
- ผู้ที่ลงทะเบียนในระบบสามารถเป็นนักเรียนหรือพนักงานเท่านั้น
- บุคคลนิติบุคคลต้องมีหมายเลขสังคมที่ไม่ซ้ำกันซึ่งเราสันนิษฐานว่าทุกคนมีเพียงหนึ่งเดียวที่ไม่ซ้ำกัน (aka, คีย์หลักที่ดีพอ ) (ดู # 1)
ต่อมาเราตัดสินใจที่จะลบหมายเลข 1: หากวันหนึ่งวิทยาลัยตัดสินใจว่าTeacher
( Employee
ประเภทย่อย) สามารถทำได้เช่นStudent
กันการเรียนในเวลาว่างของพวกเขามันยากมากที่จะเปลี่ยนการออกแบบฐานข้อมูลซึ่งอาจมีหลายพันล้านล้าน zillions ของรายการมากกว่าแค่การเปลี่ยนลอจิกในโค้ด: ส่วนที่ไม่อนุญาตให้บุคคลที่ลงทะเบียนทั้งในฐานะนักเรียนและพนักงาน
(มันไม่น่าจะเป็นไปได้มาก แต่ฉันไม่สามารถนึกถึงสิ่งอื่นได้ในตอนนี้ เห็นได้ชัดว่าเป็นไปได้)
ทำไมเราใส่ใจกฎธุรกิจในการออกแบบฐานข้อมูลมากกว่าในรหัส?
# 1: บันทึกย่อ 7 ปีต่อมาตัวอย่างชีวิตจริง:
ฉันเคยเห็นรัฐบาลที่มีข้อผิดพลาด SSNs ที่เผยแพร่ซ้ำซ้อน: หลายคน SSN เดียวกัน ผู้ที่ออกแบบฐานข้อมูลต้นฉบับนั้นทำผิดพลาดอย่างแน่นอนว่าจะไม่ใช้ข้อ จำกัด ที่ไม่ซ้ำกันนี้ในฐานข้อมูล (และในภายหลังมีข้อบกพร่องในแอปพลิเคชันดั้งเดิม - หลายแอปพลิเคชันโดยใช้ฐานข้อมูลที่ใช้ร่วมกันและไม่ยอมรับที่จะวางตรวจสอบและบังคับใช้ข้อ จำกัด ? ... )
ข้อผิดพลาดนี้จะยังคงมีอยู่ในระบบและระบบทั้งหมดที่พัฒนาขึ้นหลังจากนั้นใช้ฐานข้อมูลของระบบดั้งเดิมนั้นเป็นเวลาหลายปี การอ่านคำตอบที่นี่ฉันเรียนรู้ที่จะใช้ข้อ จำกัด ทั้งหมดให้มากที่สุดเท่าที่จะเป็นไปได้อย่างชาญฉลาด (ไม่ใช่คนตาบอด) ในฐานข้อมูลเพื่อเป็นตัวแทนของโลกทางกายภาพที่แท้จริงออกมาให้ดีที่สุดเท่าที่จะทำได้