20-08-2007, 11:25 AM
Voilà, je vais avoir besoin de stocker des structures constituant des listes en SQL. Et je voulais savoir s'il existait déjà un formalisme ou une manière pratique de faire les choses.
Exemple : j'ai une structure de graphe dans ma BDD, sous la forme
celle-ci définit donc des paires de noeuds liés par une chemin d'un type particulier et d'une distance définie.
Maintenant si je veux définir un trajet emprunant ce graphe
une solution facile serait de le stocker sous forme finale :
problème : si un noeud intermédiaire disparaît, ce stockage ne permet de mettre à jour le trajet.
Donc il faut que je le stocke sous forme d'une suite de liaisons...
avec pour un trajet, une suite de champ qui s'appellent. Mais à priori je ne peux pas réunir tous les composants d'un trajet en une seule requête (corrigez moi si je me trompe) et récupérer les informations utiles les plus souvents - départ, arrivée, distance - coûtera beaucoup.
Du coup je serai tenté de stoker les éléments sous une forme plus complète, mais redondante
Un trajet est composé d'éléments qui notent la liaison employée et l'id du prochain élément...
Est-ce que vous voyez une meilleure solution ?
Exemple : j'ai une structure de graphe dans ma BDD, sous la forme
Code :
table links :
id_node1, id_node2, length, type
celle-ci définit donc des paires de noeuds liés par une chemin d'un type particulier et d'une distance définie.
Maintenant si je veux définir un trajet emprunant ce graphe
une solution facile serait de le stocker sous forme finale :
Code :
id_nodeStart, id_nodeEnd, totalLength, type, ...
problème : si un noeud intermédiaire disparaît, ce stockage ne permet de mettre à jour le trajet.
Donc il faut que je le stocke sous forme d'une suite de liaisons...
Code :
table trajets :
id_traj, id_trajSuivant, startNode, endNode
avec pour un trajet, une suite de champ qui s'appellent. Mais à priori je ne peux pas réunir tous les composants d'un trajet en une seule requête (corrigez moi si je me trompe) et récupérer les informations utiles les plus souvents - départ, arrivée, distance - coûtera beaucoup.
Du coup je serai tenté de stoker les éléments sous une forme plus complète, mais redondante
Code :
table trajets :
id_traj, startNode, endNode, length, type
table traj_elems :
id_elem, id_traj, id_liaison, id_nextTraj
Un trajet est composé d'éléments qui notent la liaison employée et l'id du prochain élément...
Est-ce que vous voyez une meilleure solution ?