SQL Server прави просто броене на каскадни пътища и вместо да се опитва да разбере дали действително съществуват цикли, той приема най-лошото и отказва да създаде референтните действия (КАСКАДА):можете и трябва да създавате ограниченията без референтните действия. Ако не можете да промените дизайна си (или това би компрометирало нещата), тогава трябва да помислите за използването на тригери като последна мярка.
FWIW разрешаването на каскадни пътища е сложен проблем. Други SQL продукти просто ще игнорират проблема и ще ви позволят да създавате цикли, като в този случай ще бъде състезание кой ще презапише стойността последна, вероятно поради невежеството на дизайнера (например ACE/Jet прави това). Разбирам, че някои SQL продукти ще се опитат да разрешат прости случаи. Фактът остава, SQL Server дори не се опитва, играе го изключително безопасно, като забранява повече от един път и поне ви казва така.
Самият Microsoft съветва използването на тригери вместо FK ограничения.