Il 22/06/2023 10:17, Alessandro Furieri via Gfoss ha scritto:
On Thu, 22 Jun 2023 09:52:26 +0200, Marco Guiducci via Gfoss wrote:
Buongiorno,
la funzione LOAD_SHAPEFILE non permette di creare una FK
(probabilmente perché la tabella referenziata potrebbe non esistere
ancora?)
A quanto leggo SQlite non permette di creare una FK, dopo, con ALTER
TABLE (1). (ottengo errore di sintassi)
Se è così occorre creare una nuova tabella popolandola con la tabella
creata dalla LOAD e creare, contestualmente la/le FK.

Qualcuno mi conferma?


ciao Marco,

effettivamente la ALTER TABLE di SQLite presenta molte limitazioni
rispetto a quella che trovi su altri DBMS (primo tra tutti Postgres).

quello che dici e' corretto; e' possibile definire le PK e le FK
di una tavola solo al momento delle CREATE TABLE perche' la ALTER
TABLE non consente in alcun modo di intervenire a posteriori sulle
definizioni della PK e delle FK

da parte sua la ImportSHP() e' una funzione abbastanza rigida che
si limita a creare una tavola spatial con tutte le colonne che
trova nello Shapefile seguendo una logica di cieco automatismo.

quindi alla fine non hai alternative: se ti serve una Spatial
Table con dei vincoli relazionali FK/PK con ulteriori tavole
te le devi creare a mano per poi procedere al loro popolamento.

nota: in situazioni come queste puo' essere utile ricorrere
ai VirtualShape che trovi documentati qua:
https://www.gaia-gis.it/fossil/libspatialite/wiki?name=Virtual+Tables+(misc)

in sostanza ricorrendo al VirtualShape puoi leggere direttamente
lo Shapfile esterno senza caricarlo nel DB, cosa che ti permette
di popolare la "vera" tavola Spatial creata a mano con tutte le
sue PK/FK semplicemente con una sintassi come questa:

INSERT INTO my_real_table
SELECT a,b,c,d,....,x,y,z
FROM my_virtual_shape;

nota: per inciso questo ti consente anche di specificare
una eventuale WHERE per restringere le features da
importare.

una volta che hai compiuto l'operazione di trasferimento
dei dati poi dovrai semplicemente eliminare la
VirtualShape che non serve piu' a nulla:

DROP TABLE my_virtual_shape;

spero di esserti stato utile,

ciao Sandro
_______________________________________________


grazie Sandro, questa storia della virtual non l'avevo presa in considerazione, forse solo per il nome. non padroneggiando ancora bene lo strumento ho bisogno di "certezze" :-) e il termine è un po' inflazionato negli ultimi tempi.
grazie ancora
procedo (anzi o già proceduto): la prima spatial view è nata. ora ridisfo tutto e riparto. devo mettere le FK su tutte le tabelle (il grafo regionale... che penso tu conosca!). mi domando perché non lo diamo già in sqlite "bell'e che fatto" direbbe qualcuno :-)
marco

--
Marco Guiducci 055 4383194
Regione Toscana - Settore Sistema Informativo e pianificazione del territorio

_______________________________________________
Gfoss@lists.gfoss.it
http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss
Questa e' una lista di discussione pubblica aperta a tutti.
I messaggi di questa lista non hanno relazione diretta con le posizioni 
dell'Associazione GFOSS.it.
764 iscritti al 23/08/2019

Rispondere a