Dynamo や Mongo などの NoSQL ストアについての私の理解では、非正規化の観点から考え、実行するクエリに基づいてテーブルを作成する必要があります。
どのようにテーブルをセットアップすればよいか悩んでいます。
実行したいクエリを特定しました。
通常のSQLクエリを「平易な英語」に翻訳しました
たとえば、実行したいクエリは次のように変換されます。
「date_x から date_y の間に撮影されたすべての写真を取得します。写真家は John で、投票数が多い順に並べられています」
私はテーブル結合を行うことができないので、これが私が思いついたものです:
photos
{
name,
url,
photographer,
date_created,
likes,
dislikes,
num_voters,
weighted_score
}
これは正しいアプローチですか?
私が好き、嫌い、num_voters、および weighted_score を持っている理由は、ユーザーが写真に投票するたびに、「行」を更新し、likes/dislikes/num_voters を増やし、weighted_score を再計算する必要があると信じているためです (そのため、投票者数が少ない高評価のアイテムはリーダーボードに影響しません)
でも、
「フィルタ」を適用しているため、Dynamo のようなキー/値ストアは必要ないと思いますか?
また、1 つの副次的な質問: たとえば、写真家のテーブルがあり、写真家を削除したいとします。写真を調べて写真家が削除するのは私の責任ですか? 繰り返しますが、非リレーショナルなので、カスケード型の機能はないと思いますか?
ありがとう