私は彼らの用語がここで少し混乱していることに同意します. しかし、私は助けようとします:
多対一 (A)
ここで言及しているのは、親オブジェクトが単一の子オブジェクトを指す関係です。ただし、子オブジェクトは親関係を認識しません。彼らがこれを多対 1 と呼んでいる理由 (私は信じています) は、一意の 1 対 1 マッピングが強制されていないためです。技術的には、複数の顔をリレーションシップに保存するだけで、同じ鼻を複数の顔で使用できます。また、 Faceを削除すると、Noseは引き続き存在しますが、顔はありません。 (これは書き方がおかしくなってきました!)
親テーブルに 1 対 1 で格納 (B)
belongsTo
2 番目の例では、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
) 子モデルを持つように親を構成することによって作成されます。
うまくいけば、これは少し役に立ちます。(多対一の用語はまだぎこちないと思います。)