2016-10-18 2 views
0

У меня есть 2 основных узла в моей базе: Пользователи и Проекты.NoSQL & Firebase: Хранение и Итерация по отношениям «многие ко многим»

Каждый пользователь может быть назначен нескольким проектам в разных ролях.

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

users : { 
    user1 : { 
    name : blah, 
    email : [email protected], 
    projects : { 
     projects1key : true, 
     projects2key : true 
    } 
    } 
} 

projects : { 
    project1key : { 
    name : blahserve, 
    category : blahbers, 
    providers : { 
     user1 : true, 
     user7 : true 
    } 
    } 
} 

То, что я не мог понять, как я могу присвоить каждому пользователю определенную роль в каждом проект.

  1. Что новая структура базы данных должна выглядеть, если мне нужно добавить role (строку) для каждого пользователя в рамках проекта?

  2. Исправьте меня, если я ошибаюсь: когда я назначаю пользователя проекту, мне нужно создать 2 новых узла: узел projectkey в моем пользовательском узле и узел пользовательского ключа в моем проекте. Это правильно?

Update

Поскольку данный ответ здесь является правильным, но не уверен, что он будет соответствовать моему случаю использования, это мой случай использования:

  • (1) Итерация по списку всех пользователей проекта
  • (2) Итерация над списком всех членов проекта
  • (3) Проверьте роль проекта, когда пользователь обращается к проекту t и дать ему разрешение зависит от его роли
  • (4) Страница «Проект -> пользователи» позволяет добавить нового пользователя в существующий проект. роль пользователя выбирается в той же форме вместе с пользователем. пользователь должен иметь роль в проекте.

ответ

2

Или, может быть, просто вы могли бы добавить другой узел все вместе: -

Что новая структура базы данных должна выглядеть, если мне нужно добавить роль (строка) для каждого пользователя в рамках проекта?

users : { 
user1 : { 
    name : blah, 
    email : [email protected], 
    } 
    }, 

projects : { 
    projectKey1 : { 
    name : blahserve, 
    category : blahbers, 
    } 
}, 

projectsLists:{ 

    user1 :{ 
    projectKey1 : true, 
    projectKey2 : true 
    } 
}, 

projectsRoles :{ 

    projectKey1 : { 
    user1 : provider, 
    user2 : editor, 
    .... 
    } 
    } 

Поправьте меня, если я ошибаюсь: Когда я назначить пользователю проекта, мне нужно создать 2 новых узлов: узел projectkey в моем пользовательский узел и узел userkey в моем projectkeynode , Это правильно?

Всегда предпочитайте плоскую структуру БД. Поэтому, используя эту структуру, вы должны только добавить или обновить роль своего пользователя.

+0

Спасибо, что это правильно! Можете ли вы привести пример того, как должна выглядеть итерация над этой структурой? Пример: https://www.firebase.com/docs/web/guide/structuring-data.html#section-join – TheUnreal

+0

Пожалуйста, избегайте распространять запросы в комментариях. Могу ли я предположить, что вы сначала попытаетесь сами, а если получите столкновение, отправьте сообщение другой вопрос о SO. Конечно, sum1 поможет вам ...Кроме того, вы следуете за дефрагментированными файлами firebase, используя их: -https: //firebase.google.com/docs/ :) Happy Coding – Dravidian

+0

Несомненно, спасибо. Только один вопрос касается вашего ответа: почему вы решили использовать user1/projectkey1, а не projectkey1/user1 ..? (Пользователи в проектах по проектам inder users) – TheUnreal

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