당신이association에 foreign_key를 갖고 싶지 않은 이유가 있습니까?
Parent
has_many :children
Child
어떤 이유로 외국에 아이 (부모) 키와 해당 belongs_to :parent
이 바람직하지 않을 수 있는가가있는 경우?
자녀가 부모에게 액세스하는 것을 원치 않는 경우는 언제입니까?
당신이association에 foreign_key를 갖고 싶지 않은 이유가 있습니까?
Parent
has_many :children
Child
어떤 이유로 외국에 아이 (부모) 키와 해당 belongs_to :parent
이 바람직하지 않을 수 있는가가있는 경우?
자녀가 부모에게 액세스하는 것을 원치 않는 경우는 언제입니까?
트레이드 오프입니다. 외래 키에 대한 일반적인 인수는 외래 키에 대한 인덱스가 삽입/업데이트/삭제시 약간의 성능 오버 헤드를 초래한다는 것입니다. 모든 색인과 동일합니다.
그러나 인덱스는 해당 열을 통해 검색 할 때도 큰 이점을 제공합니다.
SELECT * FROM Child WHERE parent_id = :id
또한 고아 어린이를위한 검색 및 외래 키 제약 조건을 생략의 피할 수없는 결과이다 bollixed 참조를, 청소의 오버 헤드를 과소 평가하지 않습니다.
-- Typical chore: searching for orphaned child rows.
SELECT c.* FROM Child c LEFT OUTER JOIN Parent p
ON (c.parent_id = p.parent_id)
WHERE p.parent_id IS NULL;
또한 는 다형성 협회 또는 단체 - 속성 - 값으로 외래 키를 사용할 수없는 일부 데이터베이스 디자인이 있습니다. 그러나 이러한 디자인은 그 자체로 반 패턴입니다.
성능. 부모 레코드가 있는지 확인하기 위해 하위 레코드를 삽입 할 때 비용이 발생합니다. 상위 레코드에 계속 액세스 할 수 있습니다 (하위 테이블에 parentID 열이 있고 참조 무결성이 없다고 가정).