On Mon, 7 Nov 2016 21:31:02 +0100, Luca Mandolesi wrote:
Salve a tutti,
chiedo un parere di tipo concettuale su una view spatialite.
Se ho una tabella di tipo punto alla quale corrispondo tramite pkid e fkid
dei record in una tabella alfanumerica.
Quindi per 1 punto N record alfanumerici.
Ho creato una view a partire dalla tabella alfanumerica e tramite gli id
gli collego il campo geometrico.
Mi aspetto di avere una tabella con tutti i record alfanumerici con
collegati i punti che in un visualizzatore appaiono 3 punti e la tabella ne
rispecchi la struttura.
Con Qgis ottengo invece questo risultato di visualizzazione
https://www.dropbox.com/sh/00podqheenurjh1/AAAxWmia3kpFgf07jz1clskxa?dl=
0&preview=bug_view.PNG
Qui c'è il DB che ho creato:
https://www.dropbox.com/sh/00podqheenurjh1/AAAxWmia3kpFgf07jz1clskxa?dl=0
Prima di segnalare il bug vorrei avere un parere lato spatialite.
Luca,
mi pare che la tua Spatial View sia concettualmente errata:
questo e' il codice SQL che stai usando:
CREATE VIEW edifici_materiali_view AS
SELECT a.ROWID AS ROWID, a. pkuid AS pkuid,
a.tipo_edificio AS tipo_edificio, a.grado_rischio AS grado_rischio,
a.geom AS geom, b.ROWID AS ROWID_1,
b.id_mat_pk AS id_mat_pk, b.tipo_materiale AS tipo_materiale,
b.id_ed_fk AS id_ed_fk
FROM edifici AS a
JOIN materiali AS b ON (a.pkuid = b.id_ed_fk);
da cui risulta chiarissimo che ROWID corrisponde alla PK di
"edifici", mentre ROWID_1 corrisponde alla PK di "materiali".
giusto un commento: entrambe le tavole hanno una PK
debitamente dichiarata, cioe' rispettivamente
edifici.pkuid e materiali.id_mat_pk, e sono ambedue
di tipo INTEGER.
che bisogno hai di tirarti dietro _anche_ i ROWID di
queste due tavole ?
per SQLite quando esiste una PK di tipo INTEGER e'
implicito che quel valore diventa anche automaticamente
il valore del ROWID; in sostanza, ti stai tirando dietro
due doppioni ridondanti e quindi del tutto inutili.
comunque, il problema non e' qua.
il problema nasce quando sei andato a registrare quella
view dentro alla meta-tavola "view_geometry_columns".
qua tu hai assegnato alla colonna "view_rowid" il
valore "rowid_1".
ma come abbiamo visto prima rowid_1 corrisponde alla PK
della tavola "materiali" che e' una tavola non-spatial,
e da li si scatena tutto il pasticcio.
su "view_rowid" devi necessariamente registrare la PK
della tavola che fornisce le geometrie: e quindi nel
tuo caso "pkuid" (o come alias "rowid", ma e' sempre
meglio usare il nome vero piuttosto che l'alias).
per inciso: la tua view crea tre righe che pero'
coincidono con un singolo punto; e' proprio quello
che volevi ottenere ?
in genere le view si usano nell'altro modo; per
ciascuna singola geometria si associano ulteriori
attributi contenuti in una seconda tavola; tu
invece stai facendo l'opposto, crei tante righe
diverse ma tutte quante con la medesima geometria).
ciao Sandro