[Gfoss] Spatialite e matrici presenza/assenza(?)

Salve a tutti,
vorrei costruire un DB su spatialite relativo ad un parco naturalistico: in
questa area umida, in ogni stagno sono presenti diverse specie animali e
vegetali e spesso alcune di queste specie sono presenti in uno o pochi
stagni e assenti in tutti gli altri. Agli scopi dello studio è sufficiente
avere un id per ogni stagno collegato ad una colonna geometry con le
coordinate del suo centroide, e sin qui ci siamo: il problema è che non so
come fare per quelle che forse impropriamente ho chiamato matrici
presenza/assenza.
Potreste indicarmi qual'è il modo corretto per affrontare il problema in
teoria ed in pratica con Spatialite?
Vi ringrazio anticipatamente,
Beppe

--
View this message in context: http://gfoss-geographic-free-and-open-source-software-italian-mailing.3056002.n2.nabble.com/Spatialite-e-matrici-presenza-assenza-tp7589353.html
Sent from the Gfoss -- Geographic Free and Open Source Software - Italian mailing list mailing list archive at Nabble.com.

On Tue, 16 Sep 2014 03:48:01 -0700 (PDT), Beppe wrote:

Salve a tutti,
vorrei costruire un DB su spatialite relativo ad un parco naturalistico: in
questa area umida, in ogni stagno sono presenti diverse specie animali e
vegetali e spesso alcune di queste specie sono presenti in uno o pochi
stagni e assenti in tutti gli altri. Agli scopi dello studio è sufficiente
avere un id per ogni stagno collegato ad una colonna geometry con le
coordinate del suo centroide, e sin qui ci siamo: il problema è che non so
come fare per quelle che forse impropriamente ho chiamato matrici
presenza/assenza.
Potreste indicarmi qual'è il modo corretto per affrontare il problema in
teoria ed in pratica con Spatialite?

almeno a prima vista questo problema non presenta nessun aspetto
specificamente legato a SQLite oppure a Spatialite.
e' piuttosto un problema generico di disegno delle basi dati
relazionali.

io personalmente lo affronterei piu' o meno giostrando su tre
tavole:

a) "stagni"
    id_stagno INTEGER PRIMARY KEY,
    .... qualsiasi altro attributo relativo allo stagno, ivi
    compresa un'eventuale geometria ....

b) "specie"
    id_specie INTEGER PRIMARY KEY,
    ... nome generico e specifico (latino), nome volgare italiano etc ...

c) "presenze"

CREATE TABLE presenze (
    id_stagno INTEGER NOT NULL,
    id_specie INTEGER NOT NULL,
    CONSTRAINT pk_pres PRIMARY KEY (id_stagno, id_specie),
    CONSTRAINT fk_pres_stagno FOREIGN KEY (id_stagno)
       REFERENCES stagni (id_stagno),
    CONSTRAINT fk_pres_specie FOREIGN KEY (id_specie)
       REFERENCES specie (id_specie));
CREATE INDEX idx_pres_rev (id_specie, id_stagno);

n.b.: vanno caricate esclusivamente le presenza confermate;
le assenza verranno totalmente ignorate.

a questo punto potrebbe essere utile definire qualche VIEW di supporto:

CREATE VIEW stagni_aux_1 AS
SELECT a.id_stagno AS id_stagno, ... altri attributi stagno ...,
    b.id_specie AS id_specie, ... altri attributi specie ...
FROM presenze AS x
JOIN stagni AS a ON (x.id_stagno = a.id_stagno)
JOIN specie AS b ON (x.id_specie = b.id_specie);

SELECT * FROM stagni_aux
WHERE id_stagno = 1
ORDER BY id_specie;

p.es. questa prima query ti torna l'elenco ordinato delle
specie presenti nello stagno 1.

SELECT * FROM stagni_aux
WHERE id_specie = 1
ORDER BY id_stagno;

questa seconda query ti torna invece l'elenco di tutti
gli stagni dove vive la specie 1.

N.B.: con questa VIEW di esempio non puoi pero' mai sapere
quali sono le specie che *non* vivono in un determinato stagno,
oppure gli stagni in cui una determinata specie e' assente.
se ti interessa anche rilevare esplicitamente le asssenze oltre
che le presenze puoi comunque giocare di LEFT JOIN ... non e'
particolarmente complesso.

auguri e buon divertimento :wink:

ciao Sandro

Il giorno Mon, 22 Sep 2014 19:32:36 +0200
a.furieri@lqt.it ha scritto:

ciao,

On Tue, 16 Sep 2014 03:48:01 -0700 (PDT), Beppe wrote:
> Salve a tutti,
> .......
> come fare per quelle che forse impropriamente ho chiamato matrici
> presenza/assenza.
> Potreste indicarmi qual'è il modo corretto per affrontare il
> problema in
> teoria ed in pratica con Spatialite?
>

almeno a prima vista questo problema non presenta nessun aspetto
specificamente legato a SQLite oppure a Spatialite.
........
c) "presenze"

CREATE TABLE presenze (
........
CREATE INDEX idx_pres_rev (id_specie, id_stagno);

n.b.: vanno caricate esclusivamente le presenza confermate;
le assenza verranno totalmente ignorate.

il problema è modellabile con una matrice cartesiana sparsa,
probabilmente senza nemmeno caratterizzazioni di banda, quindi
difficile da trattare; se la tua infrastruttura di lavoro è un db
relazionale, il suggerimento mi sembra azzeccato;

questo se mai c'era bisogno di una conferma all'opinione di Alessandro
(si parva magnibus licet parere) :slight_smile:

ciao Sandro

ciao,
giuliano

Grazie Sandro,
il tuo "buon divertimento" è appropriato: nata come esigenza professionale,
al pari dei GIS, i database per me stanno diventando una vera e propria
passione!
Beppe

--
View this message in context: http://gfoss-geographic-free-and-open-source-software-italian-mailing.3056002.n2.nabble.com/Spatialite-e-matrici-presenza-assenza-tp7589353p7589560.html
Sent from the Gfoss -- Geographic Free and Open Source Software - Italian mailing list mailing list archive at Nabble.com.