#java #android #firebase #firebase-realtime-database
# #java #Android #firebase #firebase-realtime-database
Вопрос:
У меня следующая структура классов.
class User{
String name;
Thing things[];
}
interface Thing{
}
class ThingA implements Thing{
String something;
}
class ThingB implements Thing{
String anotherthing;
}
Каков наилучший способ сохранения User
объектов в firebase?
То, что я сейчас делаю, похоже;
{
"users": {
"name": "My Name",
"thingAs": [{
"something": "value",
}],
"thingBs": [{
"anotherthing": "value",
}]
}
}
Я не могу придумать другого способа сделать это. Есть ли у вас лучшие решения?
Спасибо!!
Ответ №1:
Главное, что вам нужен маркер в базе данных, который указывает тип каждой вещи. В вашей модели данных вы смоделировали этот маркер как ключ узла, под которым вы храните вещи этого типа.
Альтернативной моделью было бы сохранение маркера типа для каждого элемента отдельно. Итак:
"userA": {
"name": "My Name",
"things": [{
"type": "ThingA",
"something": "value",
}, {
"type": "ThingB",
"anotherthing": "value",
}]
}
Обе модели могут работать, и обе модели имеют преимущества и недостатки. Некоторые из них, о которых я могу быстро подумать:
- Ваша модель сохраняет маркер типа только один раз, в то время как альтернативная модель, которую я предлагаю, сохраняет его для каждого элемента.
- Моя альтернативная модель может поддерживать порядок элементов независимо от их типа, в то время как ваша модель может поддерживать порядок только в пределах того же типа.
Здесь нет единственной правильной модели. Как обычно при моделировании данных NoSQL, все зависит от вариантов использования вашего приложения. Например: если порядок элементов не важен для вашего приложения, то модель в вашем вопросе может сэкономить вам некоторое пространство для хранения базы данных.