2016-08-12 2 views
1

Firebase 데이터베이스는 JSON의 하위 집합을 사용합니다. 따라서 JSON 스키마를 사용하여 데이터 모델을 설명하는 것이 분명한 것 같습니다. 이렇게하면 HTML 양식 또는 유형 스크립트 모델을 생성하거나 임의의 테스트 데이터를 생성하는 도구를 사용할 수 있습니다.모델 JSON 스키마의 Firebase 실시간 데이터베이스

내 질문 : 키가 ID 인 JSON 스키마에서 키 - 값 쌍을 어떻게 모델링하나요?

예 (firebase spec 빌린)

{ 
    "users": { 
     "mchen": { 
     "name": "Mary Chen", 
     // index Mary's groups in her profile 
     "groups": { 
      // the value here doesn't matter, just that the key exists 
      "alpha": true, 
      "charlie": true 
     } 
     }, 
     ... 

여기 그룹 이름은 그룹 ID로서 사용된다. 이 참조 (그룹 객체)와 그룹 객체 자체에서 ID는 속성 이름으로 사용됩니다. 위의 예를 들어

JSON 스키마는 다음과 같습니다 제가 예를 들어 필요가 무엇

{ 
    "$schema": "http://json-schema.org/draft-04/schema#", 
    "type": "object", 
    "properties": { 
    "users": { 
     "type": "object", 
     "properties": { 
     "mchen": { 
      "type": "object", 
      "properties": { 
      "name": { 
       "type": "string" 
      }, 
      "groups": { 
       "type": "object", 
       "properties": { 
       "alpha": { 
        "type": "boolean" 
       }, 
       "charlie": { 
        "type": "boolean" 
       } 
       } 
      } 
      } 
     } 
     } 
    } 
    } 
} 

NAME는 속성 이름에 대한 자리 표시 자입니다 및 NAME_TYPE이 유형의 정의는 다음과 같은 무언가이다.

{ 
    "$schema": "http://json-schema.org/draft-04/schema#", 
    "type": "object", 
    "properties": { 
    "users": { 
     "type": "object", 
     "properties": { 
     NAME: { 
      "type": "object", 
      NAME_TYPE: "string", 
      "properties": { 
      "name": { 
       "type": "string" 
      }, 
      "groups": { 
       "type": "object", 
       "properties": { 
       NAME: { 
        NAME_TYPE: "string" 
        "type": "boolean" 
       } 
       } 
      } 
      } 
     } 
     } 
    } 
    } 
} 

(어쩌면 내가 여기에 완전히 잘못 경로입니다 아니면 JSON 스키마는 필요한 구조를 모델링 할 수 없습니다.)

+0

JSON 구조에는 key : value 쌍이 있습니다. 파이어베이스에서 '공통점'이 무엇을 의미하는지 자세히 설명해 주시겠습니까? – Jay

+0

일반 JSON에서는 목록을 배열로 구성합니다 :''groups ': {{'id ': 1,'name ':'alpha ', ...}, {'id ': 2,'name ':'charlie ', ...}]'. firebase에는 배열이 없습니다. 다음과 같은 목록을 구성하는 것이 좋습니다. { 'group1': { 'name': 'alpha', ...}, 'group2': { 'name': 'charlie', ...}} '. (위 참조) – Simon

+0

확실히 Firebase에 어레이가 있습니다. 그러나 JSON 상점의 일반적인 구성 요소는 어레이의 개별 구성 요소에 직접 액세스 할 수 없으며 키 : 값 쌍 및 자동 생성 ID를 활용하면 훨씬 더 유연하므로 사용법은 매우 상황이 복잡하므로 피해야합니다. – Jay

답변

0

는 중포 기지의 배열은 확실히있다하지만 그들은 상황이며,해야 특정 사용 사례에서만 사용해야하며 일반적으로 피해야합니다.

게시 한 Firebase 구조가 매우 일반적이며 구조에 키 : 값 쌍이있어 질문에 명확하지 않지만 한 번만 알려 드리겠습니다.

'groups'는 부모 키이고 그 값은 group1 : value, group2 : value의 하위 키 : 값 쌍입니다.

나열된 group1, group2 키는 본질적으로 첫 번째 예에 나열된 ID와 동일하지만 배열이 아닙니다. 즉, 어레이는 순차적 인 하드 코딩 된 인덱스 (0, 1, 2 등)를 가지고있는 반면, firebase의 키는 제한이 없으며 일반적으로 영숫자 값으로 설정할 수 있습니다. 즉, 특정 노드를 적용하는 것보다 더 많이 사용됩니다. 특정 주문 (일반적으로 여기에서 말하고 있습니다)

Firebase 구조에서 이러한 키는 id0, id1, id2 ... 또는 a, b, c ... 또는 timestamp ... 또는 auto- 생성 된 Firebase ID (childByAutoId)도 '순차적'으로 만듭니다.

그러나 문제 ID1 등 ID0과 자신의 할당으로 얻을 수

id0 
id1 
id2 
. 
id9 
id10 
id11 

여기 현실은 실제 순서가 '키'이다

id0 
id1 
id10 
id11 
id2 

이 될 것입니다 키를 사용하여 순차적으로 데이터를 읽는 경우 키를 그대로 사용하십시오. childByAutoId (언어 사양은 docs 참조)로 키를 생성하고 타임 스탬프 또는 인덱스와 같은 자식 값 중 하나를 orderBy로 간주 할 수도 있습니다.

'groups': { 
    'auto-generated id': { 
    'name': 'alpha', 
    'index': 0, 
    'timestamp': '20160814074146' 
    ... 
    }, 
    'auto-generated id': { 
    'name': 'charlie', 
    'index': 1, 
    'timestamp': '20160814073600' 
    ... 
    }, 
    ... 
} 

위의 경우 주문할 수 있습니다. 이름, 색인 또는 타임 스탬프.

이름과 색인은 나열된 순서대로 노드를 읽습니다. 타임 스탬프로 정렬하면 찰리 노드가 먼저로드됩니다. orderBy에 대한 자식 값을 활용하면 매우 유연합니다.

또한 startingAt 및 endingAt를 사용하여로드하는 데이터 집합을 제한 할 수 있습니다. 예를 들어 노드 10에서 노드 14까지 끝나는 노드를로드하려고합니다. 배열이 아닌 JSON 데이터를 쉽게 처리 할 수 ​​있지만 배열에 저장되어 있으면 쉽게 배열 할 수 있습니다.

+0

내 질문이 혼란스러워 보이는 것 같습니다. 방금 편집했습니다. 나는 너의 요점을 이해한다. 하지만 내 질문은 주로 JSON 스키마에서 이러한 구조를 설명하는 방법에 대한 질문입니까? – Simon

관련 문제