Bonjour,
Dans le cadre d'un progiciel de tri, je souhaite représenter et exécuter un arbre de décision dans la base. L'arbre représente les conditions et les valeurs permettant de déterminer la sortie d'un colis sur un trieur. Il a pour but de remplacer la structure traditionnelle de plan de tri avec une table de détail dont les colonnes représentent les critères de tri. Cette structure n'est pas évolutive ni modifiable. De plus elle impose que le code soit adapté aux critères. Impossible d'en ajouter sans modifier le code.
Je m'oriente donc vers un arbre de décisions pour faire cela.
Cet arbre est majoritairement non binaire, il travaille avec des valeurs discrètes qui mènent à des branches selon leur valeur. Il sera utilisé uniquement en lecture pour le processus de tri. Il sera construit 'manuellement' (avec une application), puis utilisé pour un grand nombre de colis.
Tout d'abord, j'ai pensé me faire tout cela par code en me débrouillant pour stoker l'arbre dans la base. Puis je me suis ravisé en regardant du coté des tables de décision. Le problème est qu'elles traitent la plupart du temps d'arbres binaires. Je ne trouve pas d'exemple qui se rapproche de mon cas. Enfin, si j'ai bien compris, la table de décision utilise des colonnes pour représenter les conditions. Cela pose deux problèmes :
1 - j'ai toujours lu qu'il est très mal de modifier la structure de la base de données selon les besoins du client. Une bonne modélisation permet d'avoir une structure fixe qui s'adapte a tous les besoins
2 - Il me parait difficile d'indexer correctement une table dont la nature et le nombre de colonnes est inconnu lors de la conception.
Je me dis donc qu'il existe peut être des astuces pour gérer un arbre de décisions.
Le but premier de mon post est de savoir comment mettre dans la base une telle structure,
savoir si je peux utiliser une table de décisions et si c'est performant
et le top serait que je puisse faire une requête qui pourrait lire l'arbre et me renverrait la décision prise.
Un exemple : j'ai une table colis qui comporte entre autres choses un poids et un code postal. Chaque plage de code postaux est associée à une sortie
Si le poids est supérieur à un seuil, alors les associations des codes postaux sont différentes.
Autre exemple : Chaque colis comporte une date de limite de vente et un code magasin. Si la DLV est périmée, la sortie sera fixe, sinon le colis sera trié selon le code du magasin (avec une association magasin<->sortie donc)
Merci pour votre aide !!
PS : je suis sous sql serveur 2008.
Edit : ortho
Partager