2017-02-11 21 views
0

Firebaseについて聞いてからしばらくして、私は先週私の小さなプロジェクトを開始することにしました。Firebase - 1対多のリレーションシップ&クエリ

私は、データベースの構造に関する多くの記事を読んでいると私は私のデータベースのための2つの解決策を思い付いた:

ケース1

Bは、OWNERIDを経由して、参照を持っていますテーブル

{ 
    "A" : { 
     "user-id-1" : { 
      "name": "James", 
      "number": "11111" 
     }, 
     "user-id-2" : { 
      "name": "Rob", 
      "number": "11111" 
     }, 
     ... 
    }, 

    "B" : { 
     "id-b-1" : { 
      "something": "value1", 
      "ownerId" : { 
       "user-id-1": true 
      } 
     }, 
     "id-b-2" : { 
      "something": "value2", 
      "ownerId" : { 
       "user-id-2": true 
      } 
     }, 
     "id-b-3" : { 
      "something": "value3", 
      "ownerId" : { 
       "user-id-2": true 
      } 
     }, 
     "id-b-4" : { 
      "something": "value4", 
      "ownerId" : { 
       "user-id-1": true 
      } 
     }, 
     ... 
    } 
} 

01内のレコードへケース2

表レコードの IDは、表でテーブルB

{ 
    "A" : { 
     "user-id-1" : { 
      "name": "James", 
      "number": "11111" 
      "Bs": { 
       "id-b-1": true, 
       "id-b-4": true, 
       "id-b-7": true, 
      } 
     }, 
     "user-id-2" : { 
      "name": "Rob", 
      "number": "11111" 
      "Bs": { 
       "id-b-2": true, 
       "id-b-3": true, 
       "id-b-6": true, 
      } 
     }, 
     ... 
    }, 

    "B" : { 
     "id-b-1" : { 
      "something": "value1", 
     }, 
     "id-b-2" : { 
      "something": "value2", 
     }, 
     "id-b-3" : { 
      "something": "value3", 
     }, 
     "id-b-4" : { 
      "something": "value4", 
     }, 
     ... 
    } 
} 

のレコードに、旅館アレイを介して、参照を持っていますfirebaseによって提供されたユーザオブジェクトに他のプロパティを追加できないため、ログインユーザに割り当てられたIDと同じ、ユーザID-1です。

AとBに関連するレコードは、何千ものレコードに拡張できると言いたいと思います。

したがって、ABの間に1対多の関係があります。

はのは、私がユーザID-1に関連するすべての旅館を取得したいとしましょう:

  1. データベース構造は、あなたの経験によると、このsituatioに優れていますか?
  2. オブジェクトをデータベース上で1つだけ実行することで、すべてのオブジェクトを取得するにはどうすればよいですか?
  3. 私は私がOWNERID値を見て、旅館をフィルタリングすることができますどこ句の並べ替えを使用することはできますか?

ご回答いただきありがとうございます。

答えて

0

あなたの構造は「多対多」の関係を示しているように見えますが、その側面は異なります。

"ownerId": 
{ 
    "user-id-1": true, 
    "user-id-1": true 
} 

と「ケース2」「BS」の2つの同じID含めることができますで:あなたはどちらの場合も

"user-id-1" : { 
     "name": "James", 
     "Bs": { 
      "id-b-1": true 
     } 
    }, 
    "user-id-2" : { 
     "name": "Rob", 
     "Bs": { 
      "id-b-1": true 
     } 
    } 

をOWNERIDが複数のIDを含むことができ、「1ケース」で以来、複数の「Bs」を所有する1つの「A」と、複数の「As」が所有する1つの「B」とを有する。

は、私が示唆している多くのこの1つは「ケース1」を使用してアイテムの唯一の所有者を許可します

"id-b-4" : { 
    "something": "value4", 
    "ownerId" : "user-id-1" 
} 

これにオブジェクトを変更できるようにすること。 "ケース2"では、各 "A"に一意の "Bs"を設定することはできません。また、クエリを難しくします。

Firebaseのセールスポイントはリアルタイムのデータであるため、どちらのケースもあなたのユースケースに関連性の高いものを選択する必要があるため、これらのオブジェクトをどのように使用しているかによって異なります。 。ケース2を選んだ場合は「ケース1」を選択してください。あるいは、あなたの人生を楽にするものであれば、両方を使うことができます。

関連する問題