AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Referentielle Integrität - notwendig oder nice to have?
Thema durchsuchen
Ansicht
Themen-Optionen

Referentielle Integrität - notwendig oder nice to have?

Ein Thema von ggscholz · begonnen am 9. Jan 2024 · letzter Beitrag vom 10. Jan 2024
Antwort Antwort
ggscholz

Registriert seit: 20. Nov 2013
Ort: Aachen
68 Beiträge
 
Delphi 11 Alexandria
 
#1

Referentielle Integrität - notwendig oder nice to have?

  Alt 9. Jan 2024, 13:20
Datenbank: postgresql • Version: 16 • Zugriff über: Devart uniDac
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
Gerd
  Mit Zitat antworten Zitat
peterbelow

Registriert seit: 12. Jan 2019
Ort: Hessen
704 Beiträge
 
Delphi 12 Athens
 
#2

AW: Referentielle Integrität - notwendig oder nice to have?

  Alt 9. Jan 2024, 13:45
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
Mach es in der Datenbank und Du kannst sicher sein, dass die Daten konsistent bleiben, egal wer und wie darauf zugreift. Das ist simples "future proofing"; auch wenn es momentan nur diese eine Anwendung gibt und nur einen Benutzer: verwendest Du niemals eines der Datenbank-Tools, die mit dem DB Server geliefert werden? Keine SQL-Scripte, keine Änderungen in der Tabellenstruktur, keine "manuellen" Korrekturen von Eingabefehlern? Wirst Du nicht irgendwann mal eine anderes Interface für die Datenbank schreiben (müssen)? Web, Android App?
Peter Below
  Mit Zitat antworten Zitat
Benutzerbild von Jasocul
Jasocul

Registriert seit: 22. Sep 2004
Ort: Delmenhorst
1.355 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Referentielle Integrität - notwendig oder nice to have?

  Alt 9. Jan 2024, 14:26
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.
Wenn du es richtig machst, hast du weiterhin nur eine Stelle, nämlich die Datenbank. Alle Mechanismen, die du in der Anwendung hast, um die referentielle Integrität zu gewährleisten, können dann nämlich weg.
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 )
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.
Peter
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#4

AW: Referentielle Integrität - notwendig oder nice to have?

  Alt 9. Jan 2024, 14:31
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.
$2B or not $2B
  Mit Zitat antworten Zitat
ggscholz

Registriert seit: 20. Nov 2013
Ort: Aachen
68 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Referentielle Integrität - notwendig oder nice to have?

  Alt 10. Jan 2024, 15:56
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
Gerd
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.508 Beiträge
 
Delphi 7 Professional
 
#6

AW: Referentielle Integrität - notwendig oder nice to have?

  Alt 10. Jan 2024, 16:10
'nen Überblick über Constraints unter Postgres findest Du hier Documentation → PostgreSQL 16

Viele Constrains sind datenbankseitig schlichte Einzeiler.

Das bekommst Du (höchstwahrscheinlich / vermutlich) mit keiner Programmiersprache der Welt ähnlich kurz implementiert.

Das
Zitat von ggscholz:
Aber auf jeden Fall erstmal aufwendiger.
trifft von daher eher nur dann zu, wenn man die datenbankseitige Lösung erst später in die Datenbank einbaut, statt sie beim Design der Datenbank von vorneherein mit einzuplanen und umzusetzen.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:44 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz