2016-06-27 11 views
1

SubredditにはそれぞれPostがあり、それぞれPostにはCommentが多いRedditを作成しているとします。そして、APIレスポンスは、おそらく次のようになります。Reduxでの正規化について

subreddits: [{ 
    title: "food" 
    posts: [{ 
    id: "", 
    body: "..", 
    comments: [{ 
     id: ".." 
     body: "..", 
    }] 
    ..morePosts 
    }, 
    title: "culture" 
    posts: [{ 
    id: "", 
    body: "..", 
    comments: [{ 
     id: ".." 
     body: "..", 
    }] 
    ..morePosts 
    }, 
] 

しかしReduxのは、このようなネストされた状態を阻止するため、我々は減速にそれらを養う前に、我々は、データ構造を正規化します。その後、データは次のように表すことができます。

subredditByTitle: { 
    food: { 
    id: subreddit_1, 
    title: "food" 
    posts: [post_1, post_2] 
    } 
    culture: { 
    id: subreddit_2, 
    title: "culture" 
    posts: [post_3, post_4] 
    } 
} 

postsById: { 
    post_1: { 
    body: ".." 
    comments: [comment_1, comment_2] 
    }, 
    post_2: { 
    body: "..", 
    comments: [comment_3, comment_4] 
    } 
} 

commentsById: { 
    comment_1: { 
    body: ".." 
    }, 
    comment_2: { 
    body: ".." 
    } 
} 

しかし、私はMongoDBのを使用する場合、それは私がsubdocumentsを使用しています場合は特に、このようなバックエンドのデータを正規化するために少しぎこちない感じています。リレーショナルDBでは、すべてのDBテーブルに対してルックアップテーブル(例:PostsById)を持たせることは理にかなっていますが、すべてのDBコレクションについて同じことをするのは意味がありますか?私の直感は、すべてを正規化しようとするのではなく、各文書に1つの減速機を持つ方が良いかもしれないが、ベストプラクティスが何であるかはわかりません。

答えて

1

実際にすべてを正規化して、すべてのエンティティを置く店舗内にentitiesオブジェクトがあるはずです。私は多くのアプローチを試みたが、IMHOこれは唯一の真の方法です。

私はこのアプローチなしでは考えられないが、この答えの範囲外です。他のより一般的なものはページネーションであり、不要なデータロードがない場合はasking for data only when you need themアプリケーションは超スナッピーと感じます。

codeというこの小さな作品を実際に見てみることを強くお勧めします。あなたのentitiesレデューサーは明らかに違って見えるでしょうが、あなたのニーズに合わせて自分自身を書くことができるはずです

+0

レジュームでは、ドキュメントベースのデータを正規化する必要があるときに、 mongoを使用して開発することの最大の利点は、データのこの種の正規化と処理(結合など)を必要としないことです。 mongoのデータでreduxを使用するととても悪いです... –

関連する問題