2016-06-30 3 views
1

Firebase를 처음 사용하고 firebase를 사용하여 이벤트를 만드는 데 초보자입니다. 여기에 내가 전화 번호를 사용하여 친구를 초대하고 아래 Firebase 데이터 스키마 가이드

내 스키마입니다 (내가 시스템 사용자의 일부가 될 것입니다 초대하고 누구 필요는 없다.).

{ 
    "events": [ 
    { 
     "message": "Lunch", 
     "startTime": 1469471400000, 
     "eventCreatorId": 1, 
     "endTime": 1469471400000, 
     "invitees": [ 
     { 
      "phone": "1234567890", 
      "type": "phone" 
     }, 
     { 
      "phone": "345678901", 
      "type": "phone" 
     } 
     ] 
    } 
    ] 
} 

이제 문제가 있다는 것입니다 특정 초대에 대한 모든 이벤트 목록을 어떻게 찾을 수 있습니까 ?? (위의 경우, 전화 번호가 eqaul 인 사용자의 모든 이벤트 목록을 345678901로 찾으려고합니다.)

누구든지 firebase로 위의 시나리오를 처리 할 수있는 좋은 스키마를 제안 할 수 있습니까?

답변

3

NoSQL 데이터베이스 사용을 환영합니다. :-)

NoSQL에서는 종종 다른 데이터를 모델링하여 결국 앱이 실행할 쿼리를 허용합니다. 이 경우 참석자 당 이벤트 수 : 을 모두 표시하려는 것입니다. 이런 경우, 당신은 두 형식의 데이터를 저장할 수 있습니다 : 이벤트 및 사용자 :

{ 
    "events": { 
    "event1": { 
     "message": "Lunch", 
     "startTime": 1469471400000, 
     "eventCreatorId": 1, 
     "endTime": 1469471400000, 
     "invitees": { 
     "phone_1234567890": true, 
     "phone_345678901": true 
     } 
    } 
    }, 
    "users": { 
    "phone_1234567890": { 
     "phone": "1234567890", 
     "type": "phone", 
     "events": { 
     "event1": true 
     } 
    }, 
    "phone_345678901": { 
     "phone": "345678901", 
     "type": "phone" 
     "events": { 
     "event1": true 
     } 
    } 
    } 
} 

당신은 내가 두 개의 최상위 노드에 데이터를 분할 한 것을 볼 수 있습니다. 그것들은 소위 명시 적 인덱스 (명시 적 인덱스)로 서로를 참조합니다. 본질적으로 클라이언트 측 코드에서 관리 (조인)하는 외래 키 세트입니다.

또한 배열을 명명 된 키로 대체했습니다. 이벤트/사용자가 자연어 키 (예 : Firebase 인증을 사용하는 경우 사용자를 식별하기위한 uid)가 있으면 키에 해당 키를 사용합니다. 하지만 그렇지 않으면 Firebase 푸시 ID를 사용할 수 있습니다. 이러한 키를 사용하면 배열 인덱스에 따라보다 확장 성있는 데이터 구조가됩니다.

이 두 가지 주제는 Firebase documentation on data structuring에서 다룹니다. 나는 또한 이것을 높이 추천한다 .

+0

안녕하세요, Frank.이 말이 완벽합니다. 나는 여기서 비정규 화를 사용하는 것에 대해 생각했지만 조금 혼란 스러웠다. 이제 위의 설명과 수정 된 스키마에서 나는 이것에 대해 명확합니다. 자세한 설명을 해주셔서 고맙습니다 :-) – Jim