Question

J'essaie actuellement de trouver le meilleur moyen (en termes de convivialité et de performances) de traiter des situations telles que la récupération d'enregistrements étiquetés avec une balise, une catégorie ou quelque chose du genre.

Une bonne façon (ce que je voulais faire) serait de récupérer les enregistrements avec le slug tag / category, pour que l'URL ressemble à ceci:

http://stackoverflow.com/questions/tagged/language-agnostic

récupérer des enregistrements par slug, ce qui est meilleur que:

http://stackoverflow.com/questions/tag/789/language-agnostic

aller chercher par ID et ajouter le slug derrière pour qu'il soit plus convivial pour les moteurs de recherche. Celui-ci est plus performant car extraire des données par un ID entier serait plus rapide qu'une chaîne. (cmiiw)

Maintenant, avec un schéma de base de données tel que:

posts    post_to_tags    tags
-----    ------------    ----
id       id              id
title    post_id         name
content  tag_id          slug
...                      ...

est-ce que je le fais bien? Y a-t-il des pièges ou des pratiques exemplaires à connaître pour éviter les problèmes de performances? (par exemple, les balises ne doivent pas dépasser 10 000 enregistrements, ou le nombre total de balises ne doit pas dépasser n caractères, ou autre chose)

Merci d'avance.

Était-ce utile?

La solution

Avec le premier style d'URL et votre conception de base de données actuelle, vous pouvez le faire:

select ...
from   posts p
join   posts_to_tags pt on pt.post_id = p.post_id
join   tags t on t.id = pt.tag_id
where  t.slug = [url slug value];

Tant que tags.slug est indexé, cela devrait être très efficace, à peine différent de

select ...
from   posts p
join   posts_to_tags pt on pt.post_id = p.post_id
where  pt.tag_id = [url tag ID];

Autres conseils

Le premier est meilleur, mais est-il possible de changer les limaces? Dans ce cas, vous auriez besoin d'un tableau de redirection (par exemple, & "Certains-articles sur les chiens &" Sont maintenant & "Article-sur-chiens-et-chats ").

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top