Hai lottato con questo a livello di architettura.
Ho un oggetto che può essere commentato, chiamiamolo Post
. Ogni post ha un ID univoco.
Ora voglio commentare quel Post e posso usare l'ID come chiave esterna, e ogni PostComment ha un campo ItemID che si correla al Post. Poiché ogni post ha un ID univoco, è molto facile assegnare i commenti "di primo livello".
Quando commento un commento, tuttavia, sento che ora ho bisogno di un PostCommentComment, che si collega all'ID del PostComment. Dato che gli ID sono assegnati in sequenza, non posso più semplicemente usare ItemID per differenziare dove nell'albero è assegnato il commento. OSSIA sia un post che un commento possono avere un ID di "5", quindi la mia relazione di chiave esterna non è valida.
Sembra che potrebbe continuare all'infinito, con PostCommentCommentComment's etc ...
Qual è il modo migliore per risolvere questo? Dovrei avere un campo nel commento chiamato "IsPostComment" o qualcosa del genere per sapere a quale collezione allegare l'ID? Questo mi sembra la soluzione migliore che ho visto finora, ma ora mi sento come se avessi bisogno di effettuare chiamate ricorsive a DataBase che iniziano a diventare costose.
Significato, ottengo un Post
e ottieni tutti i PostComments where ItemID == Post.ID && where IsPostComment == true
Poi lo prendo come una raccolta, raccolgo tutti gli ID di PostComments
, e faccio un'altra ricerca where ItemID == PostComment[all].ID && where IsPostComment == false
, quindi ripeterò all'infinito.
Ciò significa che effettuo una chiamata per ogni livello e, se sto chiamando 100 post, potrei fare 1000 chiamate DB per ottenere 10 livelli di commenti ciascuno.
Qual è il modo giusto per farlo?