복붙노트

[SQL] 왜 외래 키에 대한 단방향 one-to-many 연관을 방지하는 것이 좋습니다? [복제]

SQL

왜 외래 키에 대한 단방향 one-to-many 연관을 방지하는 것이 좋습니다? [복제]

섹션 7.2.3 일대에서 최대 절전 모드 온라인 설명서에서, 그것은, 언급 한 것 :

그 이유를 알고 싶습니다? 내 마음에 오는 유일한 것은 그것은 캐스케이드 삭제시 문제를 만들 수 있습니다. 예를 들어, 사람 외래 키에 많은 관계로 하나의 주소를 참조하고, 주소는 사람이 전에 삭제를 거부 할 것입니다.

사람이 추천 뒤에 이론적 근거를 설명 할 수 있습니까?

여기에 참조 문서 내용에 대한 링크는 다음과 같습니다 7.2.3. 일대

여기 실제 내용을 붙여 복사했다 :

해결법

  1. ==============================

    1.이 두 가지 측면이 있습니다 :

    이 두 가지 측면이 있습니다 :

    다음은 이러한 것들의 두 번째 주소 CalmStorm의 삭제 응답 링크 @ 스레드,하지만하자 그것으로 시작합니다.

    즉, 스레드, 거기는 "연결"porpuses에 대한 (원문)입니다 그렇지 않으면 일대 접근 방식은 '그 실체에 속하지 않는 열이 많은 쪽 테이블을 채 웁니다 때문에 테이블을 조인과 일대 다 관계를 교체하는 것이 좋습니다 '. 이 전술은 최대 절전 모드 층에서 깨끗한 모델이 될 수 있지만, 불행하게도 그것은 깨진 데이터베이스에 발생합니다.

    SQL은 자식 레코드가 부모가 주장 할 수 있기 때문에, 부모가 아이를 가지고 있어야하는 규칙을 적용 할 수있는 방법은 없습니다. 결과적으로 테이블, 결말이 고아 자식 레코드, 외래 키를 미연에 방지하기위한 것 바로 그 일을 할 수있게된다 있다는 것을 가입에 테이블이 항목이 주장 할 수있는 방법은 없습니다.

    나는 여러 가지 다른 반대가 있지만 다음으로 가장 중요한 것은 부적절하다. 교차로 테이블은 다 대다 관계를 표현하기위한 것입니다. 일대 다 관계를 표현하기 위해 그들을 사용하는 것은 혼란과 내 취향에 비하면 너무 많은 추가 데이터베이스 개체가 필요합니다.

    따라서, 제 2 측면에 : 단방향 one to many 연관. 이 문제는 최대 절전 모드는 기본적으로이를 처리하는 독특한 패션이다. 우리는 부모와 같은 거래에서 아이를 삽입하는 경우, Hibernate는 다음 부모의 키를 사용하여 아이를 업데이트, 아이 레코드, 다음이 부모를 삽입 삽입합니다. 이, 연기 외래 키 제약 (우웩!) 아마, 연기 null가 아닌 제약도 (더블 우웩) 등이 필요합니다.

    이에 대한 해결 방법 중 몇 가지 있습니다. 하나는 birectional 일대 다 연결을 사용하는 것입니다. 에 따르면 문서에이 가장 일반적인 방법이다 인용. 다른 방법은 자식 객체의 매핑을 조정할 것입니다 그러나 그것은 자신의 파급 효과가있다.

  2. from https://stackoverflow.com/questions/2092611/why-is-it-recommended-to-avoid-unidirectional-one-to-many-association-on-a-forei by cc-by-sa and MIT license