2012-08-24 4 views
3

나의 이해는 OneToOneField는 표 2에서 데이터의 단지 1 행에 사용된다는 점이다 (사람 이름)에서 한 행의 데이터에 연결 (좋아하는 과일), 및 외래 키는 데이터의 여러 행입니다 표 2 표 1 (브랜드/제조사)의 1 행 데이터에 (자동차 모델).사용할 대상 : OneToOne 대 ForeignKey?

내 질문은 내가 여러 테이블 만 에 다시 연결하는 각 테이블의 데이터 행이 하나만있는 경우 내가 무엇을 사용해야합니다. 예를 들면 : Table1은 "Cars", 다른 테이블은 "Insurance Info", "Car Info", "Repair History"입니다. ForeignKey 또는 OneToOne을 사용해야합니까?

답변

5

"개체 A는 개체 B가 많을 수 있습니까, 개체 B는 개체 A가 많을 수 있습니까?"라고 자문 해보십시오.

  1. 자동차는 1 개 또는 다수의 보험 정책을 수 있으며, 보험 정책은 하나 개의 자동차에 적용

    그 테이블 관계는 각각 다를 수 있습니다. 자동차에 하나만 장착 할 수 있다면 일대일 방식이 될 수 있습니다.

  2. 자동차에는 여러 수리 내역 행이있을 수 있으므로 자동차와의 세트 관계로 복구 기록에서 외래 키가됩니다.
  3. 자동차 정보는 django의 UserProfile 개념과 유사합니다. 진정으로 고유 한 정보라면 1 대 1이 될 수도 있습니다. 하지만 자동차 정보를 유사한 자동차 모델에 적용 할 수있는 일반적인 설명으로 정의하면 자동차 테이블에서 자동차 정보를 참조하는 외래 키가됩니다.
+0

고맙습니다. 매우 이해하기 쉽고 간단합니다. :) – Wesley

+0

확실한 것. 추가 정보가 필요하면 알려주세요. 그렇지 않으면 문제가 해결되면 체크 표시를 누르는 것을 잊지 마십시오. – jdi

2

ForeignKey는 다른 테이블 내부에있는 요소를 참조하고 있음을 의미합니다. OneToOne은 Table1과 Table2의 요소가 고유하게 바인딩 된 ForeignKey 유형입니다.

좋아하는 과일 예제는 OneToMany입니다. 왜냐하면 각각의 사람들은 독특한 과일을 좋아하기 때문입니다. 그러나 각각의 과일은 그 과일을 자신이 가장 좋아하는 사람들로 열거하는 여러 사람들을 가질 수 있습니다.

OneToOne 관계는 Car 예제로 수행 할 수 있습니다. CarInfo.VIN과 OneToOne 관계를 가질 수있는 자동차는 하나의 CarInfo에만 CarInfo가 연결될 수 있기 때문입니다 (반대의 경우도 마찬가지입니다).