web-dev-qa-db-ja.com

CouchDBで「参照テーブル」を処理するにはどうすればよいですか?

「参照テーブル」、たとえば食品のさまざまな種類の成分のリストなどの静的データを含むテーブルを処理する最良の方法は何ですか?

  1. 各成分に1つずつの複数のドキュメント
  2. 参照ごとに1つのドキュメント

    {"_id" = "ingredients"、 "ingredient":[{"name": "Apple"、...}]}

  3. すべての参照を含む1つのドキュメント

    {"_id" = "references"、 "ingredients":[{"id": "Apple"、 "name": "Apple"、...}]、 "spices":[{"id": "cinnamon" 、「名前」:「シナモン」、...}]}

6
Patrick

これを見つめているMySQL DBAとして、私は関係用語で考えています。 JOINを行うことについても考えます。ただし、NoSQLの観点からは、JOINはプログラムで実行する必要があります。

複数のドキュメント、各成分に1つ:これにより、コレクションに配置する静的データの量が最小になります。それでも、参照を取得したり、CouchDBを使用して一時的なコレクションを作成したり、データをアプリに直接送信したりする準備をする必要があります。

すべての参照を含む1つのドキュメント:コレクションのうちコレクションからマイニングコレクションをマイニングすることに満足している場合...この方法のデータは問題ありません。他の人がコードを理解し、保守できるようにしたい場合があるため、(ジョブのセキュリティの問題でない限り)CouchDB Jediがあなただけではないことを確認してください。

参照ごとに1つのドキュメント:これで、これは良い中間点です。コレクションのレイアウトに変更があった場合に、ある程度の柔軟性を提供します。材料の単純な検索は、スパイスや調理器具の検索とは独立しています。プログラムによるJOINの実行は依然として必要ですが、それほど深くはありません。 NoSQLパラダイムの初心者(私のように)は、深く根付いた複雑なデータ表現を壊すことを恐れずに、データの理解と取得を快適に行うことができます。

私の個人的な選択はオプション#2でしょう。

2
RolandoMySQLDBA