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.


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:


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.