Stai ovviamente suggerendo che le applicazioni CONSTRAINT
di un database dovrebbero essere applicate dalle applicazioni che / che accedono a quel database?
Ci sono molte ragioni per cui questa è una cattiva (cattiva, cattiva ...) idea.
1) Se stai costruendo un motore "vincolo" "limitato" (cioè all'interno del codice dell'applicazione), allora stai semplicemente emulando ciò che Oracle / SQL Server / MySQL / PostgreSQL / <. Chiunque ...> abbia speso anni di scrittura. Il loro codice VINCITORE è stato testato in quegli anni da milioni di utenti finali.
2) Con tutto il rispetto per te e il tuo team, non riuscirai a farlo bene anche nel giro di pochi anni - da qui il solo codice MySQL costa 40 milioni di dollari. E MySQL è il più economico dei 3 server sopra, e non implementano nemmeno CHECK CONSTRAINTs. Ovviamente, ottenere il RI (integrità referenziale) completamente giusto è difficile.
Frequentavo spesso i forum Oracle e non posso dirti quante volte un povero manager / programmatore ha avuto un progetto affidato a lui dove il genio che prima aveva il suo lavoro aveva la "brillante" idea di fare ciò che suggerisci .
Jonathan Lewis (ha scritto un libro di 550 pagine sui fondamenti dell'ottimizzatore Oracle ) dà come no. 2 dei suoi disastri di progettazione in un altro libro (" Tales of the Oak Table " - Oak Table è un gruppo di esperti Oracle) è
- Verificheremo l'integrità dei dati a livello di applicazione invece di sfruttare le capacità di controllo dei vincoli di Oracle.
3) Anche se per miracolo puoi implementare correttamente il RI, dovrai reimplementarlo completamente ogni volta per ogni applicazione che tocchi quel database - e se i tuoi dati sono importanti, allora lo faranno le nuove applicazioni. Scegliere questo come paradigma porterà te e i tuoi colleghi programmatori (per non parlare del personale di supporto e delle vendite) a una vita di costante lotta antincendio e miseria.
Puoi leggere di più sul perché implementare VINCOLI di dati a livello di applicazione è assolutamente folle qui , qui e qui .
Per rispondere in modo specifico alla tua domanda:
Proprio perché sono stati dichiarati? Sembra molto utile, ma in realtà è necessario disporre di un database che funzioni
La ragione per cui KEY
s (o PRIMARY
, FOREIGN
, UNIQUE
o semplicemente ordinarie INDEX
ES) vengono dichiarate è che, mentre è non è strettamente necessaria per un database di provvedere alla loro funzione per esso, è assolutamente necessario per loro da dichiarare per la sua funzione di bene .