Я ищу правильный способ структурировать базу данных Firestore для обработки нескольких версий версий документов в одной коллекции.
Например: у меня есть коллекция с именем предложений с несколькими документами , которые соответствуют нескольким предложениям.Для каждого из этих документов я хотел бы иметь историю изменений, что-то вроде изменений в Документах Google.
Поскольку документы поддерживают только непосредственное добавление полей или вложение другой коллекции, я имел в виду структуру:
collections: offers
- documents: offer1, (offer2, offer3, ...)
- fields populated with latest version of the offer content
- nested collection named history
- nested documents for each version (v1, v2, v3), which in turn have fields specifing state of each field in that version.
Это кажется слишком сложным, поскольку у меня последнее состояние и вложенная коллекциядля истории.Может ли это быть как-то в плоской структуре, где последний элемент в массиве является последним состоянием, или что-то подобное.
Кроме того, состояние истории создается при нажатии кнопки, поэтому мне не нужны все возможные изменения, сохраненные в истории, просто снимки, когда пользователь сохраняет их.
Я бы хотел использовать Firebase в качестве моей БД для этого, так как мне нужны другие вещи, так что я пока не буду искать другие решения.
Спасибо!
РЕДАКТИРОВАТЬ: Согласно ответу Алекса, вот мой другой взгляд на это.
Firestore-root
|
--- offers (collection)
|
--- offerID (document)
| (with fields populated )
| |
| --- history (collection) //last edited timestamp
| |
| --- historyId
| --- historyId
|
--- offerID (document)
(with fields populated with latest changes)
|
--- history (collection) //last edited timestamp
|
--- historyId
--- historyId
Таким образом, я могу запросить всю коллекцию offers
и получить массив предложений вместе с последним статусом, поскольку он находится на том же уровне, что и сама коллекция.Затем, если мне нужно конкретное содержимое из состояния истории, я могу запросить сбор истории определенного предложения и получить его состояния истории.Имеет ли это смысл?
Я не уверен в денормализации, так как кажется, что это решает мою проблему и позволяет избежать осложнений.
Еще раз, требования: - возможность получать все предложения с последним состоянием (работы) - возможность загружать определенное состояние истории (работы)
Просто каждый раз, когда я обновляю коллекцию истории сВ новом состоянии я перезаписываю поля непосредственно в коллекции offerID тем же самым последним состоянием.
Я что-то упустил?