Bonjour à tous,
je dois concevoir un système permettant de gérer des demandes de services pour une boîte d'info. Ces services peuvent être très divers ; ça peut aller de la livraison d'une station de travail à la mise en place de la sauvegarde sur un serveur, en passant par un Blackberry ou une imprimante.
Lorsqu'une personne fait une demande, cela créée un dossier dans la table "dossiers" (ou "demandes", peu importe), contenant la date de la demande, la date d'exécution, le prix, les données du client... qui doit ensuite être lié à la description du service demandé. Je m'interroge sur la meilleure façon de stocker les détails d'un service demandé, sachant que chaque service n'a pas les mêmes propriétés/caractéristiques.
Exemple de services et de leurs caractéristiques :
- sauvegarde d'un serveur (nom du serveur, adresse IP, répertoires à sauvegarder, OS installé...)
- machine virtuelle (quantité de RAM, de CPU, type d'accès Internet...)
- installation des outils Office sur un poste (numéro de bureau, site géographique...)
Solution 1
Chaque service serait dans une table différente : une table "sauvegarde", une table "pc", une table "machine virtuelle", etc. C'est en fait plus ou moins comme ça que c'est fait actuellement. La table des dossiers générale contient alors l'ID du descriptif du service, et le type de service, afin que l'on sache dans quelle table aller chercher les détails du service. Je peux me tromper, mais j'ai le sentiment que c'est pas tip-top, comme méthode !
Solution 2
Je suis à peu près certains que cette solution n'est pas la bonne façon de procéder (je demande quand même pour confirmation) : tous les services seraient dans une même table, cette table possédant grosso-modo deux champs : un champ "attributs" et un champ "valeurs", chacun étant amené à recevoir des données JSON. Mais il me semble que cela viole une règle qui dit que les données doivent être décomposées, non ?
Solution 3
Cette solution m'a été donnée. Elle consiste à mettre tous les attributs de tous les services dans une même table. Cette table aurait trois champs : ID du dossier, nom de la propriété, valeur de la propriété. Ainsi, quand je souhaite afficher les détails d'un dossier, je sélectionne toutes les propriétés correspondant à l'ID du dossier voulu. Ce champ serait indexé pour gagner en rapidité.
Je penchais d'instinct plutôt pour la 1e solution, mais la 3e solution me parait bien. Je souhaiterais néanmoins avoir des avis différents, voir d'autres propositions si vous en avez.
Merci d'avance pour vos réponses
Partager