Przyjmę to pytanie z punktu widzenia modelowania.
Dopóki nie dodasz żadnych relacji, których tak naprawdę nie ma, jesteś bezpieczny. Jeśli je dodasz, uzyskasz mniej integralności danych (ponieważ występuje nadmiarowość) i ściślej powiązany kod.
W przypadku odnośników cyklicznych chodzi konkretnie o to, że nie widziałem przypadku, w którym byłyby one faktycznie potrzebne, z wyjątkiem jednego odniesienia do siebie. Jeśli modelujesz drzewa lub wykresy, potrzebujesz tego i wszystko jest w porządku, ponieważ samoodniesienie jest nieszkodliwe z punktu widzenia jakości kodu (bez dodanej zależności).
Uważam, że w chwili, gdy zaczynasz potrzebować odniesienia innego niż ja, natychmiast powinieneś zapytać, czy nie możesz modelować go jako wykresu (zwinąć wiele bytów w jeden - węzeł). Być może jest jakiś przypadek, w którym tworzysz odniesienie kołowe, ale modelowanie go jako wykresu jest nieodpowiednie, ale bardzo w to wątpię.
Istnieje niebezpieczeństwo, że ludzie myślą, że potrzebują okólnika, ale w rzeczywistości nie potrzebują. Najczęstszym przypadkiem jest „przypadek jednego z wielu”. Na przykład masz klienta z wieloma adresami, z których jeden powinien być oznaczony jako adres podstawowy. Modelowanie tej sytuacji jest bardzo kuszące, ponieważ dwie osobne relacje has_address i is_primary_address_of, ale nie są poprawne. Powodem jest to, że bycie adresem podstawowym nie jest oddzielną relacją między użytkownikami a adresami, ale jest atrybutem relacji ma adres. Dlaczego? Ponieważ jego domena jest ograniczona do adresów użytkowników, a nie do wszystkich dostępnych adresów. Wybierz jeden z linków i oznacz go jako najsilniejszy (główny).
(Zamierzam teraz mówić o bazach danych) Wiele osób wybiera rozwiązanie dwóch relacji, ponieważ rozumie, że „podstawowy” jest unikalnym wskaźnikiem, a klucz obcy jest rodzajem wskaźnika. Więc klucz obcy powinien być odpowiedni, prawda? Źle. Klucze obce reprezentują relacje, ale „pierwotny” nie jest relacją. Jest to zdegenerowany przypadek zamówienia, w którym jeden element jest przede wszystkim, a reszta nie jest uporządkowana. Gdybyś musiał modelować całkowite uporządkowanie, oczywiście wziąłbyś to za atrybut relacji, ponieważ w zasadzie nie ma innego wyboru. Ale w chwili, gdy go degenerujesz, istnieje wybór - i to okropny - modelowanie czegoś, co nie jest relacją jako relacją. Nadchodzi więc - nadmiar związku, którego z pewnością nie należy lekceważyć.
Nie pozwoliłbym więc na pojawienie się cyklicznego odniesienia, chyba że jest absolutnie jasne, że pochodzi ono z tego, co modeluję.
(uwaga: jest to nieco stronnicze w stosunku do projektu bazy danych, ale założę się, że ma to również zastosowanie w innych obszarach)