Restricciones de la base de datos FK vs restricciones de FK programáticas

Aunque me dirijo a MySQL / PHP, por el bien de mis preguntas, me gustaría aplicar esto en general a cualquier base de datos relacional que se use junto con un lenguaje de programación moderno. Otra suposición sería que el lenguaje está aprovechando un marco moderno, que, en algún nivel, manejaría restricciones de clave externa de manera implícita o tendría un medio para hacerlo explícitamente.

Mis preguntas:

¿Cuáles son los pros y los contras de crear restricciones FK en la base de datos en lugar de administrarlas en el nivel de la aplicación?

Desde el punto de vista del diseño, ¿deberían usarse ambos juntos o causaría conflicto?

Si no se deben usar juntos, ¿qué se considera la "mejor práctica" con respecto a qué enfoque usar?

Nota: Esta es una pregunta de la teoría del diseño. Debido a la amplia variedad de tecnología que podría usarse para satisfacer una implementación, no estoy realmente interesado en ninguna información específica sobre una implementación.

Respuestas a la pregunta(3)

Su respuesta a la pregunta