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.
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.
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.
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.
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
Tags und Links sql foreign-keys