2016-06-04 13 views
0

Ich habe einige Referenztabellen, d. H. AuditType, StatusType usw. Diese Tabellen enthalten ENUM-Standarddaten. Meine Absicht ist es, die Daten dieser Tabellen jedes Mal neu zu erstellen, wenn ich meine Datenbankänderungen veröffentliche, d. H. Diese Tabellen sind nicht für die Identität aktiviert.Referenz Datentabellen referentielle Integrität

Diese Tabellen können jedoch eine Fremdschlüsselbeziehung zu anderen Transaktionstabellen haben. Das Problem ist, dass, während ich versuche, die Daten in diesen (Referenz-) Tabellen neu zu erstellen, ich die Daten nicht löschen kann, da sie bereits referenziert sind.

Ist es korrekt, eine Fremdschlüsselbeziehung in den Transaktionstabellen zu haben? Wenn nicht, wie kann ich sonst mit diesem Szenario umgehen?

Vielen Dank im Voraus.

+0

sind diese Referenztabelle mit statischen Daten? – Rahul

+0

Was meinen Sie mit statischen Daten? – Immortal

Antwort

2

Sie scheinen die Fremdschlüsselreferenzen rückwärts zu haben - oder beschreiben sie zumindest rückwärts. Die Transaktionstabelle sollte über den Primärschlüssel Fremdschlüsselreferenzen auf die Referenztabellen haben.

Sie sollten diese Tabellen bei der Datenbankerstellung ausfüllen und dann insert und delete verwenden, um Änderungen vorzunehmen. Wenn die Fremdschlüssel vorhanden sind, erzwingt die Datenbank die relationale Integrität. Das bedeutet normalerweise, dass die Datenbank überprüft, dass die Werte in der Transaktionstabelle auf korrekte Zeilen verweisen. Das ist eine gute Sache. Es ist das "C" in den ACID-Eigenschaften von Datenbanken.

Wenn Sie also Änderungen vornehmen möchten, löschen Sie die Daten nicht dort. Verwenden Sie insert, um neue Zeilen hinzuzufügen.

+1

Gordons Lösung wird sich über die Jahre in unermesslichem Nutzen auszahlen. In dieser Situation finden Sie oft, dass es der kompilierte Client-Code ist, der das Enum tatsächlich besitzt. Deshalb kann es sich nie ändern, auch wenn es in der DB einfach ist. –

+1

Ein weiterer Nachteil ist, dass wenn Sie einen gespeicherten Prozess haben, der die Transaktionstabelle mit den Enums lädt, aber Sie nicht wirklich die Enums besitzen, dann müssen Sie möglicherweise die neue Enumeration zur Laufzeit in die Elterntabelle einfügen um die Transaktion zu akzeptieren. Dies ist häufig der Fall, wenn Ihre Transaktionstabelle wirklich ein Protokoll bereits abgeschlossener Transaktionen ist, so dass Sie lieber die tatsächliche Transaktion aufgezeichnet haben, anstatt sie vom ref-Integritätsstandpunkt aus fehlzuschlagen, weil die Enumeration fehlt. –

+0

@Gordon, Vielen Dank für die Antwort, es tut mir leid, es war die Art, wie ich die ganze Sache erklärt, die Referenzen sind tatsächlich, wie Sie sie erwähnt haben, die Transaktionstabelle haben tatsächlich die Fremdschlüssel zu den Referenztabellen. Ich bin so froh über die Antwort, die Sie sich ausgedacht haben, und es hat sich tatsächlich (auf eine gute Art und Weise) verändert, so wie ich auch ein paar andere Dinge betrachte. – Immortal