모델링 관점에서이 질문을하겠습니다.
실제로 존재하지 않는 관계를 추가하지 않는 한 안전합니다. 추가하면 데이터의 무결성이 떨어지고 (중복성이 있기 때문에) 코드가 더 밀접하게 결합됩니다.
순환 참조가있는 것은 구체적으로 하나 자체 참조를 제외하고 실제로 필요한 경우를 보지 못했다는 것입니다. 트리 또는 그래프를 모델링하는 경우 자체 참조가 코드 품질의 관점에서 무해하므로 (종속성이 추가되지 않기 때문에) 그 자체가 필요합니다.
나는 자체가 아닌 참조가 필요하기 시작하면 즉시 그래프로 모델링 할 수 있는지 묻어 야합니다 (여러 엔티티를 하나의 노드로 축소). 어쩌면 순환 참조를 만드는 곳이 있지만 그래프로 모델링하는 것이 적절하지 않지만 그 점을 의심합니다.
사람들이 순환 참조가 필요하다고 생각하지만 실제로는 그렇지 않다는 위험이 있습니다. 가장 일반적인 경우는 "다수의 경우"입니다. 예를 들어, 여러 주소를 가진 고객이 있는데이 주소를 기본 주소로 표시해야합니다. has_address 와 is_primary_address_of의 두 가지 개별 관계 로이 상황을 모델링하는 것이 매우 유혹적 이지만 올바르지 않습니다. 그 이유 인 기본 주소 인 것은 사용자 및 주소 사이의 관계 분리되지 않지만, 대신는 속성 의 관계가 어드레스를 가지고. 왜 그런 겁니까? 도메인은 사용자의 주소로 제한되며 모든 주소가 아닙니다. 링크 중 하나를 선택하여 가장 강한 것으로 표시합니다 (기본).
(현재 데이터베이스에 대해 이야기 할 것입니다.) 많은 사람들이 "1 차"를 고유 포인터로 이해하고 외래 키가 일종의 포인터이기 때문에 두 관계 솔루션을 선택합니다. 외래 키를 사용해야합니다. 잘못된. 외래 키는 관계를 나타내지 만 "기본"은 관계가 아닙니다. 그것은 하나의 요소가 무엇보다 중요하고 나머지는 순서가없는 순서의 퇴화 된 경우입니다. 전체 주문을 모델링해야하는 경우 기본적으로 다른 선택 사항이 없으므로 관계의 속성으로 간주합니다. 그러나 당신이 그것을 타락시키는 순간, 관계와 관계가 아닌 것을 모델링하는 선택과 끔찍한 선택이 있습니다. 따라서 여기에는 과소 평가되는 것이 아닌 관계 중복성이 있습니다.
따라서 모델링하는 것에서 온 것이 확실하지 않으면 순환 참조가 발생하지 않도록합니다.
(참고 : 이것은 데이터베이스 디자인에 약간 편향되어 있지만 다른 영역에도 적용 할 수 있습니다.)