Consistency checks (MSSQL, aber allgemeine Frage)
-
Leider ist man manches Mal gezwungen (meistens aus Performance-Gründen um ständige Join-Queries zu vermeiden), die 3. NF über Board zu werfen.
Gibt es Tools mit denen sich die Datenkonsistenz in einer solchen DB überprüfen lässt?
Fragen die mich quälen:
- Sieht ein gewisses Tupel in allen Tabellen gleich aus?
- Stimmt der abgespeicherte TotalAmount tatsächlich noch mit den Buchungen überein?Manches kann man ja auch mal eben via SQL-Query überprüfen, aber ich möchte ein Tool, welches das automatisiert und mir die Arbeit abnimmt.
MfG SideWinder
-
SideWinder schrieb:
Leider ist man manches Mal gezwungen (meistens aus Performance-Gründen um ständige Join-Queries zu vermeiden), die 3. NF über Board zu werfen.
Bist du dir sicher? Joins sind im Allgemeinen recht preiswert wenn sie auf sinnvolle Zugriffsstrategien zurückgreifen können.
SideWinder schrieb:
Gibt es Tools mit denen sich die Datenkonsistenz in einer solchen DB überprüfen lässt?
Du könntest das selber in der Datenbank mit Trigger realisieren.
-
Ich habe die Daten aber schon vorliegen, für Trigger ist es also zu spät
Naja, da wäre bspw.
System - Project - ParticipatingCompany - CostCenterGroup - CostCenter
Sehr oft, nämlich leider auf der Titelseite wird jetzt bspw. der systemweite Echtzeit-Report über alle CostCenters ausgespuckt. Da bin ich eigentlich schon froh gewesen, eine SystemID in CostCenter zu haben...
MfG SideWinder
-
Das kann man auf der Ferne nicht einschätzen ob es aufwändig ist bzw an den Joins liegt. Klingt eigentlich nicht danach. Hast du es mal gemessen? Hast du dir mal den Anfrageplan ausgeben lassen?
Eine Alternative könnte darin bestehen Snapshots zu fahren also die Kostenstellenübersichten für die Firmen oder Systeme beispielsweise stündlich in einem Snapshot zu aktualisieren und diesen preiswert darzustellen aber eben nur stündlich aktuell.
-
witte schrieb:
Das kann man auf der Ferne nicht einschätzen ob es aufwändig ist bzw an den Joins liegt. Klingt eigentlich nicht danach. Hast du es mal gemessen? Hast du dir mal den Anfrageplan ausgeben lassen?
Eine Alternative könnte darin bestehen Snapshots zu fahren also die Kostenstellenübersichten für die Firmen oder Systeme beispielsweise stündlich in einem Snapshot zu aktualisieren und diesen preiswert darzustellen aber eben nur stündlich aktuell.Ja, ich weiß. Deckt sich nur leider nicht mit den Anforderungen des Kunden
Versucht nicht die Performance zu verbessern, das System ist nun ohnehin schon länger im Einsatz. Es gab nur kürzlich ein Problem, und ich mag rausfinden ob das sonst noch irgendwo im System aufgetreten ist.
MfG SideWinder
-
Ich kenne kein solches Tool.
Und ich denke die Abfragen die man nicht in 2-3 Minuten selbst geschrieben hat, wird man mit so einem Tool auch nicht einfach zusammenklicken können.
Schreibt dir SQL Scripts um die Konsistenz zu überprüfen, und speicher die SQL Scripts halt irgendwo ab, damit du die wiederverwenden kannst.
Oder lass sie gleich über nen Job jeden Tag ausführen und dir das Ergebnis zumailen (ggf. auch nur wenn Fehler gefunden wurden).Zumindest mit MS SQL Server geht sowas relativ einfach.
Und für's nächste Projekt: mit Indexed Views kann man einiges machen, ohne die "eigentliche" DB zu denormalisieren.
Sehr oft, nämlich leider auf der Titelseite wird jetzt bspw. der systemweite Echtzeit-Report über alle CostCenters ausgespuckt. Da bin ich eigentlich schon froh gewesen, eine SystemID in CostCenter zu haben...
Vielleicht haben auch nur ein paar Indechsen gefehlt. Du wärs't nicht der erste Programmierer der mir begegnet, der feste mit Datenbanken rummacht, aber genau garkeine Ahnung davon hat, was wo wie indiziert werden sollte
-
Danke für eure Tipps. Muss ich wohl wirklich selbst Hand an legen. Danke auch für eure Index-Ideen, aber teilweise sind da ganz andere Machenschaften im Gange
MfG SideWinder
-
Tja, solche Machenschaften gibt es nicht nur in Firmen wo sich keiner auskennt. Auch in großen Firmen ist dies durchaus Realität.
Steht mal eine DB wird nicht mehr daran rumgefummelt. Vorallem wenn sie auch noch Millionen von Daten enthält.
MSSQL ist eben auch nicht gerade MySQL oder eine TextDB wo man einfach mal beginnt zu Designen.
Und dann ist der Zug abgefahren und ein Spezialist soll es richten ohne was zu ändern.
-
Also ich habe MSSQL eigentlich gerade als sehr unproblematisch erlebt was nachträgliche Änderungen angeht.
Gerade Dinge wie zusätzliche Indexe anlegen, oder sogar kleinere Änderungen an Tabellen.
-
Ich hatte damit noch nie Probleme. Klar dauert es lange wenn man etwas an Tabellen ändert.
Das ist aber bei jedem RDBMS so. Schon mal das SChema bei MySQL geändert mit einer Tabelle von 50Mill einträgen? Horror.
Da funkt mal die nächsten 15 Minuten nichts.