web-dev-qa-db-fra.com

Utiliser une base de données = mal incarné?

Je suis en train de faire un développement de plugins WordPress où, d'après ce que je peux dire, je dois soit créer un tout nouveau plugin, soit créer une vue de base de données.

Le client veut quelques journaux simples de téléchargements par utilisateur, puis veut pouvoir exporter ces journaux au format CSV.

La journalisation est assez facile et faite. Mon plan pour exporter les journaux au format CSV consiste simplement à utiliser un plugin d'exportation de table qui devrait exporter les journaux. Le client est satisfait d'une interface basique.

Toutefois, les journaux sont divisés en deux tables, les "catégories" de journaux étant normalisées de manière judicieuse dans une table séparée - mais cela n’a aucun sens pour un utilisateur. Je peux résoudre ce problème très facilement avec une vue de base de données:

CREATE VIEW wp_my_evil_export_view AS 
SELECT  `e`.`id`, `l`.`log_name` as 'category',`l`.`description`, `e`.`date`, `u`.`user_email` as 'email', `e`.`text`
FROM    `wp_wls_entries` as `e`,
        `wp_wls_logs` as `l`,
        `wp_users` as `u`
WHERE   `e`.`log_id` = `l`.`id`
    AND `e`.`user_id` = `u`.`id`

Ceci apparaît alors comme une table séparée dans le plugin, le client peut cliquer dessus et il exporte bien au format CSV.

Cependant cela me fait me sentir légèrement sale. C'est un hack complet, totalement non-WordPress dans tous les aspects et personne ne semble même envisager de créer des vues dans les recherches Google.

Néanmoins, sa simplicité, relativement peu probable à briser à moins que le plugin sous-jacent change sa structure de base de données.

Donc, si cela est VRAIMENT mauvais, laissez cette question constituer un avertissement pour les autres qui tombent ici.

Sinon, cela a-t-il un sens dans ce cas ou existe-t-il une autre méthode simple que j'ai manquée pour résoudre ce problème?

5
icc97

Dans les tableaux personnalisés, vous faites ce que vous voulez. Si vous avez besoin d'une vue, utilisez-la.

Cependant, vous pouvez envisager de séparer le code chez un exportateur. Voir wp-admin/includes/export.php pour un début. Si vous conservez le code SQL et le format d'exportation distincts, vous pouvez:

  • créer facilement un nouvel exportateur pour une autre structure de table
  • utiliser d'autres données pour le même format
  • implémenter une interface utilisateur pour personnaliser l'exportation (séparateur pour CSV, encodage, tables et colonnes)

Le plugin que vous avez mentionné ne fait pas cela. De plus, il n’utilise même pas l’export API interface. Il devrait toujours y avoir un seul endroit pour exporter les données: Outils/Exporter .

5
fuxia