Я возьму этот вопрос с точки зрения моделирования.
Пока вы не добавите никаких отношений, которых на самом деле нет, вы в безопасности. Если вы добавите их, вы получите меньше целостности данных (поскольку существует избыточность) и более тесно связанный код.
Особенность циклических ссылок заключается в том, что я не видел ни одного случая, когда они были бы действительно необходимы, кроме одной ссылки на себя. Если вы моделируете деревья или графики, вам это нужно, и с этим все в порядке, потому что самоссылка безвредна с точки зрения качества кода (без добавления зависимости).
Я полагаю, что в тот момент, когда вы начинаете нуждаться в не-самостоятельной ссылке, сразу же вы должны спросить, не можете ли вы смоделировать ее как граф (сверните несколько сущностей в один узел). Может быть, есть случай между тем, когда вы делаете круговую ссылку, но моделирование ее в виде графика не подходит, но я в этом сильно сомневаюсь.
Существует опасность, что люди думают, что им нужна круговая ссылка, но на самом деле это не так. Наиболее распространенный случай - это случай «один из многих». Например, у вас есть клиент с несколькими адресами, из которых один должен быть помечен как основной. Очень заманчиво смоделировать эту ситуацию как два отдельных отношения has_address и is_primary_address_of, но это не правильно. Причина в том, что, будучи основным адресом, это не отдельная связь между пользователями и адресами, а вместо этого это атрибут отношения имеет адрес, Почему это? Поскольку его домен ограничен адресами пользователя, а не всеми адресами, которые там есть. Вы выбираете одну из ссылок и отмечаете ее как самую сильную (основную).
(Теперь поговорим о базах данных) Многие люди выбирают решение для двух отношений, потому что они понимают «первичный» как уникальный указатель, а внешний ключ является своего рода указателем. То есть внешний ключ должен быть тем, что нужно использовать, верно? Неправильно. Внешние ключи представляют отношения, но «первичные» не являются отношениями. Это вырожденный случай упорядочения, когда один элемент превыше всего, а остальные не упорядочены. Если вам нужно смоделировать общий порядок, вы, конечно, будете рассматривать его как атрибут отношения, потому что другого выбора нет. Но в тот момент, когда вы его дегенерируете, есть выбор, и довольно ужасный - моделировать что-то, что не является отношениями, как отношения. Итак, вот оно, избыточность отношений, которую нельзя недооценивать.
Так что я бы не допустил циклическую ссылку, если не будет абсолютно ясно, что она исходит от того, что я моделирую.
(примечание: это слегка смещает дизайн базы данных, но я бы поспорил, что это вполне применимо и к другим областям)