Использование двух разных структур в одной базе данных Firebase - PullRequest
1 голос
/ 16 марта 2019

В настоящее время я работаю над проектом, в котором мне нужно два разных типа несвязанных структур данных в моем приложении Java Android. Один из них - потребители, другой - виды пищи.

Пользователи настроены так:

Пользователи

  • Идентификатор_пользователь
    • имя
    • возраст
    • пол
    • вес
    • высота

Но мне также нужен такой, который должен выглядеть так:

еда

  • имя
    • углевод
    • жир
    • протеин

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

Редактировать: В итоге я экспортировал JSON, переписал его в соответствии с приведенными здесь хорошими ответами, а затем импортировал его снова. Работает без нареканий. Спасибо за ваши ответы!

{
  "foods" : {
      "name" : {
        "carbohydrates" : "5",
        "fats" : "5",
        "proteins" : "5"
    }
  },    
  "users" : {
    "FjtMNTcDrOP2wcaPAa0E0Cc1jRz2" : {
      "activity" : "Moderate Exercise (3–5 days/week)",
      "age" : "40",
      "gender" : "Male",
      "height" : "180",
      "name" : "Flex",
      "weight" : "86"
    }
  }
}

Ответы [ 3 ]

2 голосов
/ 16 марта 2019

Да, вы можете использовать одну и ту же базу данных Firebase Realtime для хранения этих данных.

RTDB можно упростить до простого дерева JSON.Таким образом, для желаемой реализации у вас будет два ключа в корне вашей базы данных (например, «пользователи» и «продукты»).

{
  "users": {
    "userid1": {
      "name": "somestring",
      "age": "somenum",
      "gender": "somestring",
      "height": "somenum",
      "weight": "somenum",
      ...
    },
    ...
  },
  "foods": {
    "food1": {
      "name": "somename",
      "carbs": "somenum",
      "fat": "somepercent",
      "protein": "somepercent",
      ...
    },
    ...
  }
}

Вы также можете добавлять или удалять дополнительные корневые ключи по своему желанию.и ваш проект обретает форму.

Однако

Как @ Тамир Абутбул предлагает в своем ответе, я бы использовал Cloud Firestore для этого проекта через RTDB.

Причина этого заключается в том, что на основе ваших данных вам, вероятно, потребуется отфильтровать результаты по количеству различных значений за раз в будущем.Cloud Firestore изначально поддерживает эти типы запросов ( docs ), тогда как вам нужно написать специальное решение для RTDB.

Начало работы с Cloud Firestore

2 голосов
/ 16 марта 2019

Да, можно моделировать несколько типов объектов (таких как users и foods) в базе данных реального времени Firebase.Хотя он не имеет понятия таблицы, он представляет собой иерархию значений JSON, и вы можете смоделировать в нем любую структуру, какую захотите.

Например, вы можете выразить свою модель данных с помощью этого JSON:

{
  "users": {
    "userid": {
      "name": "value", 
      "age": 42,
      "gender: "value", 
      "weight": 190,
      "height": 172
    }
  },
  "foods": {
    "name": {
      "carbohydrate": 42
      "fat": 11,
      "protein": 8
    }
  }
}

В реляционных терминах вышеприведенная модель определяет две "таблицы": users и foods.В коде Android вы можете определить отдельные ссылки на каждый из них с помощью:

DatabaseReference rootReference = FirebaseDatabase.getInstance().getReference();
DatabaseReference usersReference = rootReference.getChild("users");
DatabaseReference foodsReference = rootReference.getChild("foods");
0 голосов
/ 16 марта 2019

Вы можете использовать Firebase с Cloud Firestore .

Создать «пользовательские» коллекции с нужной вам структурой данных и другую коллекцию, называемую «продукты», с собственной структурой данных.
Следующий шаг - просто решить, когда использовать любую из этих коллекций (в соответствии с логикой вашего приложения).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...