Dependent delete_all vs foreign keys with cascading deletes

Nowadays with Rails, are you using dependent: :delete_all / :destoy_async or FKs with on_delete: :cascade at the DB schema level?

I know delete_all and cascading deletes don’t trigger callbacks so if your code is structured around callbacks then you’d use :destroy_async in those cases but what about the scenarios where no callbacks are being executed or instead of a callback you can easily shuffle around your code so that the triggered event is run during a job / controller action that triggers the delete?

Does your answer change with 10k vs 10 million records?

Typically you’re optimizing to ensure data correctness, resiliency in case of failure, performance and flexibility where flexibility in this case isn’t switching databases, it’s more about being flexible to change or adapt your solution later but that should be potentially weighted kind of low since the “what if” may never come.