私は、NoSql ムーブメントの台頭とそれに伴う mongodb、ravendb などのドキュメント データベースの人気の高まりを見てきました。好きなところは結構ありますが、何か重要なことを理解していないように感じます。
店舗アプリケーションを実装していて、データベースに商品を保存したいとしましょう。商品はすべて、単一の一意のカテゴリを持っています。リレーショナル データベースでは、これは製品テーブルとカテゴリ テーブルの 2 つのテーブルを持つことで実現されます。製品テーブルには、正しいカテゴリ エントリを保持するカテゴリ テーブルの行を参照するフィールド (おそらく「category_id」と呼ばれる) があります。これには、データの非反復など、いくつかの利点があります。
また、たとえば、カテゴリ名のつづりを間違えた場合、値が存在する唯一の場所であるため、カテゴリ テーブルを更新して修正することもできます。
ただし、文書データベースでは、これは機能しません。完全に非正規化します。つまり、「製品」ドキュメントでは、実際のカテゴリ文字列を保持する値が実際にあり、データの繰り返しが多くなり、エラーを修正するのがはるかに難しくなります。さらに考えてみると、「このカテゴリの商品をすべて教えてください」などのクエリを実行すると、整合性のない結果になる可能性があるということでもありませんか。
もちろん、これを回避する方法は、ドキュメント データベースの「category_id」全体を再実装することですが、その点に到達すると、リレーショナル データベースを再実装するのではなく、リレーショナル データベースをそのまま使用する必要があることに気付きます。
これにより、文書データベースに関するいくつかの重要なポイントが欠けていると思われ、この間違った道にたどり着きます。それで、スタックオーバーフローに入れたかったのですが、何が欠けていますか?