1

登録ユーザーが他の用途に関連付けて家族を作成できるようにする機能を作成する必要があります。私のデータベーステーブルは次のようになります。

db.persons-(ボブ、ジェーン、ティミーなど)

  • id
  • 名前
  • Eメール

db.persons_persons

  • id
  • person__id_parent
  • person_id_child
  • Relationtype_id

db.relationtypes-(配偶者、子供、甥など)

  • id
  • 名前

この構造を使用すると、persons_personsテーブルでBobがJaneの配偶者であることを指定できるはずです。db.persons_personsのレコードは、(psuedo)のようになります。

ID | person_parent | person_child | relationtype
1  | Bob           | Jane         | Spouse
2  | Bob           | Timmy        | Child

ボブとジェーンが結婚している場合、一方の子をもう一方の子に関連付ける必要があるため、これによりデータの断片化が発生する可能性があることを認識しています。しかし、それは私の質問ではありません。私の質問は、このデータベース設定がcakePHPアプリケーションで使用するのに「最も正しい」かどうかです。

4

1 に答える 1

2

まず、CakePHP は自動的にpeopleテーブルをpeopleコントローラーとpersonモデルに変換するので、それを呼び出す必要はありませんpersonsrelationships次に、ではなくルックアップ テーブルを呼び出しますpersons_persons

リレーションシップ テーブルのフィールドをperson_id, relation_idand と呼び、テーブル名relation_type_idにアンダースコアを追加して.relationtypesrelation_types

これはよりセマンティックだと思います。

hasAndBelongsToMany アソシエーションを引き続き使用し、CakePHP (1.2 のみ) によって提供される自動 " with " アソシエーションを利用して、関係タイプの HABTM テーブル内の追加データにアクセスできます。

しかし、私は使用したくなるでしょう:

  • Person多くを持っていますRelation
  • Relation所属Person先、、RelationRelationType

あなたのアプリでは、他の誰かと彼らとの関係によって暗示される人物関係はありますか? つまり、Person.id = 1 が見つかった場合、Person.id 2、3、4 などのすべての関係を取得できます。しかし、Person.id 2 が見つかった場合、Person.id = 1 は自動的に取得されません。その関係を表す関係テーブルのレコード。

これを実現するために、別の関連付けを設定できます。

  • PersonhasManyRelation1とforeignKeyperson_id
  • PersonhasManyRelation2とforeignKeyrelation_id
  • Relation所属Person先、、RelationRelationType

HABTM でもこの二重関係を実現できることに注意してください。

于 2008-10-22T19:04:19.900 に答える