Це питання я візьму з точки зору моделювання.
Поки ви не додасте жодних стосунків, яких насправді немає, ви в безпеці. Якщо ви їх додаєте, ви отримуєте меншу цілісність даних (тому що є надмірність) і більш щільно пов'язаний код.
Річ із циркулярними посиланнями полягає в тому, що я не бачив жодного випадку, коли вони були б фактично потрібні, окрім однієї - самонавіювання. Якщо ви моделюєте дерева або графіки, вам це потрібно, і це абсолютно добре, тому що само посилання нешкідливе з точки зору якості коду (не додається залежність).
Я вважаю, що в момент, коли вам починають потрібні несамостійні посилання, негайно вам слід запитати, чи не можете ви її моделювати як графік (згортайте кілька сутностей на один вузол). Можливо, є такий випадок, коли ви робите круговий довідник, але моделювати його як графік не доречно, але я дуже сумніваюся в цьому.
Існує небезпека, що люди думають, що їм потрібна циркулярна довідка, але насправді цього немає. Найпоширеніший випадок - "Справа" один із багатьох ". Наприклад, у вас є клієнт з декількома адресами, з яких одна повинна бути позначена як основна адреса. Дуже спокусливо моделювати цю ситуацію як два окремих відносини has_address та is_primary_address_of, але це не правильно. Причина полягає в тому, що, будучи основною адресою, це не окремий зв’язок між користувачами та адресами, а натомість це атрибут відносини, який має адресу. Чому так? Тому що його домен обмежений адресами користувача, а не всіма адресами. Ви вибираєте одне з посилань і відзначаєте його як найсильніший (первинний).
(Зараз поговоримо про бази даних) Багато людей вибирають рішення для двох відносин, оскільки розуміють "первинний" як унікальний покажчик, а зовнішній ключ є своєрідним вказівником. Тож іноземний ключ повинен бути предметом для використання, правда? Неправильно. Зовнішні ключі представляють відносини, але "первинний" - це не відносини. Це вироджений випадок впорядкування, коли один елемент вище, а решта не впорядкований. Якщо вам потрібно моделювати повне замовлення, ви, звичайно, вважаєте це атрибутом відносин, оскільки іншого вибору в основному немає. Але в той момент, коли ви її вироджуєте, є вибір і досить жахливий - моделювати щось, що не є стосунком як відносинами. Отож ось що - це надмірність відносин, яку, звичайно, не варто недооцінювати.
Отже, я б не допустив циркулярного посилання, якщо не буде абсолютно зрозуміло, що це походить від речі, яку я моделюю.
(зауважте: це дещо упереджено до дизайну баз даних, але я б сподівався, що це досить застосовно і до інших областей)