Bu soruyu modelleme bakış açısıyla ele alacağım.
Aslında orada olmayan herhangi bir ilişki eklemediğiniz sürece, güvende olursunuz. Bunları eklerseniz, verilerde daha az bütünlük elde edersiniz (fazlalık olduğu için) ve daha sıkı bir şekilde birleştirilmiş kod elde edersiniz.
Özel olarak dairesel referanslara sahip olan şey, tek bir referans dışında, aslında ihtiyaç duyulacak bir durum görmedim. Ağaçları veya grafikleri modelliyorsanız, buna ihtiyacınız vardır ve tamamen iyidir, çünkü kendi kendine referans, kod kalitesi açısından zararsızdır (bağımlılık eklenmez).
Kişisel olmayan bir referansa ihtiyaç duyduğunuz anda derhal bunu bir grafik olarak modelleyemeyeceğinizi sormalısınız (çoklu varlıkları bir düğümde daraltın). Belki de döngüsel referans yaptığınız bir durum vardır ancak bunu grafik olarak modellemek uygun değildir, ancak bundan şüpheliyim.
İnsanların dairesel bir referansa ihtiyaç duyduklarını düşünmeleri tehlikesi var ama aslında buna ihtiyaç duymuyor. En sık karşılaşılan durum, "Birçoğunun vakası" dır. Örneğin, birincil adres olarak işaretlenmesi gereken birden fazla adrese sahip bir müşteriniz var. Bu durumu iki ayrı ilişki has_address ve is_primary_address_of olarak modellemek çok cazip ama doğru değil. Bunun nedeni ise birincil adres olma kullanıcılar ve adresleri arasındaki ayrı bir ilişki değil ama bunun yerine o bir öznitelik ilişki adresi vardır. Neden? Çünkü etki alanı kullanıcının adresleriyle sınırlı, oradaki tüm adreslerle sınırlı değil. Bağlantılardan birini seçip en güçlü (birincil) olarak işaretlersiniz.
(Şimdi veritabanları hakkında konuşmaya gidiyoruz) Birçok kişi iki ilişki çözümünü tercih ediyor, çünkü "birincil" in benzersiz bir işaretçi olduğunu ve yabancı anahtarın bir tür işaretçi olduğunu anlıyorlar. Yani yabancı anahtar kullanılacak olan şey olmalı, değil mi? Yanlış. Yabancı anahtarlar ilişkileri temsil eder, ancak "birincil" bir ilişki değildir. Bir elemanın her şeyden önce olduğu ve geri kalanının sipariş edilmediği bir düzenin yozlaştırılmış bir halidir. Bir toplam siparişi modellemeniz gerekiyorsa, elbette bunu başka bir seçenek olmadığı için bir ilişkinin niteliği olarak kabul edersiniz. Ancak, onu yozlaştırdığın anda, bir ilişki olarak ilişki olmayan bir şeyi modellemek için bir seçenek ve oldukça korkunç bir durum var. Yani burada geliyor - kesinlikle aşılması gereken bir şey olmayan ilişki fazlalığı.
Bu yüzden, modellediğim şeyden geldiği kesin olmadığı sürece dairesel bir referansın oluşmasına izin vermem.
(not: bu biraz veritabanı tasarımına eğilimlidir, ancak bahse girerim diğer alanlarda da oldukça uygulanabilir)