Partielle Abhängigkeit vs. Transitive Abhängigkeit

infomarvin

Benutzer
Beiträge
5
Das Problem, das ich habe ist, ich verstehe nicht, inwieweit partielle Abhängigkeit "schlechter" ist, als transitive.
Es ist klar, wenn ein Attribut des Schlüssels einen anderes, nicht Schlüssel Attribut bestimmt, dann entsteht Redudanz.
Die entsteht bei transitiver Abhängigkeit genauso, bzw. kann man genau dasselbe Szenario konstruieren, siehe anbei.

Vielen Dank
LgUnbenannt.webp
 
Werbung:
MMh, wer sagt denn, dass partielle Abhängigkeit "schlechter" ist als transitive?

Ich versuche mal eine Antwort, die eigentlich keine ist, aber trotzdem vielleicht etwas hilft.

Ich kann verstehen, dass Dein Problem ist, Datenbanktheorie zu lernen. Theorien zu Sachverhalten zu bilden, ist der klassische Weg, wie Wissenschaft mit Problemen umgeht, sie klassifiziert, eine gemeingültige Sprache, ein abstraktes Modell findet, generalisiert Sachverhalte auszudrücken.
Ich kann damit leider nicht so viel anfangen, will heißen, ich bin nicht besonders gut darin, etwas abstrakt, theoretisch zu erklären.
Viel einfacher scheint es mir, mit Beispielen zu arbeiten.
Was wäre ein Beispiel für Deine Frage, also Tabellen und Daten?

Als Analogie zu meiner Schilderung würde bspw. die (deutsche) Sprache und ihre Grammatik dienen können.
Kannst Du (Deutsch) sprechen? Und kannst Du die Grammatik dazu erklären?
Ein Freund von mir lernt gerade Deutsch und verzweifelt an der Grammatik, den Artikeln und den verschiedenen Fällen, deswegen komme ich drauf...

Zurück zur Theorie: Während ich eingestehen muss, dass die Theorie zu relationalen Datenmodellen natürlich zum Handwerkszeug für einen Informatiker gehört (und Studiengängen, die etwas mit Datenverarbeitung zu tun haben), bin ich mir relativ sicher, dass Deine Fragestellung in der Theorie schlecht aufgehoben ist. Besser oder schlechter, partielle oder transitive Abhängigkeit .. ?
Bietet die Theorie genug "Fleisch", um diese Frage zu beantworten? Mag sein, ich kenne die Theorie nicht gut genug. Aber die Frage ist sicher legitim als Puzzleteil im Lernprozess.

Andere Frage: Was ist das Ergebnis einer Verletzung der Normalformen, egal welche Art der Verletzung, inklusive auch partieller oder transitiver Abhängigkeit?
Das Ergebnis ist Redundanz.
Was ist besser, was ist schlechter: Redundanz oder Redundanzfreiheit?
Robuste Frage, einfache Antwort (gemäß Theorie): Redundanzfreiheit ist das Ziel, natürlich!

Jetzt begebe ich mich etwas auf Abwege:
Redundanz an sich, als Daten-Zustand in einem Augenblick der Betrachtung ist an sich nichts Schlimmes.
Es kommt darauf an, wie die Daten genutzt werden. Daten die niemals aktualisiert werden, haben auch niemals eine Update Anomalie.
Daten die niemals aggregiert werden, können auch nicht falsch aggregiert werden. (Ok, eine falsche Aggregation bekommt man auch mit redundanzfreien Daten hin, Du weiß was ich meine)
Redundanz kann dagegen sogar Vorteile bieten, aber das kannst Du Dir selbst überlegen, es geht ja um was anderes.

Kann man Deine Frage eigentlich anhand der Theorie beantworten? Ich glaube nicht. Man kann abwägen.
Update Anomalien erhälst Du bei beiden Formen der Abhängigkeit.
Transitive Abhängigkeiten sind oft komplexer, Komplexität ist m.E. eher negativ zu bewerten.

Dennoch, wir reden von 2 Problemen, die man beide nicht haben will. Ein richtig normalisiertes Datenmodell sollte weder partielle noch transitive Abhängigkeiten enthalten.
Wenn man sie aber bewusst einbaut, sollte man sehr gute Gründe dafür haben. Geschieht es unbewusst und ohne Not, ist der Fall klar: Man hat ein schlechtes bis miserables Datenmodell entworfen.

Ich verändere also Deine Frage mal:
Wenn ich ein Datenmodell anlege und ich habe eine problematische Stelle mit Abhängigkeiten, löse ich das besser mit partieller oder transitiver Abhängigkeit?
Diese Form der Frage ist sehr wahrscheinlich sehr einfach zu beantworten: Weder noch! Du baust ein Datenmodell, das weder partielle noch transitive Abhängigkeiten enthält. Du baust das nicht absichtlich ein, höchstens, weil Du es nicht bemerkt hast.
(möglicherweise baust Du es absichtlich ein, weil Du sehr gute Gründe hast, aber dann bist Du auf einem Level, wo Du diese Frage hier im Forum nicht stellen würdest- und so lange Du keine gute, praktische Erfahrung hast, musst Du auch nicht darüber nachdenken, die Theorie zu hacken)

Lege ein Beispiel an für transitive Abhängigkeit, eines für partielle und eines, wo alles richtig ist.
Spiel ein paar Anwendungsfälle durch:
Insert* von Daten, Update* und Delete*
Baue ein paar Abfragen, die Aggregationen enthalten.

* Lege diese Operationen und das Datenmodell so an, dass sie die konstruktiven Abhängigkeiten des Modells berücksichtigen, also Anomalien vermeiden.

Am Ende schau dir Deine 3 Modelle, die zugehörigen Bündel von Abfragen an und versuche, Deine Frage selbst zu beantworten.
Z.B. wie kompliziert ist mein Datenmodell?
Wie umfangreich sind meine Statements?
Wie übersichtlich, wie leserlich, wie verständlich sind die Bestandteile?
..
Welche der 3 Varianten bietet den größten funktionalen Nutzen (unabhängig von den Fragen zuvor) ?
Welche der 3 Varianten kann ich am einfachsten erweitern / abändern?
Wie aufwändig wäre eine Transformation der Daten bei einer Abänderung?

Also wie versprochen, keine Antwort, aber vielleicht irgendwie hilfreich.
 
Werbung:
Also die harte Theorie ist bei mir echt lange her. Das lag mir nicht und ich hatte Datenbanklehre in der Berufsschule in zwei Doppelstunden, also das war jetzt nur begrenzt tiefergehend :-)

Seit dem haben wir die KI und ich fand die Erklärung jetzt mal ganz okay (im Gegensatz zum Daily Slop):
Partielle Abhängigkeit ist aus einem spezifischen Grund problematischer:

Bei partieller Abhängigkeit:​


  • Ein Nicht-Schlüssel-Attribut hängt nur von einem Teil des Schlüssels ab
  • Das bedeutet: Die Information wird bei jeder Kombination mit den anderen Schlüsselteilen wiederholt
  • Beispiel: {MatrikelNr, KursID} → {StudentName, ...}
    • Wenn MatrikelNr → StudentName, dann wird der StudentName bei jedem Kurs des Studenten wiederholt
    • Bei 5 Kursen: 5-fache Redundanz des Namens

Bei transitiver Abhängigkeit:​


  • Ein Nicht-Schlüssel-Attribut hängt von einem anderen Nicht-Schlüssel-Attribut ab
  • Das bedeutet: Die Information wird nur wiederholt, wenn der Vermittler-Wert sich wiederholt
  • Beispiel: {MatrikelNr} → {Postleitzahl} → {Stadt}
    • Die Stadt wird nur wiederholt, wenn verschiedene Studenten dieselbe PLZ haben
    • Die Redundanz ist durch die Vermittler-Entität begrenzt

Warum ist das wichtig?​


Partielle Abhängigkeit garantiert systematische Redundanz durch die Struktur des zusammengesetzten Schlüssels. Bei transitiver Abhängigkeit hängt das Ausmaß der Redundanz von den tatsächlichen Daten ab.
 
Zurück
Oben