2016-07-13 5 views
1

Я провел целые 8 часов, используя разные способы достижения этого, и я не могу найти способ, который хорошо работает/имеет смысл. Я думаю, что я, возможно, слишком усложняю это. Любая помощь приветствуется.Нужно руководствоваться структурой данных firebase

Общий смысл: у меня есть начальный стол, который загружает сообщения от всех пользователей/в конечном итоге просто друзей. Пользователи могут «присоединиться» к сообщениям, нажав на определенную ячейку. Затем мне нужна другая страница, на которой пользователь показывает все сообщения, в которые они вошли, а затем последнюю страницу, на которой отображаются все люди, которые также присоединились к определенной записи.

Так как пользователь видит сообщение о кошках, кликает на сообщение, присоединяется. Переходит на другой экран, и теперь кошки будут в этом представлении стола вместе с любыми другими сообщениями, в которые они вступили. Нажмите на ячейку кошек и всех пользователей, которые присоединились к кошкам.

TableView1 является все сообщения

TableView2 это сообщения, которые пользователь присоединился в на

TableView3 является «детальный вид» из выбранной ячейки из tableview2, который показывает все пользователи, присоединившиеся в на этом посту назад от TableView1.

Я абсолютно не могу найти хороший способ структурирования данных.

Отличительной особенностью «уловки» является то, что пользователь может делать только 1 сообщение в день, поэтому никогда не бывает дубликатов под сообщениями пользователя, но я так смущен. Я даже не знаю, имеет ли это значение ,

я в основном что-то вроде:

initiatedPosts: 
    ABC123: 
     Initiator : userUIDWhoDidIt 
     text:  "talk about cats" 
     timestamp: 2093840928309482 
     PostsInResponseToThis: 
       User: userwhodidit 
       text: "cats suck" 

users: 
    User1 
     (general user info) 
     PostsJoinedInOn 
       ABC123 

И это только общая горячая неразбериха. Я пробовал так много вещей, что забыл, что я пробовал, поэтому свежий взгляд на это будет замечательным.

Я в основном необходимости:

1) Запрос назад все инициированных сообщений на view1

2) Запрос назад все сообщения текущего пользователя подключилась на на виду 2

3) Запросить назад всех людей, которые присоединились к выбранному сообщению из просмотра 2

Я знаю, как запускать эти запросы и добавлять их все в таблицы, я просто не знаю, как настроить мою базу данных.

ответ

1

С Firebase вы должны, как правило, стремиться сгладить структуру данных и сохранить ключи, которые вы можете использовать, чтобы найти нужные вам данные с любого узла. Вот схема Bolt, которая должна соответствовать всем вашим прецедентам.

path /posts/{post_id} is Post {} 

path /users/{user_id} is User {} 

type PostID extends String {} 
type UserID extends String {} 

type Post { 
    author_id: UserID 
    text: String 
    timestamp: Number 
    reply_post_ids: Map<PostID, Boolean> 
} 

type User { 
    post_ids: Map<PostID, Boolean> 
    reply_post_ids: Map<PostID, Boolean> 
} 

Запрос назад все инициированные сообщения на view1

Просто получать все сообщения в /posts.

2) Запрос назад все сообщения текущего пользователь подключился на на виду 2

Посмотрите каждые из постов в /users/{user_id}/post_ids. Вы могли бы даже найти их ответы на /users/{user_id}/reply_post_ids.

3) Запрос назад все люди, которые присоединились в на выбранной должности с учетом 2

На пост, LookUp все посты через /users/{user_id}/reply_post_ids, а затем выполните поиск пользователей в тех сообщения.

Хотя может показаться, что вы совершаете много круговых поездок в Firebase, Firebase будет разумно выполнять пакетные запросы по мере необходимости. См. this StackOverflow question.

+0

Очень полезно сообщение. Обговорите это много. Я собираюсь попытаться заставить все работать завтра, и если Ir un в любые проблемы, я могу оставить комментарий. Это должно заставить меня идти, хотя все прекрасно. Спасибо –

Смежные вопросы