次の「スキーマ/関係」設計を想定すると、カスケード削除のような操作で削除を処理するための推奨される方法は何ですか?
リレーショナル スキーマ:
+--------+ +--------+ | | 学生 |-*--------1-[在籍]-1--------*-| コース | +--------+ +--------+
モンゴDB:
+--------+ +--------+ | | 学生 |-*----------------*-| コース | +--------+ +--------+
学生をコースに登録するというこの古典的な設計を考えると、MongoDB を使用する場合、学生にコースのコレクションを持ち、その逆は適切なデータ モデルのようです (関係/登録テーブルには何もありません)。しかし、リレーショナルの世界から来て、コースを削除するセマンティクスをどのように処理すればよいでしょうか? つまり、コースが削除されると、すべての「登録」レコードも削除される必要があります。つまり、各学生レコードのコレクションからコースを削除する必要があります。2 つのクエリを起動する必要があるようです。1 つはコースを削除するためのもので、次に各学生のコレクションから削除するためのものです。追加のクエリなしでセマンティックのようにこの「カスケード削除」を実行する単一のクエリを持つ方法はありますか? データモデルを変更する必要がありますか?
注: 他のすべてのユース ケースでは、上記のデータ モデルは問題なく機能します。
- 学生
=>
を削除すると、その学生とそれに関連するコースのコレクションが削除されます。 - コースを削除したい学生
=>
は、コースの学生コレクションからコースを削除するだけです - 学生/コース
=>
の追加は、本質的に対応する「テーブル」に追加するだけです。
唯一のトリッキーなことは、コースの削除を処理することです。私はリレーショナルのバックグラウンドを持っており、これを理解することができないため、MongoDB でこのシナリオをどのように処理すればよいでしょうか。