1

そのため、SQL バックグラウンドから NoSQL に切り替えています。したがって、ここで「非正規化」する必要があることはわかっています。

ユーザー これらのドキュメントには、認証情報、おそらく支払い方法、ユーザー名、およびあらゆる種類の詳細が含まれています

投稿 これらの投稿はユーザーによって作成され、各投稿では、ユーザーのユーザー名と電子メールを表示する必要があります。したがって、「非正規化」の方法により、ユーザーのユーザー名と電子メールを、ユーザーが作成する各投稿に入れます。

しかし、ユーザーがユーザー名や電子メールを変更すると、これは問題になりませんか? さかのぼってすべての投稿を更新する必要はありませんか?

これを正しく設計していますか?それとも何か足りない?

4

1 に答える 1

2

そのような場合、データを非正規化する義務はありません。

ユーザーと投稿を別のドキュメントとして (同じデータベースに) 保存できます。

{
  "_id":"alice",
  "email":"alice@wonderland.org"
}

{
  "author":"alice",
  "text":"Alice was beginning to get very tired of sitting by her sister on the bank, and of having nothing to do: once or twice she had peeped into the book her sister was reading, but it had no pictures or conversations in it, 'and what is the use of a book,' thought Alice 'without pictures or conversation?'"
}

次に、結合に使用されるフィールドを示すマップ関数が必要です。

function(o) {
   if (o.text) {
     emit(o._id, {text:o.text, _id:o.author});
   }
}

include_docs=true次に、投稿の ID を としてこのビューを呼び出しますkey

このためだけにインデックスを作成するのはやり過ぎかもしれませんが、他の有用な目的 (ブログの投稿やコメントの「照合」など) に再利用できる可能性があります。

于 2013-10-17T17:25:59.303 に答える