# #google-cloud-firestore #database-design #architecture
Вопрос:
У меня есть база данных с коллекцией «свойств» и коллекцией «календарей».
В каждом документе календаря есть поле: «свойства», которое является объектом ключа: bool.
properties: {
XYZ: true,
ABC: true,
}
Тогда у меня также есть поле для каждого свойства с идентификатором календаря.
calendarID: XYZ
Таким образом, я могу видеть, какому календарю принадлежит свойство и какими свойствами обладает календарь.
Когда я обновляю календарь и добавляю свойство, я также обновляю свойство и добавляю ключ календаря. Я делаю это в рамках сделки. Все хорошо.
Моя проблема возникает, когда я удаляю свойство из календаря.
Я не могу сохранить поле bool в календаре в значение false, потому что при обновлении календаря оно обновит свойство, однако свойство может быть активным в другом календаре.
Пример:
- Добавить свойство XYZ в календарь A = XYZ: true
- Удалить свойство XYZ из календаря A = XYZ: ложь
- Добавить свойство XYZ в календарь B = XYZ: верно
- Обновление календаря A случайным образом = СБОЙ, так как это приведет к удалению идентификатора календаря из свойства XYZ, поскольку оно считает его ложным.
Поэтому я думаю, что сохранение ключа: bool-неправильный способ.
Как правильно обновить календарь и свойство в транзакции?
Должен ли я использовать массив? Если бы я сделал это, то разве мне не нужно было бы передавать список удаленных свойств в транзакцию?
Спасибо вам за ваш вклад.