2017-09-19 9 views
2

에있는 객실의 목록을 가져옵니다 나는 채팅 앱의 중포 기지 데이터베이스를 구성하는 방법에 대한 좋은 기사를 읽고 나는이 구조에서 응용 프로그램을 종료 :중포 기지 스위프트 회원이

{ 
    "users":{ 
    "autoIdUser1":{ 
     "username":"john", 
     "full_name":"John Vincent", 
     "groups":{ 
      "autoIdGroup1":true, 
      "autoIdGroup2":true 
     } 
    }, 
    "autoIdUser2": ..., 
    "autoIdUser3": ... 
    } 
    "groups": { 
    "autoIdGroup1"{ 
     "group_name":"Administrators", 
     "group_description":"Users who can do anything!", 
     "members":{ 
      "autoIdUser1":true, 
      "autoIdUser2":true 
     } 
     }, 
    "autoIdGroup2"{ 
     "group_name":"Moderators", 
     "group_description":"Users who can only moderate!", 
     "members":{ 
      "autoIdUser1":true 
     } 
     } 
    } 
} 

가 지금은에있다 회원이있는 모든 방에서 내 db에서 검색

각 그룹에 회원 아래 특정 사용자 ID가 있는지 확인하기 위해 쿼리를 수행하는 것이지만 방법을 알 수는 없습니다 ...

또 다른 방법으로 DB에 다른 구조를 만드는 것에 대해 감사했습니다.

"membersInGroups":{ 

    "autoIdGroup1":{ 
      "autoIdMember1":true, 
      "autoIdMember3":true 
     } 
    "autoIdGroup2":{ 
      "autoIdMember1":true 
     } 
    } 

다음에 사용자가있는 모든 그룹 id를 검색하고 각 그룹의 모든 정보를 다시 쿼리하는 쿼리를 만듭니다. 쿼리 스타일은 이전 구조로 만든 스타일과 동일하지만 더 간단합니다.

어떤 방법이 가장 좋습니다.

두 번째 구조를 추가하면 "구성원"자식 노드를 제거 할 수 있습니까 ??

기존 구조에 대한 쿼리 예를 볼 수 있습니까?

답변

3

가능하면 데이터를 스트림으로 구성해야합니다. 즉, 데이터의 길이가 길고 얕은 목록을 의미합니다. 귀하의 필요에 필요한 것 이상을 중첩하지 마십시오.

또한 사용자 이름, 사용자 ID, 개체 제목 등과 같은 데이터를 복제하는 것을 두려워하지 마십시오. 데이터 구조를 UI에 일치 시키십시오.

관련 문제