Perché i vincoli vengono applicati nel database? Non sarà più flessibile inserirlo nel codice?
Sto leggendo un libro per principianti sull'implementazione di database, quindi lo sto chiedendo come principiante. Diciamo che ho progettato un database, incluso questo modello di entità:
entity type | sub-types
----------------+--------------------------------------------
Person | Employee, Student, ...
Student | Graduate, Undergraduate, ...
Employee | Teacher, Administrator, ...
Vincoli attuali:
- Una persona registrata sul sistema può essere solo uno studente o un dipendente.
- L'entità persona richiede l'unicità del numero sociale, che presumiamo che ogni persona possieda solo una singola unica (ovvero una chiave primaria abbastanza buona ). (vedi # 1)
Successivamente decidiamo di rimuovere il numero 1: se un giorno il college decide che anche il Teacher
( Employee
sottotipo) può essere Student
, seguendo i corsi nel loro tempo libero, è molto più difficile cambiare il design del database che potrebbe avere migliaia, milioni, miliardi, migliaia di voci anziché cambiare semplicemente la logica del codice: solo la parte che non ha permesso a una persona di essere registrata sia come studente che come dipendente.
(È molto improbabile, ma non riesco a pensare ad altro in questo momento. Apparentemente è possibile).
Perché ci preoccupiamo delle regole di business nella progettazione del database piuttosto che nel codice?
# 1: una nota 7 anni dopo, un esempio di vita reale:
ho visto un governo in cui a causa di un errore, gli SSN emessi erano duplicati: più persone, lo stesso SSN. Chi ha progettato il DB originale ha sicuramente fatto l'errore di non applicare questo vincolo di unicità nel database. (e in seguito un bug nell'applicazione originale? più applicazioni che utilizzano il database condiviso e non concordano dove inserire, controllare e applicare il vincolo? ...).
Questo bug continuerà a vivere nel sistema e in tutto il sistema sviluppato dopo di che si basano sul database di quel sistema originale, per molti anni a venire. Leggendo le risposte qui ho imparato ad applicare tutti i vincoli, il più possibile, saggiamente (non alla cieca) nel database per rappresentare il mondo fisico reale là fuori il meglio che posso.