Предположим, у нас есть три разных типа: GreatGrandma
, Grandma
и Mom
. Так как вы, вероятно, предположили, что их отношения с предками выглядят так.База данных Firebase - Как структурировать родовое дерево
- GreatGrandma
- Grandma
- Mom
Поскольку мы не хотим, чтобы гнездиться наши все данные в одном формате JSON дерева, как это было бы просто быть слишком большим, мы могли бы ожидать, структурированная тоже выглядеть примерно так.
"greatGrandmas": {
"$great_grandma_key": {
"name": "Jane Smith",
"birthDate": "1970-01-01"
}
}
"grandmas": {
"$great_grandma_key": {
"$grandma_key": {
"name": "Jane Smith",
"birthDate": "1970-01-01"
}
}
}
"moms": {
"$great_grandma_key": {
"$grandma_key": {
"$mom_key": {
"name": "Jane Smith",
"birthDate": "1970-01-01"
}
}
}
}
Теперь предположим, что мы хотим запросить у мам. Если мы знаем Великую Грэндму и Бабушку, это легко.
firebase.database()
.ref('moms')
.child(greatGrandmaKey)
.child(grandmaKey);
.on('child_added', function (snapshot) { ... });
Мы могли бы затем добавить ограничение по размеру или равный фильтр.
Но скажем, мы хотим получить все типы мамы для определенной Великой Грэндмы. Мы могли бы сделать следующее.
firebase.database()
.ref('moms')
.child(greatGrandmaKey)
.on('value', function (snapshot) { ... });
Однако мы не сможем применить фильтры здесь. Мы будем вынуждены получить все данные. Это не масштабируется.
Как я могу создать базу данных firebase, чтобы я мог запрашивать детей с полным или частичным путем предков?
Кроме того, я хочу иметь возможность ограничивать доступ ко всему дереву и предоставлять доступ только определенным узлам Mom.
Это хороший прецедент для базы данных графов, на которую я верю. –
@AliGajani Вы могли бы быть более конкретным? В частности, опишите, как это может выглядеть в Firebase? –