2017-03-18 11 views
1

私はdbスキーマを作成する方法を見つけようとしています。データベースへのほとんどの操作は読み取りとなります。私は作家のための別のコレクションを作成する必要がありますNoSQL dbスキーマ設計

は、スキーマだからほとんどの操作が

1) Grab all books by "F.Scott Fitzgerald" 
2) Grab books under genre "Novel" 
3) Grab all book with page count less than 400 
4) Grab books with page count more than 100 no later than 1930 

ようなものになるだろう。この

{ 
{ title : "Adventures of Huckleberry Finn" 
    author : ["Mark Twain", "Thomas Becker", "Colin Barling"], 
    pageCount : 366, 
    genre: ["satire"] , 
    release: "1884", 
}, 
{ title : "The Great Gatsby" 
    author : ["F.Scott Fitzgerald"], 
    pageCount : 443, 
    genre: ["Novel, "Historical drama"] , 
    release: "1924" 
}, 
{ title : "This Side of Paradise" 
    author : ["F.Scott Fitzgerald"], 
    pageCount : 233, 
    genre: ["Novel] , 
    release: "1920" 
} 
} 

ように見えるかもしれませんので、私はアプリ上で本を売っだと言うと、それらをリレーショナルデータベースのように参照するか、または上記のようにそれらを組み込むことができますか?私はそれらを埋め込むかのように思えるので、DBにデータを保存するには、著者名を手動で入力する必要があります。F.Scott Fitzgeraldのスペルを間違えてしまい、結果を返さないでしょう。

答えて

0

まず第一に私は素晴らしいDBの選択肢と言います。

mongoに関する限り、スキーマはあなたのアクセスパターンに最もよく役立つように定義する必要があります。スキーマを設計する際には、mongoがSQLのような結合やトランザクションをサポートしていないことも確認する必要があります。だから、これらの属性や他の属性をすべて考慮すると、スキーマの選択はあなたのアクセスパターンに役立つので、最適です。通常、書籍の詳細を取得するたびに、作成者、ページ、ジャンル、年、価格などのすべての情報が必要です。クラスがすべてのプロパティを持つ必要があり、すべての非クラスのプロパティを他に保持する必要があるオブジェクト指向プログラミングと同様ですクラス。 別々のコレクションで作者を務めることは余分なコレクションを追加するだけで、あなたのコードによる結合とトランザクションを処理する必要があります。手動で著者名を入力することについての懸念を考慮して、私は実際には得られません。ユーザーが著者名「xyz」をクリックして、著者名「xyz」(いくつかのタグのように)をクリックして、その選択された名前を持つすべての書籍を著者の1人にするクエリを取得できるようにする場合を考えてみましょう。ユーザーが手動でユーザー名を入力する場合は、入力した文字列でドキュメントを検索するだけです。私はここにマニュアルが何も表示されません。 追加するだけで、価格キーもすべての文書に収まるものとします。