モデリングの観点からこの質問を取り上げます。
実際に存在しない関係を追加しない限り、安全です。それらを追加すると、データの整合性が低くなり(冗長性があるため)、より密結合されたコードになります。
具体的には、循環参照は、自己参照という1つを除いて、実際に必要になる場合を見たことがないということです。ツリーまたはグラフをモデル化する場合、それが必要です。コード品質の観点から自己参照は無害なので、完全に問題ありません(依存関係は追加されません)。
非自己参照が必要になった瞬間に、すぐにそれをグラフとしてモデル化できないかどうか尋ねる必要があると思います(複数のエンティティを1つのノードに折りたたむ)。循環参照を作成する場合もあるかもしれませんが、グラフとしてモデル化することは適切ではありませんが、私はそれを非常に疑います。
人々は循環参照が必要であると考えるが、実際には必要ではないという危険があります。最も一般的なケースは「1対多のケース」です。たとえば、複数のアドレスを持つ顧客がいて、そこから1つをプライマリアドレスとしてマークする必要があります。has_addressとis_primary_address_ofの 2つの別個の関係としてこの状況をモデル化することは非常に魅力的ですが、正しくありません。理由は、プライマリアドレスであることは、ユーザーとアドレスの間の別個の関係ではなく、代わりにアドレスを持つ関係の属性であるためです。。何故ですか?そのドメインはユーザーのアドレスに限定されており、存在するすべてのアドレスに限定されないためです。リンクの1つを選択し、それを最強(プライマリ)としてマークします。
(データベースについて説明します)多くの人は、「プライマリ」を一意のポインターであり、外部キーは一種のポインターであると理解しているため、2関係ソリューションを選択します。だから、外部キーを使用する必要がありますよね?違う。外部キーは関係を表しますが、「プライマリ」は関係ではありません。これは、1つの要素が何よりも優先され、残りの要素が順序付けされていない順序の縮退したケースです。全体の順序をモデル化する必要がある場合、基本的に他の選択肢はないため、もちろんそれを関係の属性と見なします。しかし、あなたがそれを縮退させた瞬間には、リレーションシップではない何かをリレーションシップとしてモデル化するという選択肢があり、非常に恐ろしいものがあります。だからここに来る-関係の冗長性は確かに過小評価されるものではありません。
そのため、モデリングしているものに由来するものであることが完全に明らかでない限り、循環参照を許可しません。
(注:これはデータベース設計にわずかに偏っていますが、他の領域にもかなり適用できると思います)