Создайте столбец вторичной геометрии с тремя измерениями, в котором будут храниться вершины линейной линии, имеющие три-ординатные (тройные) значения. Для работы этой схемы предполагаются следующие предположения:
- Линейная строка действительна, она не содержит дублированных точек
- геометрия линейных нитей
- в заданной геометрии должно быть как минимум две вершины с трехмерными координатами, чтобы их было удобно хранить в столбце вторичной геометрии
- триггер заполнит столбец вторичной геометрии, чтобы сохранить его ACID.
Правильная геометрия должна быть достаточной, чтобы не допускать дублирования точек в линейных линиях и отсутствия самопересечения. Таким образом, каждая координата будет вести себя как первичный ключ для идентификации вершины в исходной геометрии.
Это верно и для реляционной модели:
- не будет никакой избыточности, вершина без информации не появилась во вторичном столбце геометрии
- изменения в исходных данных будут распространяться на производные данные с помощью триггера.
- в базе данных будет храниться только та информация, которая считается правдой , искусственные данные не создаются.
Для случая со множеством строк все может быть немного сложнее, так как теперь должна быть дополнительная таблица с составным первичным ключом:
- rowid (gid, уникальный идентификатор) исходной геометрии
- положение geometryN внутри заданной MultiGeometry, которое необходимо проверить, находящееся внутри интервала [1-N]
- первичный ключ для связанной таблицы rowid (gid)
- функция запуска / проверки, чтобы убедиться, что интервал действителен
Приведенный выше первичный ключ предотвратит вставку дублированных индексов геометрии для данной геометрии. Триггер / проверка предотвратит недопустимые индексы. Также строки здесь должны быть из исходных данных с учетом внешнего ключа. Все предыдущие правила применяются.
Упрощением будет использование дополнительного столбца, но не типа геометрии, а того же типа значения Z, объявленного как массив.