Crie uma coluna de geometria secundária com três dimensões para conter os vértices da cadeia de linhas que possuem os valores de três ordenadas (triplas). Para que esse esquema funcione, as seguintes suposições são assumidas:
- a cadeia de linhas é válida, não contém pontos duplicados
- geometrias são cadeias de linhas
- deve haver pelo menos dois vértices com coordenadas 3d em uma determinada geometria para que seja elegível para ser armazenado em uma coluna de geometria secundária
- um gatilho preencherá a coluna de geometria secundária para mantê-la ACID.
A geometria válida deve ser suficiente para não permitir pontos duplicados em cadeias de linhas e nenhuma interseção automática. Portanto, cada coordenada se comportará como uma chave de primery para identificar o vértice na geometria de origem.
Isso também está correto no modelo relacional:
- não haverá redudância, o vértice sem informação não apareceu na coluna de geometria secundária
- as alterações nos dados de origem serão propagadas para os dados derivados pelo gatilho.
- somente as informações consideradas verdadeiras serão armazenadas no banco de dados, nenhum dado artificial será criado.
Para o caso de várias linhas, as coisas podem ser um pouco mais difíceis, já que agora deve ter uma tabela adicional com uma chave primária composta:
- o rowid (gid, um identificador exclusivo) da geometria de origem
- a posição geometryN dentro da MultiGeometry fornecida que deve ser verificada dentro do intervalo [1-N]
- uma chave estrangeira para a tabela relacionada rowid (gid)
- uma função de disparo / verificação para garantir que o intervalo seja válido
A chave primária acima evitará inserções de índices de geometria duplicados para uma determinada geometria. O gatilho / verificação impedirá índices inválidos. Também as linhas aqui devem ser de dados de origem, dada a chave estrangeira. Todas as regras anteriores se aplicam.
Uma simplificação seria o uso de uma coluna adicional, mas não da geometria de tipo, mas do mesmo tipo de valor Z declarado como matriz.