Kann eine Datenbank getestet werden, um festzustellen, ob sie inkonsistent ist?

18

Wir alle wissen, dass Drupal das Konzept von Fremdschlüsseln in der Datenbank nicht wirklich unterstützt und wahrscheinlich niemals 1 .

Wir wissen auch, dass Module möglicherweise nicht das Richtige tun, oder dass Benutzer in regelmäßigen Abständen verrückte Dinge wie tun

DELETE FROM node_revision
WHERE vid = 123

in dem Bestreben, "die Datenbank aufgeräumt zu halten". In diesem Fall werden keine Hooks ausgeführt und die Datenbank enthält verwaiste Daten. Meistens sind diese Daten harmlos, aber gelegentlich verursachen sie wirklich seltsames Verhalten und können Fehler im Code hervorrufen.

Gibt es angemessene Methoden, um festzustellen, ob Ihre Datenbank tote und / oder inkonsistente Daten enthält?

1 Die Drupal 7-Schema-API unterstützt sie zur Dokumentation , jedoch nicht zur Durchsetzung.

mpdonadio
quelle
Ich nehme an, Sie meinen "irgendwelche anständigen Methoden aus Drupal heraus"? Oder sind Sie offen für ein externes Tool?
Iconoclast
Idealerweise innerhalb von Drupal, aber ich bin für alles offen. Ich habe mit der Papierplanung eines Drupal-Tools begonnen, weiß aber nicht, wie weit es gehen wird.
mpdonadio
Kann das Problem auf eine Reihe von SQL-Abfragen reduziert werden, um solche Daten zu finden? Wenn Sie kein benutzerfreundliches Tool mit einer netten Drupal-Benutzeroberfläche erstellen würden, sondern stattdessen an einem MySQL-Client sitzen und manuell Abfragen stellen würden, wie würden Sie solche Inkonsistenzen finden?
Iconoclast
Die Abfragen sind nicht wirklich das Problem. Es ist besser zu wissen, welche Tabellen abgefragt und welche Schlüssel verknüpft werden müssen. Meine Papieridee ist, die Schema-API zu verwenden, um alle Tabellen abzurufen, und dann aus jedem Schema herauszufinden, ob wir eine Abfrage erstellen können. Dies könnte für mich ein Urlaubsprojekt werden.
mpdonadio
Übrigens, es sieht aus, als ob es endlich eine FK-Unterstützung in D8 gibt: drupal.org/node/911352
Nic

Antworten:

2

Während ich eine Beschreibung für ein Sandbox-Projekt schrieb, bin ich auf ein Sandbox-Projekt gestoßen:

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

Derzeit funktioniert es nur für Drupal 6, und seit November 2011 wurden keine Commits mehr durchgeführt, aber es sieht vielversprechend aus.

mpdonadio
quelle