2016-12-12 17 views
0

私はno-sqlを初めて利用しています。私はnodejsで簡単な電子商取引アプリケーションを構築しようとしています。今私はCRUD操作をビルドする必要がありますので、所有者だけが編集できるようにしてください。残りはREAD-ONLYです。主な質問は、より良い実装となるだろうか?所有者が実際に私のユーザモデルから_idある どのマングースモデルがより効率的でしょうか?

var mongoose = require('mongoose'); 

module.exports = mongoose.model('product',new mongoose.Schema({ 
    owner  : {type: String}, 
    title  : {type: String}, 
    ... 
})); 

よう

私が持っている現在のコードです。基本的には、これは外部キーのようなものです。これは有効な方法ですか?または、私はuser modelの中に配列を追加して、所有しているオブジェクトのリストを保存する必要がありますか?

UIDStringに保存した場合、私は所有者に対して行ったことがベストプラクティスであるか、またはユーザーモデルを参照するために何か他の作業を行う必要があるかどうかを検証したいと考えています。

私を助けてくれてありがとうございます。

答えて

1

文書データベースの全ポイントは、外部関係を持つべきではありません。ドキュメントに必要なすべてのデータは、ドキュメント内で非正規化する必要があります。

product文書の中には、必要なすべてのオーナーの詳細を複製する必要があります。 は、参照のために_idも保存しますが、実際のObjectId()を使用するには文字列を使用しないでください。非正規化の詳細については

は、ジョインを使用するさらに別の代替は、あなたのデータを非正規化することであるThe Little MongoDB Book

を参照してください。歴史的に、非標準化は、パフォーマンス重視のコードやデータをスナップショット化する場合(監査ログなど)に予約されていました。しかし、NoSQLの人気が高まっており、その多くは結合がないため、通常のモデリングの一部としての非正規化がますます一般的になっています。これは、すべての文書のすべての情報を複製する必要はありません。しかし、重複データの恐れが設計上の決定につながるのではなく、どの情報がどのドキュメントに属しているかに基づいてデータをモデリングすることを検討してください。

+0

こんにちは、私は同じページにあります。むしろ、私はユーザーのためのObjectidオブジェクトで配列を作成する必要がありますか? – georoot

+0

OPではありませんが、所有者情報を直接製品モデルに入れてから、潜在的に関連する所有者に製品IDの配列を追加することを提案していると思います。ただし、この方法をとると、所有者を更新する際にN個の製品も更新する必要があるなど、追加の問題を考慮する必要があることに注意してください。別の懸案事​​項は、所有者を製品に割り当てるときに、所有者の製品IDの配列も更新する必要があることです。 – dvlsg

関連する問題