![]() |
Datenbank: postgresql • Version: 16 • Zugriff über: Devart uniDac
Referentielle Integrität - notwendig oder nice to have?
Hallo in die Expertenrunde,
in den Lehrbüchern zu SQL wird immer auf die referentielle Integrität hingewiesen, um die Datenintegrität zu sichern. Bisher habe ich darauf verzichtet. Die zu meinem Program gehörende DB wird nur von meiner Anwendung benutzt, 'hintenrum' geht's nur, wenn ich als Programmierer irgendetwas ändern möchte. Ich bin also bisher verantwortlich, das die Anwendung in der Datenbank nichts durcheinander bringt. Wenn jetzt eine referentielle Integrität dazu kommt, habe ich zwei Stellen, die für die Datenintegrität zuständig sind - für mich sieht das nach Mehraufwand ohne Mehrwert aus. Gibt es gewichtige Gründe, über Fremdschlüssel die Datenintegrität zu sichern? Werden z.B. Selects schneller in der Ausführung? Bin gespannt auf eure Antworten! Beste Grüße Gerd |
AW: Referentielle Integrität - notwendig oder nice to have?
Zitat:
|
AW: Referentielle Integrität - notwendig oder nice to have?
Zitat:
Wenn du dann im Programm einen Fehler einbaust, der die referentielle Integrität verletzt, gibt es eine Exception. Du kannst also auch nicht ausversehen etwas in der DB kaputt machen, was dieses Thema betrifft. (Andere Dinge natürlich schon :wink:) Das Datenbankdesign ist somit vom Programm getrennt! Ich habe schon in mehreren Firmen gearbeitet, wo auf die referentielle Integrität auf der DB verzichtet wurde, weil dann einige Dinge "einfacher" gehen. Meine Erfahrung dabei ist, dass das genau nicht der Fall ist. Man muss innerhalb der Programmierung das DB-Konzept immer im Kopf haben. Je komplexer die DB wird, desdo größer ist die Fehlergefahr. Es stimmt, dass man z.B. beim Datenimport die Reihenfolge der Tabellen nicht beachten muss, wenn das im Programm verwaltet wird, aber ist es wirklich ein Problem, sowas zu beachten? Verzichtet man bei der DB auf Cascading-Delete, kann man manche Datensätze nicht löschen (z.B. 1:n-Beziehungen). Man muss die Reihenfolge beachten und vermeidet dadurch beispielsweise Datenleichen durch Programmabstürze oder Exceptions (ja ich weiß, es gibt auch Transactions). Nutzt man Cascading-Delete, muss man nur den führenden Datensatz löschen. Der Rest wird automatisch mitgelöscht. Schaut jemand Fremdes auf die DB (zB mit Auswertungstools), ist durch die referentielle Integrität erkennbar, was wie zusammenhängt. Das sind natürlich nur kleine Beispiele, aber ich denke, das macht deutlich, warum es sinnvoll sein kann. Aus meiner praktischen Erfahrung muss ich allerdings auch sagen, dass ich sehr selten sehe, dass die referentielle Integrität auf der DB tatsächlich eingesetzt wird. |
AW: Referentielle Integrität - notwendig oder nice to have?
Außerdem gibt es für die Referenzen automatisch ein paar Indize (ja, die könnte man auch so manuell erstellen)
und damit gehen SELECT+WHERE/JOIN auf diese Felder natürlich wesentlich schneller. |
AW: Referentielle Integrität - notwendig oder nice to have?
Dann mal vielen herzlichen Dank für die deutlichen und (wie immer hier!!) ausführlichen Hinweise, mich nicht um die referentielle Integrität zu drücken.
Ist am Ende ja auch kein Hexenwerk. Aber auf jeden Fall erstmal aufwendiger. Beste Grüße Gerd |
AW: Referentielle Integrität - notwendig oder nice to have?
'nen Überblick über Constraints unter Postgres findest Du hier
![]() Viele Constrains sind datenbankseitig schlichte Einzeiler. Das bekommst Du (höchstwahrscheinlich / vermutlich) mit keiner Programmiersprache der Welt ähnlich kurz implementiert. Das Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:04 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz