2017-01-18 10 views
0

현재 Firebase에서 제공하는 백엔드가있는 IOS 응용 프로그램에서 작업하고 있습니다. NOSql 백엔드로 작업 한 것은 처음이며 데이터를 효과적으로 구성하는 방법에 대한 정보가 필요했습니다. 현재 앱은 피드에 표시되는 각 사용자와 관련된 세부 정보 만 포함하는 사용자 기반 앱이 될 것입니다. 따라서 메모 영역에 메모를 게시하는 경우에만 메모 영역에 액세스 할 수 있습니다. 이 정보는 공유되지 않습니다. 현재 데이터를 어떻게 설정했는지는 "notes"라는 엔드 포인트와 "users"라는 엔드 포인트를 갖는 것입니다. 나는 모든 노트를 "노트"에 넣고 메인 "노트"영역의 "노트 ID"에 대한 참조와 함께 "노트"의 각 사용자 아래에 항목을 갖는 것을 계획했습니다. 이것은 "사용자"의 자녀에게 실제 메모 데이터가있는 "메모"가되는 것이 더 의미가 있습니까?Firebase에 대한 적절한 데이터 구조

notes > 
    noteId > 
     noteName 
     noteDetails 
    noteId > 
     noteName 
     noteDetails 
    noteId > 
     noteName 
     noteDetails 

user > 
    notes > 
     noteId 
     noteId 
     noteId (these would reference the note in notes) 
    name 
    dateAdded 

이것은 데이터가 현재 어떻게 보이는지를 나타냅니다. 이것이 최선의 접근 방법인가? 나는 mySql 배경을 가지고 있고 noSql을 완전히 이해하는 데 어려움을 겪고있다.

답변

3

단일 최상위 노드의 모든 사용자에 대한 메모 유지는 사용자간에 메모에 액세스해야하는 경우에 유용합니다. 그러나 매우모든 노트에 걸쳐을 쿼리해야합니다. 앱이 실제로 성공하면 병목이 될 가능성이 있습니다. 당신은 오직 특정 사용자에 대한 메모를 이용해야하는 경우

, 당신은뿐만 아니라 별도로 각 사용자에 대한 메모를 분할 할 수 있습니다

notes > 
    user1 > 
    noteId > 
     noteName 
     noteDetails 
    noteId > 
     noteName 
     noteDetails 
    user2 > 
    noteId > 
     noteName 
     noteDetails 

이 데이터 구조의 비용, 데이터의 더 나은 분리에 이르게 긴 노트 목록이 없습니다. 그에서 제외

, 당신은 평평해야 데이터 중첩있어 : 사용자 프로필 및 사용자 메모를 별도의 최상위 노드에 있어야합니다 :이

users > 
    userId > 
     name 
     dateAdded 
userNotes > 
    userId > 
     noteId 
     noteId 
     noteId (these would reference the note in notes) 

하면 사용자 이름 목록을 검색 할 수 있습니다 모든 노트 ID를 가져올 필요가 없습니다. 그런 다음 특정 사용자의 메모를 표시하려면 /userNotes/<uid> 아래의 메모 키에 액세스 한 다음 각 노드를로드하면됩니다.

NoSQL 데이터 모델링을 처음 사용하는 경우 NoSQL data modeling을 읽는 것이 좋습니다. 관계형/SQL 환경에서 온 경우 Firebase for SQL developers을 표시하는 것이 좋습니다.

+0

굉장합니다. 그것은 완전히 모두 의미가 있습니다. 필자는 수년간에 걸쳐 PHP와 관계형 데이터베이스를 구축 한 후 병합 된 데이터 접근 방식에 어려움을 겪고 있습니다. 정말 고마워. – user1881482

+1

당신은 혼자가 아닙니다. :-) 그것은 대부분 "언리얼"과 논리적 사고 (SQL과 지속적으로 비교하지 않고)를 필요로합니다. 나는 독서 /보기를위한 몇몇 연결을 추가했다. –

관련 문제