Vom Nutzen bin ich doch ein sehr großer Fan von Forgein Keys (ich nutze die bei MySQL mit der Tabellenengine InnoDB). Jedoch mache ich mir immerwieder Gedanken ob sich der Luxus von der Performance her lohnt. Im Internet findet man da wie so oft unterschiedliche Meinungen und um mal wieder bissl Schwung ins Entwicklerforum zu bringen dachte ich mir ich werf meine Gedanken mal in den Raum.
Im Internet liest man doch sehr oft, dass es für MySQL ja ein Mehraufwand ist durch Forgein Keys voneinander abhängige Tabellen zu durchsuchen und zu überprüfen ob da je nach Forgein Key auch alles passt.
Bis hierhin stimme ich dem auch zu, dass man dadurch Performance verliert.
Aber nehmen wir mal ein einfaches Beispiel. Ich habe eine Benutzer Tabelle und eine Gebäude Tabelle. Die Gebäude haben eine Spalte "Besitzer" welche via Forgein Key von der Spalte "BenutzerId" der Benutzer Tabelle abhängig ist. Falls der User gelöscht wird, sollen auch die Gebäude gelöscht werden (ON DELETE CASCADE).
Ohne Forgein Keys würde ich den User löschen und dann z.B. noch ein DELETE FROM Gebäude WHERE Besitzer = BenutzerId.
Mit Forgein Keys lösche ich nur den Benutzer und dann werden zusätzlich die ganzen Gebäude durchsucht und die entsprechenden gelöscht, was ja vom Aufwand von MySQL das gleiche ist, oder? Und zuästzlich spare ich mir ein Query!?
Wenn ich also 1 und 1 zusammen zähle sind in solchen Situationen Forgein Keys sogar schneller!?
Erfahrungen/Meinungen?