web-dev-qa-db-ja.com

NOSQLでリレーションはどのように機能しますか?

以前のすべてのアプリケーションでSQLを使用していて、Parse.com dbストレージを理解するために、NOSQLを知りたかった。

SQLNOSQLの違いを過去2日間検索してみましたが、NOSQLで関係がどのように機能するのかまだわかりません。

NOSQLはスキーマレスで、SQLのような構造はないことを学びました。質問を例にまとめます。

例:

学校管理用のSQLアプリケーションでは、生徒の情報を格納するテーブルstudentsを作成します。マークについては、marksテーブルを参照するuser_id列を持つstudentsテーブルを用意します。 sub_idsub_codesubject_nameを保持するもう1つのテーブルsubjectsを用意します。

したがって、subjectsテーブルのsub_codeを変更すると、ON UPDATE DELETE CASCADEを使用してFOREIGN KEYが使用されている他のテーブルに反映されます。

今私の質問は、

NOSQLはNORMALIZATIONを使用しないため、データはどのように保存されますか?単一のテーブル(NOSQLのドキュメント)は、studentsテーブル、marksテーブル、およびsubjectsテーブルにあるすべての情報を保持する必要がありますか?

すべての情報を1つのテーブルにダンプすると、どれほど効率的になりますか?

件名コードを変更したい場合、すべてのドキュメントを更新する必要がありますよね? (SQLでは、1つのテーブルの件名コードを変更するだけです。この列の件名コードを参照している他のテーブルの他の列は、個々のエントリを更新するのではなく、単に正しく更新するためです。)

5
Yuva Raj

あなたの質問では、「SQL」と「リレーショナル」を同じ意味で使用しています。同様に、「NoSQL」は「リレーショナルではない」という意味と考えることができます。つまり、主キー/外部キーの概念はありません。強制または暗示される「正規化」はありません。 「表」または「列」という単語の実際の意味はありません。 Key-Valueストアでは、渡されるバイトの大きなコレクション(「値」)と、その大きなコレクションにインデックスを付けるために使用される小さなバイトのコレクション(「キー」)がわかっています。その大きなコレクションの内部と、データベース内の他の値のバイトにどのようにマップするかは、完全にアプリケーションとその中のコードの品質にかかっています。

ただし、他のNoSQL DBMSでは、「値」の内部を定義できます。リレーショナルデータベースと同様に、データのスキーマを保持します。 Cassandraはこの例です。

したがって、それはあなた次第であり、アプリケーションをどのように実装するかです。 couldサロゲートIDを使用してリレーショナルデータモデルを模倣するようにKey-Valueストアを設定します。これは多くの読み取りを必要とし、NoSQLソリューションのポイントを失います。あなたはcouldレコードが書き込まれた瞬間にすべての非正規化された値を格納するようにKey-Valueを設定します。これは取得には高速ですが、更新には低速です。システムに最適なものを選択し、それに応じて実装する必要があります。 NoSQLは魔法ではありません。あなたはまだやるべき多くの設計と開発をしています。

NoSQLという用語は非常に広義です。それは技術よりもマーケティングに関係しています。さらに、リレーショナルデータベースを支える集合論などの数学とは関係がありません。異なるNoSQL製品は異なる動作をします。 Parse.comだけを読んでも、「NoSQL」のすべてを知ることはできません。

あなたの問題を理解してください。パフォーマンスまたは一貫性の目標を達成するために用意する妥協点を理解し、要件に最適な製品を選択してください。

5
Michael Green