Schéma de données

Résolu
MadM@tt Messages postés 2167 Date d'inscription mardi 11 novembre 2003 Statut Membre Dernière intervention 16 juillet 2009 - 14 nov. 2007 à 22:27
pneau Messages postés 258 Date d'inscription mercredi 21 avril 2004 Statut Membre Dernière intervention 27 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

- MadMatt -

 www.choisir-une-entreprise.com

3 réponses

nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
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?

Bon courage.
3
pneau Messages postés 258 Date d'inscription mercredi 21 avril 2004 Statut Membre Dernière intervention 27 octobre 2010 5
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é...

voilà mon avis...

Pat

 Don't Worry , Be Happy
3
MadM@tt Messages postés 2167 Date d'inscription mardi 11 novembre 2003 Statut Membre Dernière intervention 16 juillet 2009 1
14 nov. 2007 à 22:40
Ok merci beaucoup c'est parfait, j'avais besoin d'une réponse claire ^^

A vrai dire je crois que c'est les grosses bases de données qui me font peur héhé

Bonne soirée

- MadMatt -

 www.choisir-une-entreprise.com
0
Rejoignez-nous