Aller au contenu

Cherche un moyen de gerer des categories


Sujets conseillés

Posté (modifié)

Bonjour,

Suite a mon précédent post,

Je cherche un moyen de gerer des catégories pour une entrée dans la table "Jeux" sachant qu'une entrée peu avoir plusieurs catégories. Les catégories devront être inscrit par leur id dans les entrée de la table "Jeux".

Je ne voi pas comment faire.

Merci,

Cordialement.

Modifié par NorSeb
Posté

Bonjour,

Ta demande n'est pas très claire, on est pas censé connaitre ton post précédent. Tu peux en dire un peu plus sur ta structure ?

Il semble que si tu doit faire des liens multiples entre deux tables, qu'il va te falloir utiliser une table intermédiaire contenant les id des jeux et des catégories.

Posté (modifié)

Pardon si je n'ai pas été assez clair.

J'ai une table categories avec >

| ...ID... | ...Titre... | Description |

----------------------------------------

| 1 | Action | Jeux d'action |

| 2 | Strategie | Jeux de strat |

| ... | ... | .......... |

| 14 | Sport | Jeux de sport |

Et une table Jeux :

| ...ID... | ...Titre... | Description | Categories ? |

----------------------------------------

| 1 | Arcomagic | Jeu de tir a l'arc | ? |

Ma question est pour le champs "Categories", je voudrais pouvoir inserer plusieurs categories exemple : Action et Sport avec les ID des categories donc 1 et 14.

Le probleme c'est que si j'insert dans categories "1 14" je n'arrive pas à faire resortir les categories. Cette entrée aparaitra dans la categorie 1, 14 et 4. C'est pouquoi je cherche un moyen de contourné tout sa.

Dites moi si vous ne comprenez pas quelque chose. Merci

Modifié par Siol
Posté

Non là c'est clair :)

La solution est d'utiliser une table intermédiaire comme je te l'ai dis plus haut.

jeux_categories

------------------------------

id_jeu | id_categorie

De cette manière tu peux "mettre" autant de catégories à un jeu.

Il va de soit que le champ catégorie de la table jeu devient obsolète...

Posté

Merci beaucoup.

Je me demande, avec autant de tables, les pages de mon site ne risque t'elle pas de mettre un trop long moment a ce charger ?

Merci.

Posté

Les requètes seront plus complexes mais je ne pense pas que tu y vois une différence significative en terme de performances. D'autant que c'est assez classique comme structure.

Pas d'inquiétude à avoir selon moi ;)

Posté

Pas de pb de performance si tu crée les index qui vont bien dans tes tables ( clé primaire et clé étrangère ) !

Posté
Merci beaucoup.

Je me demande, avec autant de tables, les pages de mon site ne risque t'elle pas de mettre un trop long moment a ce charger ?

Merci.

<{POST_SNAPBACK}>

Tu en as que trois ;o)

Posté (modifié)

Héhé et non j'en ai plus que trois. J'ai membres, commentaires, stats ect ect

J'ai un peu peur pour le chargement des pages.

Si je peu pas faire autrement. Tanpi pour les visiteurs :unsure:

Modifié par Siol
Posté

Perso je n'utilise pas de tables intermédiaires de liaison, mais je "formate" correctement le champ catégories en séparant les id avec un -

ex : -1-14-

ensuite dans ma recherche sql je fais un like "%-id-%"

Je trouve cette solution plus légère.

Posté

hum. Pas mal pas mal j'allé partir sur l'autre idée, je vai reflechir. Je pense faire comme tu a dit jeroen.

Posté
Si je peu pas faire autrement. Tanpi pour les visiteurs  :unsure:

<{POST_SNAPBACK}>

Franchement, ca m'étonnerait qu'ils y voient une différence.

Posté
hum. Pas mal pas mal j'allé partir sur l'autre idée, je vai reflechir. Je pense faire comme tu a dit jeroen.

<{POST_SNAPBACK}>

A titre perso, je ne choisirai pas cette solution !

Un SGBDR est un système Relationnel

C'est à dire un système optimisé pour gérer les relation entre les tables.

Cette optimisation passe, entre autre, par la création des bons index sur les bons champs.

1. Imagine que tu désire supprimmer la catégorie n° 1. Avec un système normalisé une simple requête va te permettre de supprimmer toutes les liaisons entre tes jeux et cette catégorie.

DELETE * FROM jeu_categorie WHERE IDCategorie = 1

Tu peux aussi gérer des triggers onDeleteCascade ou onUpdateCascade qui vont te permettre de maintenir la cohérence de ta DB. La gestion des triggers démarre avec mySQL 5.0.

2 Pour les pb de performances :

=> Il faut créer des index

=> Utilise un système de cache sur ton site

3. Commence d'abord par normaliser ta base de donnée. Ensuite, et seulement ensuite, tu peux dénormaliser ta table pour des raisons de performance ou de simplification. Il ne faut pas rester prisonier des règles de normalisation.

Je ne sais pas si tu es en entreprise ou pas, mais essaye de prendre des bonnes habitudes de modélisation de tes bases de données.

Posté (modifié)
Pourquoi pas

| ...ID... | ...Titre... | Description | Catégorie 1 | Categorie 2 |

?

<{POST_SNAPBACK}>

Cette structure n'est pas adaptée à une DB performante et évolutive.

Il en met combien de champ CategorieN : 1, 2, 3, 10, plus ?

Disons qu'il en met 5.

Qu'est-ce qu'il fait le jour où un jeu à 6 catégories ?

Modifié par anorci
Posté

Bonjour,

Concernant la solution du 'like', ce n'est franchement pas optimisé. Sur une petite base, la différence sera minime mais s'il faut traiter des milliers d'enregistrements, le 'like' se trouve très très gourmand.

Créé des index, fais tes requêtes avec des "inner join" et tu auras des requêtes très performantes.

Le tout n'est pas d'avoir 150 tables mais plutôt d'avoir une structure cohérente et évolutive.

Portekoi

Posté
Cette structure n'est pas adaptée à une DB performante et évolutive.

Il en met combien de champ CategorieN : 1, 2, 3, 10, plus ?

Disons qu'il en met 5.

Qu'est-ce qu'il fait le jour où un jeu à 6 catégories ?

<{POST_SNAPBACK}>

J'ai donné cette solution car il rechignait à créer une table suplémentaire. Il est bien évident que la solution de la table suplémentaire est la plus évolutive. ;)

Posté
J'ai donné cette solution car il rechignait à créer une table suplémentaire. Il est bien évident que la solution de la table suplémentaire est la plus évolutive.  ;)

<{POST_SNAPBACK}>

Tu sais, je suis un peu psycho-rigide :D

J'aime bien répéter, 1.000 fois le même message, quitte a passer pour un emme.....deur :whistling:

Avoir une bonne structure dés le départ, c'est important pour des pb de performances et de facilité de programmation derrière.

Ensuite on tombe sur des pb qui sont bc plus dur à régler en SQL du style :

http://www.webmaster-hub.com/index.php?showtopic=22620

Posté

Sa serai 3 categories je pense. Mais qui pourrai évolué a ilimité.

Sa me chagrine un peu de mettre trop de tables, sa fait moins "propre", je pensai aussi que sa ralentisser le site.

Posté
Sa me chagrine un peu de mettre trop de tables, sa fait moins "propre", je pensai aussi que sa ralentisser le site.

<{POST_SNAPBACK}>

J'abandonne !

C toi qui voit :rolleyes:

ça veut dire quoi : "ça fait moins propre"

Ce qui ralentit les SGBRD : ce sont les mauvaises conception et les mauvaises requêtes, l'absence ou la mauvaise utilisation des index, etc.

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...