Salut à tous,
J'ignore si je suis dans le bon forum. Techniquement je travaille sous MS SQL-Server mais dans la pratique mon problème n'est pas spécifique à un type de SGBD.
Petit litige entre un de mes amis et moi concernant la meilleure manière de mettre en place un système de caractéristiques dynamique.
Je m'explique: nous essayons de mettre en place une sorte de webshop (ou plutôt une banque de données de produits). Nous présentons différents produits en fonction de leur caractéristiques cependant nous nous trouvons face à un problème: comment stocker ces caractéristiques de façon dynamique au sein d'une base de données? sachant qu'une caractéristique peut-être au format numérique (la largeur par exemple), string (la couleur) ou autre. D'autant qu'il faut pouvoir comparer les données d'un même type (il faudrait que je puisse trier les produits en fonction de leur prix, de leur couleur, etc.)
Mon ami est partisan d'utiliser une table au format:
•Id (Identifiant de la valeur)
•XId_caract (Clé étrangère vers la caractéristique en question)
•Type (type de la valeur permettant de savoir dans quelle colonne chercher la valeur)
•Valeur_Entière (contient la valeur si celle-ci est int et null sinon)
•Valeur_Decimale (contient la valeur si celle-ci est decimal et null sinon)
•Valeur_String (contient la valeur si celle-ci est varchar et null sinon)
•Valeur_Date (contient la valeur si celle-ci est datetime et null sinon)
•Valeur_Duree (contient la valeur si celle-ci est timestamp et null sinon)
Il propose en alternative de remplacer les Valeur_[Type] par une clé étrangère qui renvoie vers des tables différentes selon le type (pour éviter de perdre de l'espace) néanmoins j'y suis globalement opposé en raison de la perte d'intégrité référentielle que cela génererait.
Pour ma part, je suis plutôt partisan d'un stockage sous cette forme:
•Id (Identifiant de la valeur)
•XId_caract (Clé étrangère vers la caractéristique en question)
•Type (type de la valeur permettant de savoir le type de la valeur)
•Valeur (contient la valeur sous la forme d'un varchar formaté de manière à permettre la comparaison de type similaires)
Ma méthode souffre bien entendu de défauts elle aussi (entre autre, le fait de placer les données dans un format personnalisé empêche leur accès par des personnes extérieures).
N'arrivant pas à nous décider, je me permet de faire appel à l'équipe pour vous demander quelle est selon vous la meilleure des deux méthode ou, encore mieux, si vous en avez une qui soit meilleure encore.
Je précise que le programme lui-même travaille en orienté objet ce qui restreint partiellement les possibilités.
Un tout grand merci à tous.
Partager