Zuerst habe ich this StackOverflow question gelesen, also brauche ich nicht darauf hinzuweisen.Table-agnostic Foreign Keys?
Ich arbeite gerade an einem ähnlichen Problem. Insbesondere habe ich eine Datenbank mit einer Überwachungstabelle, die verwendet wird, um Überwachungsinformationen über andere Tabellen innerhalb der Datenbank zu speichern. Die Grundform dieser Tabelle ist:
ID, EntityID, EntityTypeID, ActionTypeID, Datetime
Nun, wie Sie sich vorstellen können, die generische Natur der EntityID bedeutet, dass Fremdschlüsselbeziehungen zu und von dieser Tabelle heikel sind Verwalten Sie, vor allem mit Ihnen durch ein ORM-System in den Mix.
Natürlich ist die Grunt-Work-Lösung, die erforderlichen Abfragen manuell zu tun und verwenden Sie die ORM-Sachen, wo es funktioniert, was mir gut geht.
Das Problem warf jedoch die Frage auf, ob es gibt RDBMS da draußen, die eine Fremdschlüssel-Beziehung des Formulars ermöglicht: Tabelle: ID definiert werden.
Mit anderen Worten, in einer solchen RDBMS enthält die EntityTypeID Spalte könnte Werte wie
'TableA: 1' und 'TableB: somekey'
So ...
Gibt es irgendein RDBMS, das das tut?
Sie haben Recht - Audit bedeutet normalerweise "historisch". FKs können also nicht erstellt werden. –
Ich sehe die Logik dessen, was Sie damit sagen. Allerdings würde ich Ihnen in Bezug auf die Löschung nicht zustimmen. In den meisten, wenn nicht allen der Datenbanken, mit denen ich gearbeitet habe, gibt es so viele Beziehungen zwischen den verschiedenen Tabellen innerhalb des Systems, dass das Löschen eines Datensatzes das Löschen über eine boolesche Wertspalte bedeutet, anstatt sie tatsächlich zu löschen. Dieser Ansatz entspricht auch meiner Einstellung, dass in einem RDB Daten nie wirklich entfernt werden sollten. – OOPMan
@OOPMan: Ich habe beträchtliches Mitgefühl mit dem Standpunkt "Nichts löschen". Temporale Datenbanken unterstützen dies explizit (oder können dies). Allerdings benutzte ich die konventionelle Definition des Begriffs DELETE, was bedeutet, dass der Datensatz wirklich verschwindet. –