Vorteile bewusst/gezielt Redundanzen in einer Datenbank zuzulassen?

2 Antworten

Von Experte TheFamousSpy bestätigt
Ein Vorteil ist sicherlich die höhere Sicherheit.

Nö, die Sicherheit kriegst Du auch mit häufigen Backups

Was für Vorteile gibt es noch für eine Datenbank, wenn man bewusst/gezielt Redundanzen in ihr zulässt?

So pauschal, einfach nur, damit es redundant ist? Gar keine.

Wenn Du dein Datenmodell aber z.B. bewusst für Leseoperationen optimierst, kann das wichtig sein, da Joins Zeit kosten, die man vielleicht nicht hat.

Allerdings muss Du dich dann auch darum kümmern, dass die Redundanzen nicht zum Problem werden. Z.B. Banken haben dafür mehrere Datenbanken, passend für den Anwendungszweck optimiert. So könnte es eine normalisierte Datenbank ohne Redundanzen sein, in der die Änderungen stattfinden und alle 5 Minuten wird eine reine Lese-Datenbank (eine Tabelle je Ziel) automatisch aus der ersten Datenbank aktualisiert.

Woher ich das weiß:Berufserfahrung – C#.NET Senior Softwareentwickler

RedDevil1982 
Beitragsersteller
 09.01.2023, 12:24

Danke für deine Rückmeldung. Könnte folgendes auch ein Vorteil sein, wenn man "gezielt" Redundanzen in einer DB einsetzt:

"bessere Performance (Zugriffe beschleunigen, wenn nicht erst Indizes aufgelöst werden müssen"

Eine Rückmeldung deinerseits wäre sehr nett.

Palladin007  09.01.2023, 13:53
@RedDevil1982

Klingt nach einem Multiple-Choice-Aufgabe

Und exakt das habe ich geschrieben, nur etwas anders formuliert. Wobei das Zitat exakter ist, da sich meine Aussage auf Leseoperationen beschränkt.

RedDevil1982 
Beitragsersteller
 14.01.2023, 13:04
@Palladin007

Ehrlich gesagt, versteh ich dies nicht ganz.

Die Daten liegen doppelt in meiner Datenbank bei Redundanzen. Warum ist dies besser um Zugriffe zu beschleunigen "bessere Performance", als wenn nicht erst Indizies aufgelöst werden müssen?

Bitte so erklären, dass es auch ein Datenbank-Anfänger versteht. Danke!

Palladin007  14.01.2023, 17:23
@RedDevil1982

Wenn Du Datum (Einzahl von "Daten") A und Datum B haben willst, Datum B aber nur über eine Fremdschlüssel-Beziehung zu einer anderen Tabelle erreichbar ist, muss die entsprechende Zeile in der zweiten Tabelle gesucht werden. Das braucht Zeit. Wäre Datum B aber in der ersten/selben Tabelle liegt, dann liegt beides direkt nebeneinander, was dann quasi instant dazu geholt werden kann.

Das betrifft nicht nur das Lesen, sondern auch das Hinzufügen, Ändern und Löschen, weil die Fremdschlüsselbeziehungen überprüft oder ggf. kaskadiert werden müssen.

Die meisten DB-Operationen sind aber zum größten Teil lesend, also lohnt es sich, die Lese-Operationen zu optimieren, vorausgesetzt, andere Qualitäts-Attribute leiden nicht darunter.
Ob es sich lohnt, ist aber eine sehr schwierige Frage, man sollte niemals die Performance optimieren, bevor man sich 100% sicher ist, dass man es auch braucht.

Wenn Du das nicht verstehst, dann bist Du kein Datenbank-Anfänger, sondern jemand, der noch gar nichts über Datenbanken weiß, in dem Fall solltest Du dich in die Grundlagen einlesen ;)

RedDevil1982 
Beitragsersteller
 25.01.2023, 10:55
@Palladin007

Zugriffe zu beschleunigen "bessere Performance", als wenn nicht erst Indizies aufgelöst werden müssen?

D. h. mit Indizies auflösen ist hier gemeint, dass die referentielle Integrität nicht erst überprüft werden muss, sondern weil die Daten von B in A liegen (wegen den Redundanzen) kann ich somit schneller auf B zugreifen.

Palladin007  25.01.2023, 11:06
@RedDevil1982

Es geht darum, wie die DB die Daten sucht.

Die meiste Zeit geht beim Suchen drauf, er sucht in der Tabelle nach den gewünschten Daten, wenn er die Zeile hat, ist egal, ob man davon nun zwei oder drei Daten nimmt, er muss ja nicht mehr suchen.

Wenn er für ein Join aber eine zeite Tabelle absuchen muss, kostet das wieder Zeit und das Spiel beginnt von vorne, wenn er die Zeile in Tabelle 2 aber auch hat, ist es wieder egal, wie viel er davon nimmt.

Genauso umgekehrt:
Wenn er eine Zeile hinzufügen soll, muss er kontrollieren, ob die referenzierte ID in Tabelle 2 auch existiert.
Und wenn er in Tabelle 2 eine Zeile löscht, muss er suchen, ob es in Tabelle 1 eine Zeile gibt, die darauf referenziert und je nach Konfiguration reagieren.

Das alles kostet Zeit.
Lese-Optimierung heißt, diese/unnötige Referenzen zu reduzieren oder ganz zu entfernen, falls möglich. Dann muss es nur eine Tabelle absuchen und hat alle Daten auf einen Schlag, völlig egal, wie viele Spalten die Tabelle hat.

Danach bleibt noch das Netzwerk als Zeit-Fresser, je mehr Daten übertragen werden, desto langsamer, wenn Du x-fach die selben Daten suchst (Redundanz), wird das natürlich auch langsamer als nötig. Aber das Netzwerk kann man optimieren, ggf. sind beide Server auch auf dem selben Gerät, dann ist das Netzwerk zweitrangig, oder es sind so viele Daten, dass das Netzwerk für die Suche einzelner datensätze zweitrangig ist.

Jede Redundanz in einer DB ist eine Quelle für Inkonsistenz und bietet keinerlei Sicherheit, da bei Diskrepanzen nicht klar ist, welche Information korrekt ist.

Redundanz kann nur dann der Sicherheit dienen, wenn die komplette DB zyklisch auf einen externen Datenträger als Backup gesichert wird und somit redundant zur aktiven DB ist.


RedDevil1982 
Beitragsersteller
 09.01.2023, 12:42

Danke für deine Rückmeldung. Könnte folgendes auch ein Vorteil sein, wenn man "gezielt" Redundanzen in einer DB einsetzt:

"bessere Performance (Zugriffe beschleunigen, wenn nicht erst Indizes aufgelöst werden müssen"

Eine Rückmeldung deinerseits wäre sehr nett.

RedDevil1982 
Beitragsersteller
 14.01.2023, 13:04
@Kaenguruh

"bessere Performance (Zugriffe beschleunigen, wenn nicht erst Indizes aufgelöst werden müssen"

Ehrlich gesagt, versteh ich dies nicht ganz.

Die Daten liegen doppelt in meiner Datenbank bei Redundanzen. Warum ist dies besser um Zugriffe zu beschleunigen "bessere Performance", als wenn nicht erst Indizies aufgelöst werden müssen?

Bitte so erklären, dass es auch ein Datenbank-Anfänger versteht. Danke!