Domanda

Sto creando una bacheca di thread e sto cercando di mantenerlo semplice. C'è una tabella di messaggi e quindi una tabella di risposte che ha un campo "reply_id" che può essere nullo per indicare una risposta di livello superiore o un valore che indica una risposta con thread.

Sono un po 'confuso su come effettuare una chiamata SELECT su questo tipo di tabella?

Reply
-id (every reply gets a unique id)
-message_id (the message it is replying to)
-reply_id (the id of the reply it may be replying to - for threading)
-reply

So che questo può essere un problema complesso, soprattutto per le prestazioni, ma sto davvero cercando la soluzione più semplice per questo.

grazie ...

È stato utile?

Soluzione

Stai utilizzando l'ingenuo "libro di testo" modo di conservare gli alberi, ovvero memorizzare un riferimento al genitore immediato. Questo design si chiama Elenco di adiacenza . Esistono altre soluzioni:

  • Enumerazione percorso , in cui si memorizza in ciascun nodo dell'albero una stringa che codifica tutti i suoi antenati diretti.
  • Set nidificati , un approccio intelligente di Joe Celko in cui si utilizzano due valori numerici per nodo per associare tutti i suoi discendenti.
  • Tabella di chiusura (o relazione di adiacenza), in cui si utilizza una tabella separata per elencare ogni coppia antenata-discendente.

Vedi la mia risposta a " Qual è il modo più efficiente / elegante per analizzare un tavolo piatto in un albero? " per riferimenti ed esempi del design della Tabella di chiusura.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top