К сожалению, именно FK и связанные с ними механизмы в определенных ситуациях и ведут к дедлокам. Мы имеем ограниченные возможности влиять на поведение движка и оптимизатора, но и эти возможности (хинты) часто ведут к обратным результатам.
Проектируя систему, разработчик должен быть осведомлен об особенностях использования определенных подходов и решений в конкретном инструменте, как бы красиво и логично они не звучали в теории.
Да, если следовать сухой теории построения отношений в БД, то FK очень полезная штука. Но лодка "красивой теории" разбивается о "быт" реализации конкретной СУБД и особенностей работы, с блокировками в частности, а также прямоты рук архитектора БД и разработчиков, особенно при реализации систем с высокой конкуренцией.
Использование FK (например в MS SQL) ведет к дэдлокам, и проблемам с производительностью БД, которые очень трудно диагностировать, постоянному сканированию индексов, даже при том что данные не менялись, накладным расходам на индексы и другим занятным штукам.
К сожалению, именно FK и связанные с ними механизмы в определенных ситуациях и ведут к дедлокам. Мы имеем ограниченные возможности влиять на поведение движка и оптимизатора, но и эти возможности (хинты) часто ведут к обратным результатам.
Проектируя систему, разработчик должен быть осведомлен об особенностях использования определенных подходов и решений в конкретном инструменте, как бы красиво и логично они не звучали в теории.
Да, если следовать сухой теории построения отношений в БД, то FK очень полезная штука.
Но лодка "красивой теории" разбивается о "быт" реализации конкретной СУБД и особенностей работы, с блокировками в частности, а также прямоты рук архитектора БД и разработчиков, особенно при реализации систем с высокой конкуренцией.
Использование FK (например в MS SQL) ведет к дэдлокам, и проблемам с производительностью БД, которые очень трудно диагностировать, постоянному сканированию индексов, даже при том что данные не менялись, накладным расходам на индексы и другим занятным штукам.
Примеры можете найти здесь:
https://sqlperformance.com/2014/06/sql-performance/the-snapshot-isolation-level
https://sqlserverfast.com/blog/hugo/2006/07/snapshot-isolation-a-threat-for-integrity-part-1/
https://sqlserverfast.com/blog/hugo/2006/07/snapshot-isolation-a-threat-for-integrity-part-2/