SQL Server Foreign Key-Einschränkungsvorteile

7

Wir entwerfen eine Datenbank, in der ich einige FK (Fremdschlüssel) berücksichtigen muss Einschränkungen. Aber es ist nicht beschränkt auf formale Strukturierung und Normalisierung. Wir gehen nur dafür, wenn es irgendwelche gibt Leistung oder Skalierbarkeit Vorteile.

Ich habe einige interessante Artikel durchforstet und nach praktischen Vorteilen geforscht. Hier sind einige Links:

Ссылка

Ich wollte mehr über die Vorteile von FK wissen (abgesehen von der formalen Strukturierung und dem berühmten kaskadierten delete \ update).

  • FK wird nicht standardmäßig 'indiziert', was sind die Überlegungen beim Indizieren eines FK?

  • Wie kann man mit nullbaren Feldern umgehen, die als Fremdschlüssel zugeordnet sind - ist das erlaubt?

  • Hilft dies neben der Indizierung bei der Optimierung von Abfrageausführungsplänen in SQL-Server?

Ich weiß, dass es mehr gibt, aber ich würde es bevorzugen, wenn Experten darüber sprechen. Bitte führe mich.

    
Hemant Tank 27.10.2009, 09:04
quelle

5 Antworten

9
  • Fremdschlüssel bieten keine Leistungs- oder Skalierbarkeitsvorteile.
  • Fremdschlüssel erzwingen die referenzielle Integrität. Dies kann einen praktischen Vorteil bieten, indem ein Fehler ausgelöst wird, wenn jemand versucht hat, Zeilen aus der übergeordneten Tabelle fälschlicherweise zu löschen.
  • Fremdschlüssel werden standardmäßig nicht indiziert. Sie sollten Ihre Fremdschlüsselspalten indizieren, da dies beim Löschen / Aktualisieren Ihrer Elternzeile einen Tabellenscan in der Kindtabelle vermeidet.
  • Sie können festlegen, dass eine Spalte für einen Fremdschlüssel nullwertfähig sein und null eingefügt werden kann.
Andy Jones 27.10.2009, 10:12
quelle
6

Der Hauptvorteil ist, dass Ihre Datenbank nicht inkonsistent wird, wenn Ihr fehlerhafter Client-Code versucht, etwas falsches zu tun. Fremdschlüssel sind eine Art von "Constraint", also sollten Sie sie verwenden.

Sie haben keinen "funktionalen" Vorteil, sie optimieren nichts. Sie müssen noch selbst Indizes erstellen usw. Und ja, Sie können NULL-Werte in einer Spalte haben, die ein Fremdschlüssel ist.

    
Lukáš Lalinský 27.10.2009 09:10
quelle
4

FK-Einschränkungen halten Ihre Daten konsistent. Das ist es. Dies ist der Hauptvorteil. FK-Constraints bringen keinen Leistungsgewinn.

Aber wenn Sie die db-Struktur nicht abnormalisieren, würde ich Ihnen empfehlen, FK-Constraints zu verwenden. Der Hauptgrund - Konsistenz.

    
Vitaliy Liptchinsky 27.10.2009 09:16
quelle
3

Ich habe mindestens ein Beispiel im Internet gelesen, in dem gezeigt wurde, dass Fremdschlüssel die Leistung verbessern, weil der Optimierer keine zusätzlichen Prüfungen zwischen Tabellen durchführen muss, weil er weiß, dass Daten bestimmte bereits fällige Kriterien erfüllen zum FK. Entschuldigung, ich habe keinen Link, aber der Blog gab eine detaillierte Ausgabe der Abfragepläne, um es zu beweisen.

    
dusky 20.09.2011 09:05
quelle
1

Wie erwähnt, dienen sie der Datenintegrität. Jeglicher "Verlust" der Performance würde durch die Zeit, die benötigt wird, um defekte Daten zu reparieren, völlig zunichte gemacht werden.

Es könnte jedoch einen indirekten Leistungsvorteil geben.

Bei SQL Server müssen die Spalten im FK auf jeder Seite denselben Datentyp haben. Ohne ein FK könnten Sie beispielsweise ein nvarchar-Elternteil und ein varchar-Kind haben. Wenn Sie den 2 Tabellen beitreten, erhalten Sie eine Datentypkonvertierung, die die Leistung beeinträchtigen kann.

Beispiel: verschiedene varchar-Längen, die eine verursachen Problem

    
gbn 27.10.2009 11:14
quelle

Tags und Links