Мне кажется, что ни одна из операций, которые могут потенциально изменить ROWID, не является операцией, которая выполнялась бы в продуктивной среде во время работы приложения.Кроме того, я видел много продуктивного программного обеспечения, которое использует ROWID через транзакцию (обычно всего за несколько секунд или минут).Это программное обеспечение, скорее всего, выйдет из строя до вашего кэша, если ROWID изменился.Поэтому создание кэша базы данных на основе уведомлений об изменениях представляется мне разумным.Просто предоставьте небольшой отказ от ответственности в отношении ROWID.
Единственной проблемной операцией является обновление, вызывающее перемещение в другой раздел.Но это случается редко, потому что это противоречит цели разделения, по крайней мере, если это происходило регулярно.Разработчик конкретной схемы базы данных сможет сообщить вам, может ли такая операция произойти и имеет ли она отношение к кешированию.Если ни в одной из таблиц не установлено ENABLE ROW MOVEMENT
, вам даже не нужно спрашивать дизайнера.
Что касается дублирования идентификаторов ROWID: идентификаторы ROWID не являются уникальными во всем мире, они уникальны в таблице.И вам дают и ROWID и имя таблицы в уведомлении об изменении.Таким образом, кортеж ROWID и имя таблицы - это идеальный уникальный ключ для создания надежного кэша.