Мы рассматриваем проект схемы нашей базы данных Firestore и заинтересованы в использовании подколлекций для организации данных.Скажем, у нас есть данные, которые моделируют корабли, их рейсы и журналы, которые они должны хранить.Мы могли бы смоделировать это с помощью вложенных коллекций вроде этого:
// {} signifies a collection
{Ships}
001
{Voyages}
voy1
{Logs}
12:01 This was all good
12:11 Things are still good
voy2
{Logs}
09:00 Setting sail
13:00 Iceberg, dead ahead
002
{Voyages}
voy3
{Logs}
16:00 Ship 002 is lost
Это довольно хорошо, потому что позволяет делать вещи вроде этого:
// get all the voyages for ship 001
db.doc('Ships/001');
// get info and logs for voyage 1
db.doc('Ships/001/Voyage/voy1');
// get all the Logs across all voyages
collectionGroup('Logs');
И все другие приятные вещи, которые мы можемделать с вложенными коллекциями ...
Вложенные коллекции помогают нам описать отношения между каждой из этих сущностей и легко выбирать связанные данные без необходимости каких-либо объединений на стороне клиента.
Однако , мой вопрос: что произойдет, если мы обнаружим, что отношения в нашей схеме неверны?Например, мы находим, что журналы не обязательно связаны с рейсом, потому что корабли будут даже брать журналы, когда не в рейсе?Или что корабли могут быть сгруппированы в флоты - уровень выше кораблей.Должны ли мы перенести нашу схему?Нужно ли гибридизировать наши отношения, объединяя клиентский код и полагаясь на вложенную структуру?