Récupération des enregistrements avec slug au lieu d'un ID
-
20-08-2019 - |
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.
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 ").