2

NoSql을 시도하고 Firebase에서 프로젝트를 시작했습니다. 내 앱의 데이터가 많이 증가했습니다. 그러나 이제는 국가 별 앱을 실행해야하므로 내 앱의 국가에 따라 데이터를 표시/필터링해야합니다.firebase의 여러 국가에서 쿼리 목록

현재 데이터의 구조는 다음과 같습니다.

{ clients: { 
    "04E2LBixKoVn9sGzRvxtMoC7MsF3" : { 
    "clientName" : "Rising Mall", 
    "contact" : { 
     "branches" : { 
     "-Kx6QoVhr0WpDQ3i68_n" : { 
      "address" : "Test Location", 
      "phone" : "999999999", 
      "country": "USA" 
     } 
     }, 
     "mail" : "[email protected]", 
     "website" : "http://www.test.np" 
    }, 
    "description" : "Test Description."} 
    }, 
    "073ezb0UsgetSef0lwk50dhogjM2" : { 
    "clientName" : "Leather Craft", 
    "contact" : { 
     "branches" : { 
     "-Kx6QoVj_QKM7tjekh_1" : { 
      "address" : "Test Location", 
      "phone" : "888888888" 
      "country": "UK" 
     } 
     }, 
     "mail" : "[email protected]", 
     "website" : "https://www.test.com" 
    }, 
    "description" : "Test" 
    } 
} 

위의 구조에서 국가가 "미국"인 모든 고객의 목록을 얻고 싶습니다. Android에서 FirebaseDatabase을 쿼리하여 직접 어떻게 할 수 있습니까? 가능한가? 아니면 내 데이터베이스의 구조를 완전히 변경해야합니까? 데이터베이스를 재구성해야한다면 솔루션을 제안하십시오.

UPDATE

나는 @ 알렉스 - 마모에 의해 주어진 제안을 가져다가 데이터를 비정규 모든 내 구조를 설계했다.

Firebase-root 
    | 
    --- usClients 
      | 
      --- usClientId1 : true 
      | 
      --- usClientId2 : true 
+0

데이터베이스 구조를 변경해야합니다. 그것은 가능했지만 많은 방법이 필요합니다. –

+0

@NikunjParadva 구조에 대한 제안이 있습니까? –

답변

1

이렇게하려면 데이터베이스를 완전히 재구성 할 필요가 없습니다. 조금만 변경하면됩니다. 이. 제점을 해결하려면 데이터베이스에 usClients이라는 다른 노드를 추가해야합니다. 미국 출신의 새로운 사용자를 추가 할 때마다 새로 만든이 노드에도 추가하십시오. 새 노드는 다음과 같아야합니다.

Firebase-root 
    | 
    --- usClients 
      | 
      --- usClientId1 : true 
      | 
      --- usClientId2 : true 

이 구조를 사용하면 데이터베이스를 쿼리하여 미국 내 클라이언트 만 얻을 수 있습니다. 이것은 usClients 노드에 리스너를 연결하고 DataSnapshot 오브젝트에 반복을 연결할 수 있습니다.

이 방법은 비정규 화 (denormalization)라고 불리며, Firebase의 경우 일반적으로 사용됩니다. 더 나은 이해를 위해이 비디오 (Denormalization is normal with the Firebase Database)를 참조하십시오.

+0

감사합니다. 비디오로 들어가서 어떻게 db를 구조화 할 수 있는지 보겠습니다. –

관련 문제