NoSQL
まず、私は&が大好きだということを言いたいのですがMongoDB
、そのschema-less
側面には大きな懸念があります。
2つのテーブルがあるとしましょう。従業員と映画。
そして...私は時々間違ったテーブルにオブジェクトを保存したい非常に愚かなdata layer
/を持っています。framework
ある日、 aMovie
がテーブルに保存されEmployees
ます。このような:
> use mongoTests;
switched to db mongoTests
> db.employees.insert({ name : "Max Power", sex : "Male" });
> db.employees.find();
{ "_id" : ObjectId("4fb25ce6420141116081ae57"), "name" : "Max Power", "sex" : "Male" }
> db.employees.insert({ title : "Fight Club", actors : [{ name : "Brad Pitt" }, { name : "Edward Norton" }]});
> db.employees.find();
{ "_id" : ObjectId("4fb25ce6420141116081ae57"), "name" : "Max Power", "sex" : "Male" }
{ "_id" : ObjectId("4fb25db834a31eb59101235b"), "title" : "Fight Club", "actors" : [ { "name" : "Brad Pitt" }, { "name" : "Edward Norton" } ] }
これは非常に間違っています。
コンテキストを切り替えて、 MoviesとCreditCardsについて考えてみましょう(何らかの理由で、このコンテキストでは、クレジット カードは DB 内にクリア テキストで格納されます)。これは非常に間違っていますか?
オブジェクト構造を使用しようとして、別のまったく未知の構造を受け取るため、コードはおそらく爆発するでしょう。
さらに悪いことに、コードは実際に機能し、Web ストアの訪問者は実際に「Rent a movie」リストにクレジット カード情報を表示します。
このような脅威が発生するのを防ぐ組み込みの機能はありますか? 一部のテーブルに対してのみスキーマが尊重されるように「強制」する方法はありますか?
または、MongoDB を強制的にスキーマを必須にする方法はありますか? (テーブルなどに新しいフィールドを作成することはできません)
編集: 私がトローリングだと思っている人のために、私はそうではありません。これは私と私のチームにとって重要な質問です。なぜなら、これは NoSQL を使用するかどうかの大きな決断だからです。
ありがとう、良い一日を。