24 Stimmen

Sollte ich Fremdschlüssel verwenden?

Mögliches Duplikat:
Was ist falsch an Fremdschlüsseln?

Ich verwende MS Sql Server mit einer großen Datenbank mit etwa 4 GB Daten.

Ich suche im Internet, warum ich Fremdschlüssel verwenden sollte. Bis jetzt habe ich nur die Schlüssel indiziert, die zum Verbinden von Tabellen verwendet werden. Leistung ist alles in Ordnung, Datentreue ist kein Problem.

Sollte ich Fremdschlüssel verwenden? Bekomme ich mit Fremdschlüsseln noch mehr Leistung?

17voto

Dana the Sane Punkte 14222

Fremdschlüssel verbessern die Leistung nicht wirklich, sondern verursachen bei allen Schreibvorgängen einen kleinen Leistungsverlust, um sicherzustellen, dass die Einschränkung befolgt wird.

Der Grund, warum Sie diese verwenden sollten, ist, dass Sie zerstörerische Schreibvorgänge verhindern wollen. Wenn Sie diese nicht haben, kann fehlerhafter Code oder eine schlechte SQL-Anweisung Zeilen entfernen, die eigentlich vorhanden sein sollten.

17voto

Tom H Punkte 45699

Integrität mag heute kein Problem sein, aber genau diese Einstellung macht es morgen oder in zwei Wochen zu einem Problem.

6voto

dkretz Punkte 36862

Ein Fremdschlüssel ist in erster Linie ein Werkzeug zur Durchsetzung der Datenbankintegrität, was nichts mit der Ausführungsgeschwindigkeit zu tun hat.

Wenn Sie Ihr Indexdesign bereits optimiert haben, dann haben Sie diese Indizes wahrscheinlich bereits installiert, zumindest als nicht eindeutige Indizes. Ich würde also nicht erwarten, dass sich die Leistung allein durch die Installation von Fremdschlüsseln (die nicht einmal notwendigerweise einen Index beinhalten) ändert.

Ich wäre allerdings etwas misstrauisch, was die Optimierung Ihres Designs angeht, wenn Sie dieses Konzept nicht bereits im Griff haben.

Lesen Sie die Dokumentation zu Foreign Keys, um zu verstehen, wie sie die Integrität erzwingen (das ist auf jeden Fall wissenswert), und sehen Sie dann, ob Ihre Frage dadurch nicht vollständiger beantwortet wird.

4voto

cdonner Punkte 35735

Was in der älteren Frage, auf die SquareCog verlinkt hat, nicht erwähnt wurde - ja, Fremdschlüsselbeschränkungen können bei der Datenbereinigung, bei Batch-Updates, bei der Generierung von Testdaten oder bei jeder Art von Operation, bei der Sie die normale Abfolge der Dinge umgehen, ein Problem darstellen. Aber - Sie können Ihre Fremdschlüssel-Beschränkungen immer aufheben, bevor Sie so etwas tun, und sie dann später wieder neu erstellen (wenn Sie Ihre Datenbankobjekte richtig gescriptet haben, ist das kaum zusätzliche Arbeit).

Früher war ich faul, aber jetzt bin ich von Fremdschlüssel-Beschränkungen abhängig. Es gibt immer noch Situationen, in denen man sie nicht gebrauchen kann - wie bei datenbankübergreifenden Beziehungen.

4voto

Aussie Craig Punkte 772

Es gibt eine Eigenschaft/Einschränkung, die Fremdschlüssel in Ihr System einbringen, die bisher noch nicht erwähnt wurde. Das ist die Festschreibungs-/Transaktionslogik (so nenne ich sie jedenfalls). Bei aktivierten Fremdschlüsseln müssen alle Zeilen für eine Aktualisierung in allen betroffenen Tabellen vorhanden sein, damit die Übertragung funktioniert (und nicht einen SQL-Fehler auslöst, der besagt, dass die Fremdschlüssel-Beschränkungen verletzt wurden).

Wenn Sie einen Code haben, der funktioniert und mit Commits/Transaktionen "schnell und locker" spielt. Dann könnte es sein, dass Sie etwas nachbessern müssen, damit die Dinge mit FKs im Schema funktionieren.

Außerdem können Sie zumindest bei Oracle Beschränkungen deaktivieren (nicht nur löschen/entfernen). Sie können sie also leicht ein- und ausschalten. Das ist praktisch, wenn Sie einige Massenoperationen durchführen wollen, ohne den Overhead der Beschränkungen, oder um einige "Operationen" an den Daten durchzuführen, die Zwischenzustände haben, die die Beschränkungen nicht erfüllen würden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X