2

セクション 5.2.1.1には A ~ C の例があり、少し混乱しているように見えます。

例 B: これは、例 A (つまり、同じテーブル設定) のように多対 1 の関係ですか? 最後に「真の1対1にするためには、hasOneプロパティを使う…」と書いてあります。

例 C: hasOne を使用する場合は、begsTo を使用しないでください。それは暗示されていますか?

例 C で 2 つのバリエーションを示しているのはなぜですか? 最初のものは問題を起こしやすいですか?

有効な多対 1 および 1 対 1 の組み合わせをすべて理解しようとしています。

ありがとう

4

1 に答える 1

3

私は彼らの用語がここで少し混乱していることに同意します. しかし、私は助けようとします:

多対一 (A)

ここで言及しているのは、親オブジェクトが単一の子オブジェクトを指す関係です。ただし、子オブジェクトは親関係を認識しません。彼らがこれを多対 1 と呼んでいる理由 (私は信じています) は、一意の 1 対 1 マッピングが強制されていないためです。技術的には、複数の顔をリレーションシップに保存するだけで、同じ鼻を複数ので使用できます。また、 Faceを削除すると、Noseは引き続き存在しますが、顔はありません。 (これは書き方がおかしくなってきました!)

親テーブルに 1 対 1 で格納 (B)

belongsTo2 番目の例では、1 対 1 の関係を強制するためにを追加しています。これは、Noseの存在がFaceの存在に依存することを意味します。だから、今は真の一対一の関係です。この関係の外部キーは、構成方法により、 Faceテーブルに格納されます (次のセクションを参照)。

Child テーブルに 1 対 1 で格納 (C)

最後の例では、まだ 1 対 1 です。ただし、simpleNose noseを変更するstatic hasOne = [nose:Nose]と、外部キーがNoseテーブルに移動されます。この場合、 を使用します。これはbelongsTo、各Noseは 1 つのFaceにしか関連付けることができないためです。

要約すれば

  • 単純な割り当てModel modelにより、子に対して単一の一方向の関係が作成されます。子は親関係を直接参照する方法がなく、実際には複数の親モデルに関連付けられている可能性があります。
  • 双方向の 1 対 1 の割り当てでは、子からbelongTo親への割り当てが必要であり、カスケードによってデータの整合性も確保されます。
  • 子に格納された双方向の 1 対 1 は、1 つの ( hasOne) 子モデルを持つように親を構成することによって作成されます。

うまくいけば、これは少し役に立ちます。(多対一の用語はまだぎこちないと思います。)

于 2011-08-14T18:20:53.147 に答える