связана с тем, что геометрия линейных и площадных объектов должна
храниться во вспомогательных таблицах или в BLOB-полях, что также
существенно снижает скорость обращения к данным.
Во-вторых, хранение геометрии объектов в базе данных не даёт тех
преимуществ, которые имеются при хранении обычных негеометрических
данных. Например, в обычных БД имеются несколько ключевых понятий,
используемых практически во всех прикладных базах данных. Это
«ограничения целостности», не позволяющие вводить некорректные
значения в отдельные поля таблиц и создавать некорректные ссылки между
таблицами базы данных. Это «блокировки», запрещающие редактировать
отдельные поля или целые таблицы базы данных. И это «транзакции»,
позволяющие выполнять большие изменения БД, но в случае ошибки во
время транзакции «откатывающие» состояние всей БД в состояние до её
начала.
Но все эти ограничения целостности, блокировки и транзакции мало
применимы для пространственных объектов. Так, ограничения целостности в
ГИС в основном имеют геометрический характер (например, запрещено
пересечение линий дорог и рек, т.к. пересечение рек дорогами должно быть
только через мост) и их очень сложно описать стандартными средствами
СУБД (в виде хранимых процедур на языке SQL). Блокировки в ГИС должны
также иметь пространственный характер, например, для обеспечения
возможности параллельной работы многих пользователей с одной картой
нужно заблокировать некоторый регион этой карты, что приводит к
необходимости блокировки целых таблиц в СУБД.
Классические транзакции в теории баз данных называют также ещё
короткими транзакциями, чтобы подчеркнуть, что процесс ввода данных в
СУБД обычно занимает немного времени. При этом пока выполняется
транзакция одним пользователем, работа другого пользователя должна быть
заблокирована, чтобы не нарушить целостность базы данных.
В ГИС же требуется выполнять длинные транзакции, в течение которых
пользователь может изменять состояние множества взаимосвязанных слоёв
карты. При этом в процессе редактирования многие геометрические
ограничения целостности могут нарушаться. По окончании ввода данных
(для завершения длинной транзакции) пользователь должен привести базу
данных (карту) опять в допустимое состояние. Длинная транзакция может
выполняться сколько угодно долгое время (дни и даже недели). Очевидно,
что во время ввода данных одним пользователем нельзя блокировать всю
базу данных от изменений другими пользователями на столько большое
время.