(어떤 나쁜 영어 죄송합니다)레일
에서 다형성 협회를 피하는 것은의는 A, B, C를 각각의 모델은 하나 개의 주소를 가지고 내가 모델이 있다고 가정하자.
"SQL 반 패턴 : 데이터베이스 프로그래밍의 함정 피하기"(제 7 장 - 다형성 연관) "공통 수퍼 테이블"(또는 기본 테이블이라고도 함)을 사용하여 이러한 연결을 피할 수있는 방법이 있습니다. 조상 테이블).
다형, 그것은 다음과 같습니다
table addresses:
id: integer
parent_type:string # 'A', 'B' or 'C'
parent_id: integer
을 당신이 교차 테이블을 사용할 수 있습니다 알고 있지만, 다음과 같은 솔루션은보다 세련된 외모 : 주소와 A, B, C를 연결 다형
대신을의 조리법은 ID 필드 (대리 키 또는 의사 키) 만있는 슈퍼 테이블 (주소 지정)을 만드는 것이 좋습니다. 그런 다음 다른 테이블은 주소 지정을 참조합니다. 그런 식으로 작성자는 "외래 키에 의한 데이터베이스의 데이터 무결성 강화에 의존 할 수 있습니다"라고 말합니다. 그래서, 그것은 다음과 같습니다
table addressing
id: integer
table addresses
id: integer
addressing_id: integer (foreign_key)
zip: string
table a
id: integer
addressing_id: integer (foreign_key)
name: string
table b
id: integer
addressing_id: integer (foreign_key)
name: string
table c
id: integer
addressing_id: integer (foreign_key)
name: string
SQL 쿼리는 다음과 같습니다
SELECT * from a
JOIN address USING addressing_id
WHERE a.addressing_id = 1243
질문입니다 : 어떻게 레일 이러한 시나리오를 코드? 나는 여러 가지 방법으로 성공하지 못했습니다.
당신은 협회 [1]에 대한 RoR 가이드를 볼 수 있습니다. 아마도 : through 옵션으로 이것을 할 수있는 방법을 찾을 수 있습니다. 죄송하지만이 순간에는 시도 할 수 없습니다. [1] : http://guides.rubyonrails.org/association_basics.html#the-has_one-through-association –