Внешние ключи - лучший способ обеспечить ссылочную целостность базы данных. Избегать каскадов из-за магии - все равно что писать все на ассемблере, потому что вы не доверяете магии, стоящей за компиляторами.
Что плохо, так это неправильное использование внешних ключей, например, их создание в обратном направлении.
Пример Хуана Мануэля является каноническим примером, если вы используете код, есть гораздо больше шансов оставить поддельные DocumentItems в базе данных, которая придет и укусит вас.
Каскадные обновления полезны, например, когда у вас есть ссылки на данные, которые могут что-то изменить, скажем, первичный ключ таблицы пользователей - это комбинация имени и фамилии. Затем вы хотите, чтобы изменения в этой комбинации распространялись туда, где на них ссылаются.
@ Aidan, та ясность, на которую вы ссылаетесь, обуславливается высокой стоимостью, шансом оставить ложные данные в вашей базе данных, которая не мала . Для меня это, как правило, просто незнакомство с БД и неспособность определить, какие ФК существуют, прежде чем работать с БД, которые вызывают этот страх. Или это, или постоянное неправильное использование каскада, использование его там, где сущности не были концептуально связаны, или где вы должны сохранять историю.