2016-09-20 11 views
0

私はFirebaseを使用してNoSQLデータベースを作成していますが、私はSQL思想家であり、FirebaseクエリとNoSQLデータ構造に関するアドバイスが必要です。NoSQL Firebaseとクエリでフィールドのサブセットを選択するデータ構造

Ionic 2(AngularJS 2)を使用してモバイルアプリケーション用にいくつかの実験を行っていますが、私の懸念事項は、テーブルのスピード(ユーザー時間)と正しい構造に関するものです。

私は、ユーザーが作ったとユーザーがグループの一部である可能性があり、今私は私が持っているもの、このスキーマに

Users : { 
    Id : { 
     Name: string 
     Picture: base64 56x56 pixels (image) 
     Addresses : {} 
     Groups : { 
      Worker: boolean 
      Student: boolean 
     } 
    } 
} 

Groups : { 
    Worker : { 
    Desc: string 
    Members : { 
     Userid: boolean 
    } 
    } 
    Student : { 
    Desc: string 
    Members : { 
     Userid: boolean 
    } 
    } 
} 

Made : { 
    Id : { 
    Name: string 
    Thumb: base64 56x56 pixels (image) 
    Desc: string 
    User: userid 
    Images: base64 dimensions could vary 
    } 
} 

を作っFirebaseウェブサイトからの脱正規化を、以下のもののリストを持っているアプリで

するには、ユーザーが作ったもののリストを表示することです。名前やサムイメージのような情報はほとんどありません。クリックすると、他の情報とともに説明が開きます。

今、私はリストを取得するために次のコードを使用している場合、それはすべての情報を私に返しますが、初めに、私は名前だけと親指(または他の何か)が必要

return firebase.database().ref('/made/' + madeId) 
.once('value').then(function(snapshot) { 
    var username = snapshot.val().username; 
    // ... 
}); 

だから、どのような方法があります(?):

SELECT name, thumb FROM Table_Made 

私は各クエリに必要なフィールドを取得するには?または

名前と画像のみの別のテーブルを持っている方が良いですか?

親指と画像の両方を持つことをお勧めしますか?親指が一般に画像よりも小さいので、jsonをスピードアップするために。

Firebase docを見ると、10MB未満のイメージは、base64として文書に保存され、保存されている場合は大きくなるようです。それについてあなたのアイデアは何ですか?

+0

Firebaseデータベースでノードのサイズが10MBに制限されていても、そのサイズまでイメージをデータベースに保存する必要はありません。構造を照会しないユーザが生成したデータは、Firebase Storageに効率的に保存/提供できます。 –

+0

1ポストbtwごとに1つの質問に自分自身を制限します。それ以外の場合は、すべての回答を1つにするのは難しいです。 –

答えて

2

Firebaseクライアントは常に完全なノードを取得します。ノードのプロパティの一部だけを取得する方法はありません。

通常通り:データモデルでユースケースを実装する際に問題がある場合は、ユースケースに合わせてデータモデルを変更します。この場合、名前とサムネイルを別々のノードに分割することができます。

MadeListinfo : { 
    Id : { 
    Name: string 
    Thumb: base64 56x56 pixels (image) 
    } 
} 
+0

ありがとうございました。これは、私がさまざまなセクションでデータモデルを分割し、必要なデータだけを得ることを私が考えていたものです。 もちろん、これは変更を書くことについてより注意することを意味します。 – soniyj

+1

私の答えが役に立つなら、その左側のupvoteボタンをクリックしてください。あなたの質問に答えた場合は、チェックマークをクリックしてそれを受け入れます。そうすれば、他の人はあなたが(十分に)助けられたことを知ることができます。 –

関連する問題