Supongo que está hablando de restricciones de clave foránea impuestas por la base de datos. Probablemente ya esté utilizando claves externas, simplemente no le ha contado a la base de datos al respecto.
Supongamos que un programador está haciendo realmente esto de la manera correcta ya, entonces es lo que realmente necesitamos el concepto de claves externas?
Teóricamente, no. Sin embargo, nunca ha habido una pieza de software sin errores.
Los errores en el código de la aplicación generalmente no son tan peligrosos: identifica el error y lo corrige, y después de eso la aplicación se ejecuta sin problemas otra vez. Pero si un error permite que los datos no deseados ingresen a la base de datos, ¡entonces usted está atascado! Es muy difícil recuperarse de datos corruptos en la base de datos.
Considere si un error sutil en FogBugz permitió escribir una clave externa dañada en la base de datos. Puede ser fácil solucionar el error y rápidamente enviar la solución a los clientes en una versión de corrección de errores. Sin embargo, ¿cómo deberían corregirse los datos corruptos en docenas de bases de datos? Corregir el código ahora podría romperse repentinamente debido a que las suposiciones sobre la integridad de las claves externas ya no se mantienen.
En aplicaciones web, normalmente solo tiene un programa que habla a la base de datos, por lo que solo hay un lugar donde los errores pueden dañar los datos. En una aplicación empresarial, puede haber varias aplicaciones independientes que hablan en la misma base de datos (sin mencionar a las personas que trabajan directamente con el shell de la base de datos). No hay forma de asegurarse de que todas las aplicaciones sigan las mismas suposiciones sin errores, siempre y para siempre.
Si las restricciones están codificadas en la base de datos, entonces lo peor que puede pasar con los errores es que el usuario muestra un feo mensaje de error sobre alguna restricción SQL no satisfecha. Esto es mucho y es preferible dejar datos no deseados en su base de datos empresarial, donde a su vez romperá todas sus aplicaciones o conducirá a todo tipo de resultados erróneos o engañosos.
Ah, y las restricciones de clave externa también mejoran el rendimiento porque están indexadas de manera predeterminada. No puedo pensar en ninguna razón no para utilizar restricciones de clave externa.
"Supongamos que un programador está haciendo esto de la manera correcta" - No puedo imaginarme tal escenario. – recursive
"Clave externa" es una idea, no una tecnología. Es una regla relacional. Su pregunta es realmente si debe intentar aplicar la regla en su código o dejar que la base de datos lo ayude. Cuando se trata de simultaneidad, es mejor dejar que el motor de la base de datos haga cumplir la regla, ya que es consciente de TODO lo que ocurre en la base de datos, mientras que su código posiblemente no sea consciente. – Triynko
@Triynko, el concepto de claves foráneas no es una regla relacional. –