Löschen einer Spalte aus einer Tabelle in der Produktion

8

Wir haben eine Situation, in der wir die Beziehung zwischen 2 Tabellen von m: 1 auf m: n ändern müssen .

Wir müssen also eine Querverweistabelle zwischen diesen beiden Tabellen erstellen.

Wäre es nach der Migration aller vorhandenen Daten aus der "untergeordneten" Tabelle in die Querverweistabelle eine schlechte Idee, die ursprüngliche Fremdschlüsselspalte in der untergeordneten Tabelle zu löschen?

Wenn wir es dort lassen, haben wir im Grunde technische Schulden. Aber ich bin kein dba und habe kein gutes Verständnis für die Auswirkungen des Löschens einer Spalte aus einer Tabelle. (Ich weiß, dass es möglich ist, aber ist es eine schlechte Idee? Wird meine Datenbank mich dafür hassen?)

Vielen Dank

onefootswill
quelle

Antworten:

5

Ohne die gesamte Struktur Ihrer Tische zu kennen, bin ich in meinen Ratschlägen eingeschränkt. Nein, Ihre Datenbank wird Ihren Tod jedoch nicht darstellen, wenn Sie eine Spalte unter den folgenden Umständen entfernen (keineswegs erschöpfend):

  1. Sie verwenden weiterhin einen Datenbankschlüssel, um Ihre Dimensionen zuzuordnen.
  2. Ihre neuen Indizes in dieser neuen Dimensionstabelle decken die Indizes ordnungsgemäß ab, wenn sie sein sollten.
  3. Sie verwalten diese Anzahl von Indizes, um das Einfügen / Aktualisieren nicht zu überlasten

Ihr neues Design verfügt über zweidimensionale Tabellen und eine Faktentabelle

  • Aus diesem Grund ging es mit einer "Querverweis" -Tabelle von m: 1 nach m: n. Wir nennen dies eine andere Dimension.

Das Design hat tatsächlich die Normalisierung implementiert, um dies zu erreichen

  • Durch das Entfernen einer Abhängigkeit ist Ihr Team besser in der Lage, Fakten abzurufen, die die Verarbeitung Ihrer Daten auf eine aussagekräftigere Weise verändern können.

Hinweis zu Abmessungen und Fakten

  • Dimensionen für den beschreibenden Kontext

Dimensionen bieten den Kontext „Wer, Was, Wo, Wann, Warum und Wie“, der ein Geschäftsprozessereignis umgibt. Dimensionstabellen enthalten die beschreibenden Attribute, die von BI-Anwendungen zum Filtern und Gruppieren der Fakten verwendet werden. Mit Blick auf die Körnung einer Faktentabelle können alle möglichen Dimensionen identifiziert werden.

Wann immer möglich, sollte eine Dimension einwertig sein, wenn sie einer bestimmten Faktenzeile zugeordnet ist . Dimensionstabellen werden manchmal als „Seele“ des Data Warehouse bezeichnet, da sie Einstiegspunkte und beschreibende Beschriftungen enthalten, mit denen das DW / BI-System für die Geschäftsanalyse genutzt werden kann. Ein unverhältnismäßiger Aufwand wird in die Datenverwaltung und Entwicklung von Dimensionstabellen gesteckt, da diese die Treiber für die BI-Erfahrung des Benutzers sind.

  • Fakten für Messungen

Fakten sind die Messungen, die sich aus einem Geschäftsprozessereignis ergeben und fast immer numerisch sind. Eine einzelne Faktentabellenzeile hat eine Eins-zu-Eins-Beziehung zu einem Messereignis, wie durch die Körnung der Faktentabelle beschrieben . Somit entspricht eine Faktentabelle einem physisch beobachtbaren Ereignis und nicht den Anforderungen eines bestimmten Berichts . Innerhalb einer Faktentabelle sind nur Fakten zulässig, die mit dem deklarierten Korn übereinstimmen . Beispielsweise sind bei einer Einzelhandelsverkaufstransaktion die Menge eines verkauften Produkts und sein erweiterter Preis gute Fakten, während das Gehalt des Geschäftsleiters nicht zulässig ist.

Kimball Dimensional Modeling Techniques

Mein Vorschlag ist, dass das Designteam wissen sollte, dass das Durchsetzen von Regeln in der Datenbank am besten ist, es sei denn, dies beeinträchtigt die Leistung. Ich kenne jedoch die Größe oder Quantifizierung Ihrer DDL-Anweisungen nicht, um dies vollständig zu beantworten.

Seien Sie jedoch versichert, dass dies eine positive Änderung für Ihr System sein sollte, da SQL Server jetzt nicht mehr all diese zusätzlichen Daten durchlaufen muss, um das abzurufen, was tatsächlich wichtig ist.

clifton_h
quelle
Danke für die umfassende Antwort. Gut zu wissen, dass die Datenbank damit umgehen kann. Es scheint eine viel traumatischere Operation zu sein, als Zeilen zu löschen. Ich werde die Indizes usw. im Vordergrund haben, wenn ich das Skript plane, um diese Änderung vorzunehmen. Wir werden natürlich Backups und eine Rollback-Strategie haben.
onefootswill
5

Ich weiß, dass es möglich ist, aber ist es eine schlechte Idee? Wird meine Datenbank mich dafür hassen?

Ich kann nicht für deine Datenbank sprechen, aber ich würde dich dafür hassen :-)

Die Legacy-Spalte enthält nach der Änderung redundante Daten. Dies kann zu Datenkonflikten führen, wenn die alte Spalte und die neue XRef-Tabelle nicht konsistent miteinander verwaltet werden. Bedenken Sie, dass Entwickler, die mit den technischen Schulden nicht vertraut sind, die Datenbank logisch beschädigen könnten.

Es fällt mir schwer, mir einen Grund vorzustellen, warum man die alte Spalte und Beziehung nicht entfernen sollte. Dadurch wird auch sichergestellt, dass der gesamte abhängige Code ordnungsgemäß geändert wurde.

Dan Guzman
quelle