Ich habe angefangen, in einer neuen Organisation zu arbeiten, und eines der Muster in der Datenbank ist das Duplizieren von Feldern, um den Geschäftsanalysten das Schreiben von Abfragen zu erleichtern. Wir verwenden Django und sein ORM.
In einem Fall behalten wir ein MedicalRecordNumber- Objekt mit einer eindeutigen Zeichenfolge bei, die einen Patienten in einem bestimmten Kontext identifiziert. Wir haben Registrierungsobjekte , die Patienten verfolgen und MedicalRecordNumbers zugeordnet haben , aber anstatt eine Fremdschlüsselbeziehung zu verwenden, duplizieren sie die Zeichenfolge, um das Schreiben eines Joins zu vermeiden ( nicht aus Leistungsgründen). Dieses Muster ist in der gesamten Datenbank verbreitet.
Für mich ist es wichtig, dass ein Datenmodell sauber ist, damit ich gut darüber nachdenken kann. Unnötige Komplexität ist eine Verschwendung meiner begrenzten kognitiven Verarbeitungszeit. Es ist ein systematisches Problem. Es ist ein Problem, dass es nicht leicht ist, Beitritte zu schreiben. Ich möchte nicht unbedingt dafür eintreten, dass wir zurückgehen und das Schema ändern, aber ich würde gerne in der Lage sein, die Probleme mit dieser Art der Vervielfältigung überzeugend zu artikulieren.
quelle
Antworten:
Ihre operative Datenbank sollte stark normalisiert sein, um Anomalien zu reduzieren .
Ihre Analysedatenbank (Warehouse) sollte stark denormalisiert sein, um die Analyse zu vereinfachen.
Wenn Sie keine separate Analysedatenbank haben, sollten Sie einige stark denormalisierte [materialisierte] Ansichten erstellen.
Wenn Sie Ihren leitenden Geschäftsanalysten / Managern anweisen, viele Verknüpfungen für eine einfache Analyse durchzuführen, können Sie entlassen werden.
Agile Data Warehouse Design ist ein gutes Buch
Siehe meine schnellen n‘schmutzigen Data - Warehouse - Tipps hier
quelle
Ich verstehe, warum jemand vermeiden möchte, einen Join für jede Auswahl zu schreiben .
Sie können jedoch einmalig eine Ansicht mit dem Join erstellen und diese anstelle Ihrer nicht normalisierten Tabelle verwenden.
So kombinieren Sie den Vorteil der Normalisierung mit dem Komfort einer einfachen Auswahl.
quelle
Die bereits überarbeiteten Antworten befassen sich hauptsächlich mit dem "Vermeiden von Doppelarbeit" (mithilfe von Ansichten), nicht aber mit dem Warum. Sie zeigen im Grunde, dass das Duplizieren von Spalten die falsche Lösung für das Problem ist, das Schreiben von Abfragen zu vereinfachen. Aber die Frage "Warum keine zufällige Spalte nur zum Teufel duplizieren?" noch steht.
Die Antwort lautet "Wegen Murphys Gesetz". Murphys Gesetz besagt, dass:
In diesem Fall wird angenommen, dass der Inhalt jedes Zeilenfelds einer duplizierten Spalte mit dem Inhalt jedes entsprechenden Zeilenfelds der ursprünglichen Spalte identisch ist. Was schief gehen kann, ist, dass der Inhalt einiger Zeilenfelder von den Originalen abweichen kann und Chaos anrichtet. Sie könnten denken, dass Sie alle erdenklichen Vorkehrungen getroffen haben, um sicherzustellen, dass sie sich nicht unterscheiden, aber Murphys Gesetz besagt, dass sie sich unterscheiden, da sie sich unterscheiden können. Und es wird Chaos geben .
Betrachten Sie als Beispiel, wie dies geschehen kann, einfach die Tatsache, dass die duplizierten Spalten nicht durch Magie gefüllt werden. Jemand muss tatsächlich Code schreiben, in dem Werte gespeichert werden, wenn Zeilen in der Originaltabelle erstellt werden, und Jemand muss Code schreiben, der sie immer dann aktualisiert, wenn die Originale geändert werden. Abgesehen von der Tatsache, dass dies zu einer übermäßigen Belastung des Codes führt, der Daten in die Datenbank eingibt (und der per Definition weitaus wichtiger ist als jeder Code, der einfach die Datenbank abfragt), könnte jemand irgendwo unter bestimmten Umständen vergessen diese Vervielfältigung durchzuführen. Dann unterscheiden sich die Werte. Sie können sich auch daran erinnern, die Vervielfältigung auszuführen, jedoch nicht innerhalb einer Transaktion, sodass sie unter bestimmten seltenen Fehlerbedingungen möglicherweise weggelassen wird. Aber ich musste nicht wirklich meine Zeit damit verschwenden, diese Beispiele zu schreiben.Wenn es schief gehen kann, wird es.
quelle
Es wird produktiver sein, wenn man es eher in Kompromissen als in Gut / Schlecht sieht. Sie tauschen die Vorteile der Normalisierung (insbesondere die Konsistenz) gegen die Vorteile der Benutzerfreundlichkeit von Abfragen aus.
Im Extremfall würde die Datenbank unbrauchbar, wenn die Daten stark inkonsistent würden. Auf der anderen Seite wäre die Datenbank nutzlos, wenn es für die Leute, die sie jeden Tag abfragen müssen, zu schwierig wäre, Ergebnisse zu erhalten, auf die sie zählen können.
Was können Sie tun, um Risiken und Kosten zu reduzieren?
quelle
Ich denke, das stärkste Argument für die Normalisierung von Daten für Geschäftsanalysten ist, dass es die Datenintegrität fördert. Wenn Ihre Schlüsseldaten nur an einer Stelle (eine Spalte, eine Tabelle) gespeichert sind, ist es viel unwahrscheinlicher, dass die Daten durch falsche Aktualisierungen beschädigt werden. Ich denke, sie würden sich wahrscheinlich für die Wichtigkeit der Datenintegrität interessieren, daher könnte dies eine gute Möglichkeit sein, sie davon zu überzeugen, ihre Interaktionsweisen mit der Datenbank zu aktualisieren.
Eine etwas schwierigere Abfragemethode ist wahrscheinlich einer möglichen Datenbeschädigung vorzuziehen.
quelle
Hinzufügen zu dem, was die anderen Jungs oben vorgeschlagen haben. Dies ist eine Frage der Datenverwaltung. Sie müssen mit relevanten Stakeholdern zusammenarbeiten: Datenarchitekten und Datenverwaltern, um Datenprinzipien, Richtlinien und Namenskonventionen zu entwickeln.
Sei geduldig und arbeite methodisch. Veränderung wird nicht über Nacht geschehen.
quelle
Verlassen.
Ehrlich gesagt, können Sie Monate damit verbringen, über Normalisierung, Konsistenz und die Bekämpfung verrückter Fehler zu streiten, die durch reine Faulheit verursacht werden, und dann aufhören.
Oder Sie können einfach Zeit und Frust sparen und jetzt aufhören.
Gute Programmierer sind sehr faule Leute. Sie verstehen Kunden- und Managementbedürfnisse. Aber am wichtigsten ist, dass sie verstehen, dass das Lösen von Problemen mit gut konzipierten und implementierten Lösungen ihnen persönlich RIESIGE Arbeit, Mühe und vor allem Qual und Stress erspart .
Sie arbeiten also viel besser an einem Ort, der gutes Engineering versteht und schätzt.
Viel Glück.
Nachgedacht: Vielleicht brauchen sie BI / OLAP-Tools ... http://en.wikipedia.org/wiki/Online_analytical_processing
quelle