MadM@tt
Messages postés2167Date d'inscriptionmardi 11 novembre 2003StatutMembreDernière intervention16 juillet 2009
-
14 nov. 2007 à 22:27
pneau
Messages postés258Date d'inscriptionmercredi 21 avril 2004StatutMembreDernière intervention27 octobre 2010
-
14 nov. 2007 à 22:47
Bonjour à tous,
J'aurais besoin de votre avis au niveau de la conception d'une de mes tables.
J'ai des sites à référencer dans un annuaire.
J'ai une table Sites et une table Categories.
La ou est le problème : un site peut être dans un nombre variable de catégories...
Comment me conseillerez vous de faire : stocker les liens Sites-Categories dans une nouvelle table (qui sera surement immense, et ça ralentira tout non ?) ou alors stocker les numéros des catégories dans la table Sites (dans un champ VarChar par exemple, séparés par des virgules).
Merci infiniment si vous pouvez me donner un conseil
nhervagault
Messages postés6063Date d'inscriptiondimanche 13 avril 2003StatutMembreDernière intervention15 juillet 201137 14 nov. 2007 à 22:38
Salut,
La premiere solution est la mieux adaptée, pour gérer ton probleme.
Ne t'inquite pas pour les performances, cette méthode est la meilleure.
Les bases sql qont conçues pour gérer, les jointures de tables.
NB : par exemple, comment tu ferais pour avoir les sites d'une catégorie.Pour faire un nuage de tags par exemple, solution 1 performante, solution 2 cata au niveau perf.
Ca ne ser à rien de reinventé la roue, à moins que c'est vraiement utile?
pneau
Messages postés258Date d'inscriptionmercredi 21 avril 2004StatutMembreDernière intervention27 octobre 20105 14 nov. 2007 à 22:47
salut,
je pense qu'il est préférable pour toi de créer une table te permettant
de créer le lien entre tes sites et tes catégories.
ensuite, en positionnant des index je ne pense pas que cela soit plus long que d'avoir un champ varchar contenant toutes les catégories.
en effet, dans ce dernier cas, si tu dois récupérer toutes les catégories d'un site et afficher leur libellé (par exemple) tu devras faire les opérations suivantes :
- select listecategorie from tablesite where site = numsite
- effectuer une routine de découpage de l'information pour récupérer les codes catégories de manière unitaire
- boucler sur ces catégories pour aller chercher l'info du libellé
tout cela nécessite du temps de process... de plus, tu n'aura pas la possibilité de gérer une contrainte d'intégrité de type Foreign Key entre Site et catégorie.
ce qui signifie que lors de la suppression d'une catégorie, tu ne pourras pas savoir si un site lui appartient... a moins de le faire manuellement... et la aussi, cela peut etre long...
alors que si tu gère une table de lien, en une requete tu pourras avoir le code site, la catégorie et le libellé de la catégorie .
ex :
Select TableLien.CodeSite, TableLien.CodeCategorie, TableSite.LibelleSite, TableCategorie.LibelleCategorie
From TableLien
Inner Join TableSite On TableLien.CodeSite = TableSite.CodeSite
Inner Join TableCategorie.CodeCategorie = TableCategorie.CodeCategorie
d'autre part tu pourras gérer tes contraintes d'intégrité...