Obviamente, ¿está sugiriendo que CONSTRAINT
las aplicaciones que tienen acceso a esa base de datos deben aplicar s en una base de datos?
Hay muchas razones por las cuales esta es una mala idea (mala, mala ...).
1) Si está construyendo un "motor de" restricción "" (es decir, dentro de su código de aplicación), simplemente está emulando lo que Oracle / SQL Server / MySQL / PostgreSQL / <. Whoever ...> ha gastado años escribiendo. Su código CONSTRAINT ha sido probado durante esos años por millones de usuarios finales.
2) Con el debido respeto hacia usted y su equipo, no lo hará bien en cuestión de años: desde aquí , el código MySQL solo cuesta 40 millones de dólares. Y MySQL es el más barato de los 3 servidores anteriores, y ni siquiera implementan CHECK CONSTRAINT. Obviamente, obtener RI (Integridad referencial) completamente correcto es difícil.
Solía frecuentar los foros de Oracle y no puedo decirle la cantidad de veces que un administrador / programador pobre ha tenido un proyecto en el que el genio que tenía su trabajo antes tuvo la idea "brillante" de hacer lo que usted sugiere. .
Jonathan Lewis (escribió un libro de 550 páginas sobre los fundamentos del optimizador de Oracle ) dice que no. 2 de sus Desastres de diseño en otro libro (" Tales of the Oak Table " - The Oak Table es un grupo de expertos de Oracle) es
- Verificaremos la integridad de los datos a nivel de aplicación en lugar de aprovechar las capacidades de comprobación de restricciones de Oracle.
3) Incluso si por algún milagro puede implementar adecuadamente RI, tendrá que volver a implementarlo por completo una y otra vez para cada aplicación que toque esa base de datos, y si sus datos son importantes, entonces las nuevas aplicaciones lo harán. Elegir esto como paradigma los llevará a usted y a sus compañeros programadores (sin mencionar el personal de soporte y las ventas) a una vida de constante lucha contra incendios y miseria.
Puede leer más acerca de por qué implementar restricciones de datos a nivel de aplicación es una locura aquí , aquí y aquí .
Para responder específicamente a su pregunta:
¿Por qué se declaran en absoluto? Parece muy útil, pero ¿es realmente necesario tener una base de datos que funcione?
La razón por la que KEY
s (ya sea PRIMARY
, FOREIGN
, UNIQUE
o simplemente normal INDEX
en) se declaran es que, si bien es no es estrictamente necesario para una base de datos para tenerlos para que funcione, es absolutamente necesario para que puedan ser declaradas para que funcione bien .