Проблема со структурой базы данных Firestore обновление нескольких документов в транзакции

# #google-cloud-firestore #database-design #architecture

Вопрос:

У меня есть база данных с коллекцией «свойств» и коллекцией «календарей».

В каждом документе календаря есть поле: «свойства», которое является объектом ключа: bool.

 properties: {
    XYZ: true,
    ABC: true,
}
 

Тогда у меня также есть поле для каждого свойства с идентификатором календаря.

 calendarID: XYZ
 

Таким образом, я могу видеть, какому календарю принадлежит свойство и какими свойствами обладает календарь.

Когда я обновляю календарь и добавляю свойство, я также обновляю свойство и добавляю ключ календаря. Я делаю это в рамках сделки. Все хорошо.

Моя проблема возникает, когда я удаляю свойство из календаря.

Я не могу сохранить поле bool в календаре в значение false, потому что при обновлении календаря оно обновит свойство, однако свойство может быть активным в другом календаре.

Пример:

  1. Добавить свойство XYZ в календарь A = XYZ: true
  2. Удалить свойство XYZ из календаря A = XYZ: ложь
  3. Добавить свойство XYZ в календарь B = XYZ: верно
  4. Обновление календаря A случайным образом = СБОЙ, так как это приведет к удалению идентификатора календаря из свойства XYZ, поскольку оно считает его ложным.

Поэтому я думаю, что сохранение ключа: bool-неправильный способ.

Как правильно обновить календарь и свойство в транзакции?

Должен ли я использовать массив? Если бы я сделал это, то разве мне не нужно было бы передавать список удаленных свойств в транзакцию?

Спасибо вам за ваш вклад.