für unseren Datamart setzen wir Postgresql ein und sind damit auch sehr zufrieden. Allerdings bleibt ein Wermutstropfen: Viele ETL-Tools und auch unsere Datenbankmodellierungstool nutzt Foreign Key Informationen, um diverse Aufgaben zu erleichtern oder überhaupt erst zu ermöglichen. Aus Performancegründen und wie im Datamart üblich, geschieht die Konsitenzprüfung der Daten im Vorfeld im ETL Tool. Das Enforcing von Schlüsseln beim Load in den Datamart führt zu erheblichen Performanceeinbußen und ist überdies unnötig. Meine Frage ist deshalb:
Gibt es in Postgres die Möglichkeit, Foreign Keys zwar zu definieren, diese aber nicht zu enforcen?
Ja, das ist ein typisches Vorgehen in einem DWH Umfeld.
Bei Oracle kann man das auch machen. Man legt einen FK und sagt Oracle: “vertrau mir, das passt alles. Du brauchst das nicht prüfen”.
Bei einem Bulk load von mehreren 100 Millionen Datensätze kann das die Ladezeit deutlich verringern. Der Vorteil gegenüber einem System ohne FKs ist, dass der Optimizer weiterhin die Existenz des Constraint für Optimierungen verwenden kann (ich glaube später eingefügte Datensätze werden trotzdem validiert, nur die exisiterenden eben nicht).
Meines Wissens bieten “alle” großen Datenbanken sowas - zumindest die, die im DWH Umfeld präsent sind (Teradata, SQL Server auf jeden Fall. Bei DB2 bin ich mir nicht sicher, aber ich glaube da geht das auch).
Genau wie castorp sagt: im Data Warehouse Umfeld sind deine Daten in der Regel maschinell generiert.
Dich interessiert maximal die Beziehung der Daten untereinander.
In einem OLTP-Umfeld, wo du sehr häufig mit Menschen interagierst, sieht das komplett anders aus.