Hay un pequeño impacto en el rendimiento de las inserciones, actualizaciones y eliminaciones porque debe confirmarse el FK. Para un registro individual, esto normalmente sería tan leve como para ser imperceptible, a menos que comience a tener un número ridículo de FK asociadas a la tabla (Claramente, se necesita más tiempo para verificar otras 100 tablas que 2). Esto es algo bueno, no malo, ya que las bases de datos sin integridad no son confiables y, por lo tanto, inútiles. No debe cambiar la integridad por la velocidad. Ese impacto en el rendimiento generalmente se compensa con una mejor capacidad para optimizar los planes de ejecución.
Tenemos una base de datos de tamaño medio con alrededor de 9 millones de registros y FK donde deberían estar y rara vez notamos un golpe de rendimiento (excepto en una tabla mal diseñada que tiene más de 100 claves externas, es un poco lento borrar registros de esto ya que todo debe ser verificado). Casi todos los dba que conozco que tratan con grandes bases de datos de tamaño de terabyte y una verdadera necesidad de alto rendimiento en grandes conjuntos de datos insisten en restricciones de clave externa porque la integridad es clave para cualquier base de datos. Si las personas con bases de datos del tamaño de un terabyte pueden permitirse el golpe de rendimiento muy pequeño, entonces tú también puedes.
Los FK no se indexan automáticamente y, si no se indexan, pueden ocasionar problemas de rendimiento.
Honestamente, tomaría una copia de su base de datos, agregaría FK correctamente indexadas y mostraría la diferencia de tiempo para insertar, borrar, actualizar y seleccionar de esas tablas en comparación con las mismas de su base de datos sin las FK. Demuestra que no estarás causando un golpe de rendimiento. A continuación, muestre los resultados de las consultas que muestran registros huérfanos que ya no tienen significado porque el PK con el que están relacionados ya no existe. Es especialmente efectivo mostrar esto para las tablas que contienen información financiera ("Tenemos 2700 pedidos que no podemos asociar con un cliente" harán que la administración se levante y tome nota).
Solo una actualización de la historia completa: ahora se nos ha permitido usar claves foráneas, con la idea de que pueden deshabilitarse, si resultan en una pérdida de rendimiento. Así que gracias a todos por sus buenos puntos :-) – Steffen