Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    Migliore realizzazione di un grafo in un DB relazionale

    Buonasera,

    per via dell'università mi sto trovando impegnato nella realizzazione di una webapplication in java EE in cui il modello è salvato in database mysql.
    La webapplication in oggetto per alcuni punti è simile ad un social network, ed in particolare devo rappresentare un grafo che è la connessione tra le amicizie dei vari utenti registrari.

    Gli utenti si possono registrare al sistema e successivamente aggiungere amici che conosco. Questo è ovviamente un grafo.

    La soluzione più semplice che viene in mente è di realizzare una tabella che si chiama "friends" con due colonne che identificano l'arco. Ho il problema che l'arco ha una direzione. Se devo trovare tutti gli amici di un certo utente devo controllare che il suo ID sia o nella prima o nella seconda colonna. Insomma, questa non è sicuramente la soluzione più elegante.

    Grazie in anticipo
    ...

  2. #2
    fammi giusto capire una cosa.

    due utenti: i classici Pippo e Topolino. Pippo dice di essere amico di Topolino: automaticamente Topolino è amico di Pippo?

  3. #3
    ciao,

    pippo fa una richiesta a topolino, se topolino accetta sono entrambi amici. E' un arco del grafo senza direzioni.
    ...

  4. #4
    quindi ti basterà fare una .... WHERE col1=utente OR col2=utente

  5. #5
    Originariamente inviato da optime
    quindi ti basterà fare una .... WHERE col1=utente OR col2=utente
    Sì, quella è l'idea che appunto avevo all'inizio ma che non mi piaceva molto. Immagino però che sia l'unica realizzazione possibile con un database relazionale.
    Il problema è che così una tupla non ha più chiave primaria, ossia un nodo può essere identificato da due chiavi possibili, ossia (pippo, pluto) e (pluto, pippo).

    Penso a questo punto di raddoppiare le tuple che rappresentano l'arco. In modo che quando eseguo una ricerca, anche complessa, il tempo è molto inferiore. Quindi se ricerco gli amici di Pippo basta che cerco solo nella prima colonna e così poi mi risulta più facile fare la join.


    Ad esempio, se in futuro avessi la necessità di creare una homepage simile a facebook con i link pubblicati da tutti gli amici in ordine cronologico, sarebbe molto più efficente.

    Se che recentemente si sono sviuluppati database a grafi relazionali, ma ovviamente questo implica che io mi studi "roba" nuova, il che mi prenderebbe molto tempo usando magari tecnologie non ancora solide. Poi per me sarebbe difficile trovare un hosting adatto alle mie esigenze nel caso voglia pubblicare il progetto.

    Su google non si trova molto al riguardo di rappresentazione di grafi in DB relazionali. Le uniche rappresentazioni che ho visto sono quelle con tabelle a due colonne ad archi orientati

    Io sono tutto orecchie se avete idee e suggerimenti
    ...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.