2017-10-04 3 views
0

Ich habe versucht, das Konzept der verwaisten Zeilen in einer Datenbank zu verstehen und wie sie gefunden und entfernt werden können.Verwaiste Zeilen in Datenbanken

Sagen Sie zum Beispiel, Sie hatten 2 Tische (Person, Hund) und es gab eine 1-zu-1-Beziehung zwischen ihnen, so muss jeder Mensch einen Hund haben und jeder Hund muss einen Besitzer haben.

Tabelle Person:

ID  Name 
1  James 
2  Matt 
3  Mike 

Hunde Tabelle:

ID Name Owner_id 
1 Sam 1 
2 Rex 2 
3 Max 3 
4 Fred 4 

Nun, wenn ich diese Tabellen mit verbunden:

SELECT * 
FROM Person P 
FULL OUTER JOIN Dog D ON P.id = D.Owner_id 

Dies würde erzeugen ein Ergebnis, bei dem Hund (fred) tut habe einen Besitzer und erscheint nur als NULL.

Ist dies also eine verwaiste Zeile, da es einen passenden Besitzer haben sollte?

Wird dies nur durch keine Primär-/Fremdschlüssel verursacht?

Wie können verwaiste Zeilen in einer Datenbank gefunden werden?

Antwort

3

Sie haben irgendwie Ihre eigene Frage beantwortet. Aber ich würde verwenden die folgenden LEFT JOIN die verwaisten Zeilen zu finden:

SELECT d.* 
FROM Dog d 
LEFT JOIN Person p 
    ON d.Owner_id = p.ID 
WHERE 
    p.ID IS NULL; 

Dies würde jeden Hund Rekord zurück, die keinen passenden Eigentümer hat.

Eine Möglichkeit, solche Situationen zu vermeiden, wäre die Verwendung von Fremdschlüsseleinschränkungen. Mit solchen Einschränkungen wäre es nicht möglich, einen Besitzerdatensatz zu löschen, wenn bestimmte Hundedatensätze immer noch auf diesen Besitzer verweisen.

Ich hoffe, dass diese Antwort Ihnen hilft, den falschen Baum (Wau) zu bellen.

+0

Ja, ich verstehe danke. Was ist die einfachste Methode, verwaiste Zeilen zu finden? –

+0

Nun, ich könnte die obige Antwort bevorzugen, weil es konzeptionell sauber ist. Sie könnten auch versuchen, 'EXISTS' zu verwenden, was ein bisschen schneller sein könnte. –

Verwandte Themen