"Garbage Collector" in Datenbank



  • Hi,

    ich habe 3 Tabellen A, B, C, die jeweils einen foreign key auf eine vierte tabelle D haben. Mehrere Einträge aus A,B,C können denselben Eintrag in D referenzieren. Ein Eintrag in D wird immer nur einmal im Zus'hang mit einem Eintrag in A, B und C angelegt. Wird der Eintrag von einem EIntrag aus A,B,C referenziert, wird nicht erneut eine Zeile in D anglegt sondern der bestehende Eintrag referenziert.
    Problem ist jetzt nur, dass ich die Tabelle D von Einträgen frei halten möchte die nicht mehr referenziert werden.
    Wie mach ich das am elegantesten und insbesondere am performantesten?

    Vielen Dank,

    Markus



  • Du könntest in der Tabelle D eine Art Referenzzählung einführen:
    In einer zusätzlichen Spalte vermerkst du, wie oft von anderen Tabellen auf dieses Element verwiesen wird. Wenn du ein Element in A, B oder C einträgst, erhöhst du den Zähler der zugehörigen D-Zeile (bzw. fügst ein neues Element mit Zähler=1 ein), beim Löschen verringerst du ihn - und wenn der Zähler auf 0 runtergeht, kannst du die Zeile löschen.


Anmelden zum Antworten