2017-02-11 3 views
0

Прошло некоторое время с тех пор, как я услышал о Firebase, и я решил начать небольшой проект на прошлой неделе.Firebase - От одного до многих отношений и запросов

Я прочитал много статей о структуре базы данных, и я придумал два решения для моей базы данных:

Case 1

Таблица B имеет ссылки, через OwnerId, к записям в таблице

{ 
    "A" : { 
     "user-id-1" : { 
      "name": "James", 
      "number": "11111" 
     }, 
     "user-id-2" : { 
      "name": "Rob", 
      "number": "11111" 
     }, 
     ... 
    }, 

    "B" : { 
     "id-b-1" : { 
      "something": "value1", 
      "ownerId" : { 
       "user-id-1": true 
      } 
     }, 
     "id-b-2" : { 
      "something": "value2", 
      "ownerId" : { 
       "user-id-2": true 
      } 
     }, 
     "id-b-3" : { 
      "something": "value3", 
      "ownerId" : { 
       "user-id-2": true 
      } 
     }, 
     "id-b-4" : { 
      "something": "value4", 
      "ownerId" : { 
       "user-id-1": true 
      } 
     }, 
     ... 
    } 
} 

Случай 2

Таблица имеет ссылки, через массив Б.С., записям в таблице B

{ 
    "A" : { 
     "user-id-1" : { 
      "name": "James", 
      "number": "11111" 
      "Bs": { 
       "id-b-1": true, 
       "id-b-4": true, 
       "id-b-7": true, 
      } 
     }, 
     "user-id-2" : { 
      "name": "Rob", 
      "number": "11111" 
      "Bs": { 
       "id-b-2": true, 
       "id-b-3": true, 
       "id-b-6": true, 
      } 
     }, 
     ... 
    }, 

    "B" : { 
     "id-b-1" : { 
      "something": "value1", 
     }, 
     "id-b-2" : { 
      "something": "value2", 
     }, 
     "id-b-3" : { 
      "something": "value3", 
     }, 
     "id-b-4" : { 
      "something": "value4", 
     }, 
     ... 
    } 
} 

в Таблице идентификаторы записей являются то же, что и идентификаторы, предоставленные зарегистрированному пользователю, user-id-1, так как я не могу добавить дополнительные свойства к объекту пользователя, предоставленному firebase.

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

Так существует связь один-ко-многим между и B.

Скажем, я хочу, чтобы получить все Bs связанные с идентификатор пользователя-1:

  1. Какая структура базы данных лучше в этом Порядок размещения, по вашему опыту?
  2. Как получить все объекты Bs, выполнив только один запрос в базе данных?
  3. Могу ли я использовать свой род где положение, которое позволяет мне отфильтровать Bs, глядя на значении по OwnerId?

Заранее благодарю вас за ответы.

ответ

0

Ваша структура, кажется, описывает отношения «многие-многие», но с разных сторон. так как в «случае 1» OwnerId может содержать более одного ID:

"ownerId": 
{ 
    "user-id-1": true, 
    "user-id-1": true 
} 

и «Случай 2» два из «Bs» может содержать один и тот же Id:

"user-id-1" : { 
     "name": "James", 
     "Bs": { 
      "id-b-1": true 
     } 
    }, 
    "user-id-2" : { 
     "name": "Rob", 
     "Bs": { 
      "id-b-1": true 
     } 
    } 

В обоих случаях иметь один «A», владеющий несколькими «B», а один «B» принадлежит нескольким «As».

Чтобы сделать это один ко многим, я бы предложил использовать «Case 1» и изменить объект

"id-b-4" : { 
    "something": "value4", 
    "ownerId" : "user-id-1" 
} 

Это позволит только один владелец пункта. В «Случай 2» ничто не может обеспечить наличие уникальных «B» для каждого «A». И это также затруднит запросы.

Все, что сказал, оба случая жизнеспособны, на мой взгляд, это зависит от того, как вы используете эти объекты, поскольку пункт продажи Firebase - это данные в реальном времени, вы должны выбрать тот, который более подходит для вашего случая использования , Если вы наблюдаете «Как» выбрали Случай 2. Если вы наблюдаете «Б», выберите «Случай 1». Или вы можете использовать оба варианта, что облегчит вам жизнь.