Yo,
Maintenant que les catégories vont partir en plugin, que les tags sont
déjà un plugin, je propose de libérer la table dc_meta, et de
fusionner catégories/tags en un seul et unique plugin : taxonomy.
En pratique, les 2 tables dc_meta et dc_category vont laisser la place
à 3 tables, et de nouveaux concepts :
* Les vocabulaires
* les termes.
Un vocabulaire définit un groupe de métadonnées pour les billets. Par
exemple : "catégories", "tags", ... ce vocabulaire définit aussi la
méthode de rattachement des métadonnées au billet : valeur unique ou
multiple, organisation hiérarchique (cat) ou à plat (tag).
Un terme est un élément de vocabulaire (ex : catégorie, tag). Un terme
peut être rattaché à 0 ou plusieurs billets, et un billet peut
posséder 0 ou plusieurs termes.
En klingon, on aura donc 3 tables : dc_taxvoc, dc_taxterm, dc_taxpost.
* dc_taxvoc décrit un vocabulaire donné, avec ses propriétés. Un
vocabulaire est rattaché à un blog_id. On y stocke aussi le début
d'url qu'on veut stocker, pour afficher coté public les listes de
termes (ex : categories, tags), et les billets ayant un terme donné
(ex : category, tag).
* dc_taxterm décrit un terme de vocabulaire. Il est rattaché à un
vocabulaire. On y stocke aussi une url donnée pour lister les billets
ayant ce terme (on pourra ainsi définir une URL différente du nom.
Pratique pour les URLHandlers de tags avec accents par exemple)
* dc_taxpost décrit les liens entre les termes et les billets. J'y
vois pour l'instant seulement 2 colonnes : post_id et term_id
Je me suis inspiré de ce que font les copains de chez drupal. Chez
drupal, il y a une table de plus (tax_hierarchy) qui définit les
relations père-fils, que je remplace par des colonnes left/right comme
c'est le cas actuellement pour les catégories.
Il ne devrait pas être compliqué ensuite, de faire une moulinette
d'import des tags/catégories actuels, et de créer 2 classes "legacy"
singeant dcMeta et dcCategory...
Quant à la table dc_meta, plutôt que de la faire disparaître, le but
serait plutôt de la convertir en quelque chose de plus light, ie.
gérer des propriétés additionnelles des billets (ce que fait mymeta
aujourd'hui).
--
Bruno