2014-01-28 2 views
1

방금 ​​Firebase 블로그 게시물 Denormalizing Your Data Is Normal을 읽었으며 설명을 요청했습니다.Firebase Denormalization 블로그 포스트에 대한 설명

고려 사항 단락까지 사용했습니다. 구체적으로 다음과 같습니다 :

"주석 수정은 간단합니다 :/comments 아래의 주석 값을 새 내용으로 설정하십시오. 삭제의 경우/comments에서 주석을 삭제하기 만하면됩니다./comments에 존재하지 않는 코드의 다른 부분에서 삭제되었다고 가정하고 정상적으로 진행할 수 있습니다. "

수정을 위해/links 및/users 아래에 저장된 중복 주석을 수정해야하는 이유는 무엇입니까?

삭제의 경우, 일단 내가 코멘트를 삭제하면 논리가 모든 읽기 논리에 교차 점검/주석이 삭제 된 경우를 대비해야한다는 사실을 이해합니다.

감사합니다.

답변

5

블로그 게시물에 설명 된 구조는 중복 된 의견을 저장하지 않습니다. 한 번 덧글을 /comments 아래에 저장 한 다음 및 /users에 해당 주석의 name을 저장합니다. 이것들은 실제 코멘트 데이터에 대한 포인터로서 기능한다.

는 실제 주석 데이터를 한 번만 저장

{ 
    users: { 
    user1: { 
     name: "Alice", 
     comments: { 
     comment1: true 
     } 
    }, 
    }, 
    comments: { 
    comment1: { 
     body: "This is awesome!", 
     author: "user1" 
    } 
    } 
} 

하는 것으로 ... 포스트에서 예 구조를 생각해 보자. 우리가 /comments/comment1 수정하는 경우

, 우리는 우리가 단지 /links/users 아닌 실제 코멘트 내용에 따라 주석의 name를 저장하기 때문에 다른 작업을 업데이트 할 필요가 없습니다.

/comments/comment1을 제거하면 주석 데이터 만 존재합니다. 그러나 comment1에 대한 이러한 "매달 기"참조는 여전히 /users/user1/comments에 있습니다.

/comments/comment1을 삭제한다고 가정하면 Alice의 의견을로드하려고 할 때 comment1이 더 이상 존재하지 않는 것을 볼 수 있습니다. 그런 다음 우리의 응용 프로그램은 a) 참조를 삭제하거나 b) 참조를 무시하고 삭제 된 주석을 표시하지 않으려 고하여 대응할 수 있습니다.

+0

.set (true) 비트가 누락되어 죄송합니다. 지금 완벽하게 이해합니다. 이 점을 분명히 해 주셔서 감사합니다. – Michael

+0

예를 들어 'comment1'의 이름을 'comment2'로 변경하면 어떻게해야합니까? (내 경우에는 사용자 이름을 바꿀 수 있습니다) –

+0

사용자 이름이 아닌 고유 한 사용자 식별자를 사용하는 것이 트릭입니다. 사용자 ref.push(). name()을 사용하여 "user1"대신 사용할 GUID 유사 문자열을 얻은 다음 사용자 이름이 변경되면 해당 GUID 대신 해당 객체의 사용자 이름 필드를 변경하십시오. –

관련 문제