Ich bin sicher, viele von Ihnen haben / hatten es mit einer hässlichen Datenbank zu tun. Sie wissen, diese Datenbank, die überhaupt nicht normalisiert ist, diese Datenbank, in der Sie eine große, schmerzhafte Abfrage durchführen müssen, um die trivialsten Daten zu erhalten, diese Datenbank, die in Produktion ist und die Sie nicht ein bisschen ändern können ... Sie wissen , "Das hier".
Meine Frage ist, wie gehst du damit um?
- Versuchen Sie, eine neue Datenbank zu erstellen?
- Sie geben auf und lassen es in Ruhe?
- Welchen Rat können Sie geben?
quelle
Das Datenwörterbuch ist dein Freund. Versuchen Sie auch, die Datenbank mit dem Reverse Engineering-Tool in Visio zu rekonstruieren und eigene Diagramme zu erstellen. Da Reverse Engineering interaktiv ist - Sie erstellen die Diagramme -, ist es viel ansprechender als das Lesen eines Datenwörterbuchs. Die Aktivität des Prozesses ist sein Vorteil und ich finde es ziemlich entspannend, dies zu tun.
Die meiste Arbeit erledige ich im Bereich Data Warehousing, wo das Stöbern in den Datenbankschemata des Quellsystems eine Kernaktivität darstellt. Ich habe so etwas schon öfter gemacht und finde, dass es wirklich gut funktioniert.
Visio Pro ist nicht so teuer und mit dem Visio-Modellierungsmodul können Sie ein Modell für mehrere Diagramme freigeben. Als Bonus können Sie fehlende Fremdschlüssel in die Diagramme einfügen und erhalten am Ende eine nützliche Dokumentation für das System.
quelle
Zusätzlich zu den Ideen von Bill Karwin schlage ich vor, mit den Benutzern zu sprechen - gelegentlich wissen die Benutzer ziemlich genau, wofür ihre Datenbank verwendet wird, insbesondere, wenn sie daraus Berichte erstellen.
quelle
Ich habe es mit einer sehr hässlichen für die Software eines Anbieters zu tun. Abgesehen davon, dass ich Vorschläge mache, kann ich nicht viel tun, um sie zu ändern. Ich bin immer bemüht, die Dinge zu ändern, aber da es außerhalb meiner Kontrolle liegt, bin ich mit dem Müll festgefahren.
Eines der Dinge, mit denen ich schnell angefangen habe, da die Datenbank absolut keine Beziehungen hat, ist eine allgemeine Namensabfrage für das Schema:
oder
Da einige der Tabellen zu viele schlecht benannte Spalten und viel zu viele Spalten haben, um nachzuschlagen, was ich möglicherweise zum Bilden von Beziehungen zwischen Tabellen verwenden kann.
Ich weiß, dass dies im Neugestaltungsteil der Frage nicht viel hilft, aber es ist sehr hilfreich beim Verstehen und Entschlüsseln des schlechten Schemas.
quelle
SchemaCrawler ist mein Tool zur Datenbankermittlung, das eine Reihe von Funktionen bietet, mit denen sich eine hässliche Datenbank auf einfache Weise erkunden lässt. SchemaCrawler verfügt über eine "grep" -ähnliche Funktionalität, mit der Sie mithilfe regulärer Ausdrücke nach Tabellen und Spalten suchen können. Beispielsweise könnten Sie mit "ACCOUNT" als Teil ihres Namens nach Tabellen und Spalten suchen, und sie würden wahrscheinlich in irgendeiner Weise zusammenhängen.
SchemaCrawler leitet auch Fremdschlüsselbeziehungen ab, selbst wenn keine Fremdschlüssel vorhanden sind. Dies geschieht, indem "schwache Assoziationen" unter Verwendung allgemeiner Namenskonventionen gefunden werden, z. B. sind Tabellen Namen in der Regel Pluralform, Spaltennamen jedoch nicht, und Spaltennamen können das Präfix _ID haben. Sie können verwandte Tabellen anhand dieser abgeleiteten Beziehungen finden.
quelle
Kommt darauf an, wie hässlich es ist und wie viel Kontrolle Sie über das Design haben und was damit interagiert. Ich musste im Laufe der Jahre bei meinem derzeitigen Job mit einer Reihe von hässlichen Datenbanken interagieren. Und so bin ich damit umgegangen:
Mitarbeiterdaten
Es gibt die Datenbank, die Mitarbeiterdaten enthält. Da es sich um eine Anbieterdatenbank handelt, habe ich keinen Einfluss darauf. Zum Glück habe ich keinen direkten Zugriff darauf. Ich bekomme jeden Morgen einen DTS-Dump.
Das Beste, was mir gelungen ist, ist, ein Skript zu schreiben, das die Eingaben vom Speicherauszug am Morgen löscht (ja, die Wortwahl war beabsichtigt), und es in ein nützlicheres Format zu migrieren und aus den gelöschten Daten zu arbeiten.
Selbst wenn ich es ändern könnte, würde ich es wahrscheinlich nicht tun - nur weil es eine große Anzahl anderer Programme gibt, die sich darauf verlassen, dass es so eingerichtet ist, wie es ist, und ich kann keine Änderung erzwingen.
Online-Trainingsdaten
Dies war ein Durcheinander meines eigenen Designs. Ich habe es frisch aus dem College gebaut, ohne dass mir ein Mentor dabei geholfen hätte. Seitdem habe ich es ein bisschen nach dem anderen repariert. Da ich das einzige Programm kontrolliere, das auf die Daten zugreift, aktualisiere ich beim Aktualisieren von Teilen der Site die Konfiguration der Datenbank. Ich schreibe ein Transformationsskript und teste es intensiv auf einer Kopie, damit sichergestellt ist, dass alle erforderlichen Änderungen vorgenommen werden.
Es war ein langer Prozess, aber es kommt gut voran.
Schulungsdaten im Klassenzimmer
Mein Pilotprojekt bestand darin, Daten aus drei verschiedenen Datenbanken zu integrieren, die alle von meinem Vorgänger, einem Krankenpfleger, der an ein oder zwei Programmierkursen teilgenommen hat, leicht unterschiedlich gestaltet wurden.
Das war ein weiterer langsamer Prozess. Seit ich die volle Kontrolle über die Programme habe, die auf die Daten zugreifen, ändere ich sie nach und nach wie die Online-Trainingsdaten.
Rückblickend wäre dies ein Hauptkandidat für einen sauberen Start gewesen ... die Sicht nach hinten ist immer 20/20.
Schlussendlich...
Ich weiß nicht, wie hilfreich dies war, und ich kann mehr erläutern (bis zu einem gewissen Punkt, firmeneigenes yada yada und alles). Die endgültige Antwort lautet "Es hängt davon ab".
quelle
Nachdem ich alle Ihre Antworten gelesen habe, gebe ich Ihnen meine:
Zuerst suche ich nach der "Master-Tabelle", dann beginne ich mit Stift und Papier, die Beziehungen zu anderen Tabellen abzubilden, und wenn es einen App-Code zu sehen gibt, beginne ich, einige Rohskizzen über den Datenfluss anzufertigen.
Nachdem ich ein schönes Bild davon bekommen habe, wie die Datenbank funktioniert, beginne ich, nach Orten zu suchen, an denen sich etwas ändern lässt. Das ist es.
Ich weiß nicht warum, aber ich bevorzuge Papier gegenüber jeder Datenbankmodellierungssoftware.
quelle
Aufgrund der Verwendung durch eine externe Anwendung können Sie die "Schnittstelle" der Datenbank nicht ändern. Ich weiß nicht, welche Art von Datenbank Sie verwenden (Oracle, MySQL, MSSQL), aber ich sehe dies als eine der Möglichkeiten:
Ansichten, gespeicherte Prozeduren verbergen interne Datenbankänderungen.
quelle
Neben der Ermittlung der Struktur der Datenbank habe ich festgestellt, dass es auch wichtig ist, die Datenqualität zu untersuchen . Sobald Sie die Bedeutung der einzelnen Spalten verstanden haben, können Sie nach Stellen suchen, an denen viele Werte fehlen. Wenn Sie mit den Daten vertraut sind, können Sie auch untersuchen, wo Inkonsistenzen zwischen den Werten in verschiedenen Spalten bestehen.
quelle
Es hängt davon ab, wie Sie interagieren müssen. In Anwendungsszenarien, in denen die Stapelverarbeitung akzeptabel ist, hat es sich häufig als am kosteneffektivsten erwiesen (was die Entwicklungszeit und damit die Kosten für den Kunden angeht), die Daten in eine benutzerfreundlichere Struktur abzustapeln und dagegen zu arbeiten.
quelle
Wenn Sie das Problem in Probleme aufteilen können, um die Sie Ihr Gehirn kümmern können, können Sie sie einzeln angreifen. Wenn Sie wissen, dass ein Tisch nicht voll besetzt ist, können Sie manchmal einen Brückenkopf finden, an dem Sie arbeiten können. Auf diese Weise erweitern Sie Ihren "Clean Spot", um mehr Datenbank in Blöcken zu erfassen.
quelle
Wenn Sie Visio (ein Teil von Microsoft Office) haben, können Sie die Reverse Engineering- Funktion ausprobieren . Es ist nicht schön, aber es gibt Ihnen zumindest einen Anfang (zu einem Bruchteil der Kosten für "echte" Tools wie Rational Rose).
quelle
Schema Spy ist ein sehr nützliches Tool zum Generieren einer ERD.
quelle
Bill gab eine ausgezeichnete Antwort. Ich würde hinzufügen, dass ich mich als Testbenutzer an der Benutzeroberfläche anmelde und versuche, genau zu verstehen, was die Benutzer mit den Daten tun. Es wird Ihnen helfen zu verstehen, warum hinter einigen der gespeicherten Prozesse oder Designs. Für das Verständnis einer Datenbank ist es wichtig zu verstehen, was die Daten bedeuten und wofür sie verwendet werden.
Befindet sich die Datenbank in einer geschäftlichen Funktion oder einem Fach, mit dem Sie im Allgemeinen nicht vertraut sind (z. B. Flugplanung und Sie haben zuvor nur Finanzanwendungen bearbeitet), bitten Sie die Benutzer um Lesematerial zum Fach oder gehen Sie in die Bibliothek Sie sich selbst oder suchen Sie im Internet nach dem Thema. Fragen Sie die Benutzer, ob es rechtliche oder behördliche Probleme gibt, die Sie beachten müssen. Wieder können einige dieser Hintergrundinformationen erklären, was seltsame Designentscheidungen zu sein scheinen.
quelle
Wenn es sich um eine Anbieterdatenbank handelt (und ich habe einige wirklich schlechte gesehen), können Sie sich nur beim Anbieter darüber beschweren.
Bei hausinternen Anwendungen sind in der Regel nur einige Schulungen für die Entwickler erforderlich, und Sie können das Schema ändern, um die Leistung zu verbessern. Es braucht Zeit und ist normalerweise ein langsamer Prozess.
Nach meiner Erfahrung ist das Erstellen einer neuen Datenbank nicht wirklich eine Option, da das Verschieben von Hunderten von GBs oder TBs an Daten nicht so einfach ist.
Es in Ruhe zu lassen ist normalerweise auch keine Option. Wenn die Datenmenge in der Datenbank zunimmt, wird die Leistung immer schlechter (wenn ich die Probleme sehe, sind sie normalerweise verdammt schlecht). Möglicherweise können die Benutzer die Anwendung nicht verwenden, da die Leistung so schlecht ist.
quelle
Ah ... die Hässliche Datenbank. Je größer das Unternehmen ist, desto mehr veraltete Datenbanken werden wir finden.
Es funktioniert nicht immer, aber wenn wir uns nicht anstrengen, wird es nur noch schlimmer. Ich versuche, Datenbanken zusammen mit den Anwendungen neu zu gestalten, da dies bei der Datenmigration möglicherweise mehr Arbeit für mich bedeutet, aber die Leistung ist ein Zaubertrick, den ich mir immer vorgenommen habe.
Viel Glück mit deiner hässlichen Freundin;)
quelle
Prüfen Sie, ob die Option für eine Wissenstransfersitzung für Sie verfügbar ist, und nutzen Sie sie in diesem Fall in vollem Umfang.
Viele DBMS werden mit Tools geliefert, mit denen Sie das Datenbankschema mit einigen hilfreichen Informationen (z. B. Fremdschlüssel) zeichnen / drucken können.
Darüber hinaus können Sie (von NXC gestohlen) die Datenbank mithilfe von Tools wie Visio zurückentwickeln.
quelle
Ich möchte einen Abfrageprofiler starten und beobachten, was auf einem Produktionssystem passiert. Gibt mir eine Vorstellung davon, welche Tabellen "heiß" sind und welche Art von Abfragen sie betreffen.
quelle
Legen Sie eine Sicherungskopie auf einem Sandbox-Server ab und beginnen Sie mit dem Schreiben und Ausführen von Testabfragen. Ich finde ein komplexes System immer verständlicher, wenn ich es in die Hand bekomme und mir keine Sorgen mache, es zu beschädigen.
Außerdem möchte ich The Daily WTF in einem Browserfenster öffnen. Die Übernahme des Designs einer anderen Person beinhaltet normalerweise eine Menge "Ich kann nicht glauben, dass sie WTF gemacht hat" -Momente, und es ist hilfreich, einen Ort zu haben, an dem die Leute Ihren Schmerz verstehen.
quelle