Une base de données peut-elle être testée pour voir si elle est incohérente?

18

Nous savons tous que Drupal ne prend pas vraiment en charge le concept de clés étrangères dans la base de données, et ne le fera probablement jamais 1 .

Nous savons également qu'il est possible que les modules ne fassent pas la bonne chose, ou que les utilisateurs fassent périodiquement des choses folles comme

DELETE FROM node_revision
WHERE vid = 123

dans un effort pour "garder la base de données en ordre". Dans ce cas, les hooks ne s'exécutent pas et la base de données contient des données orphelines. Généralement, ces données sont inoffensives, mais occasionnellement, elles provoquent un comportement vraiment étrange et peuvent faire ressortir des bogues dans le code.

Existe-t-il des méthodes décentes pour détecter si vous avez des données mortes et / ou incohérentes dans votre base de données?

1 L'API de schéma Drupal 7 les prend en charge pour la documentation , mais pas pour leur application.

mpdonadio
la source
Je suppose que vous voulez dire "toutes les méthodes décentes de Drupal"? Ou êtes-vous ouvert à un outil extérieur?
iconoclaste du
Idéalement, au sein de Drupal, mais je suis ouvert à tout. J'ai commencé à planifier la création d'un outil Drupal, mais je ne sais pas jusqu'où il ira.
mpdonadio
Le problème peut-il être réduit à un ensemble de requêtes SQL pour trouver ces données? Si vous n'étiez pas en train de construire un outil facile à utiliser avec une belle interface utilisateur Drupal, mais plutôt assis à un client MySQL émettant des requêtes manuellement, comment trouveriez-vous de telles incohérences?
iconoclaste du
Les requêtes ne sont pas vraiment le problème. Il s'agit plus de savoir sur quelles tables interroger et sur quelles clés se connecter. Mon idée de papier est d'utiliser l'API de schéma pour obtenir toutes les tables, puis d'essayer de déterminer à partir de chaque schéma si nous pouvons créer une requête. Cela peut finir par être un projet de vacances pour moi.
mpdonadio
BTW, ressemblant finalement à un soutien FK J8: drupal.org/node/911352
Nic

Réponses:

2

Pendant que j'écrivais une description pour un projet sandbox, j'ai rencontré un projet sandbox pour faire ceci:

http://drupal.org/sandbox/anton_krechetov/1345066

Il ne fonctionne actuellement que pour Drupal 6, et il n'y a eu aucun commit depuis novembre 2011, mais il semble prometteur.

mpdonadio
la source