Seite 1 von 2

Partielle funktionale Abhängigkeit

Verfasst: 24. Aug 2007 20:13
von Randy
Hallo,

ich hab eine Frage zur partiellen Abhängigkeit:

R ist Relation mit R= ABCD, Primärschlüssel = AB und F = {BC -> D, A -> C}

Sind C und D beide partiell vom Primärschlüssel abhängig, oder nur C? D.h. muss die linke Seite eine echte Teilmenge des Primärschlüssels sein, damit es partiell abhängig ist oder reicht es bereits, wenn nur eine Teilmenge seiner Attribute darin vorkommt (u.U. zusammen mit anderen Nichtschlüsselattributen, so wie bei BC -> D)?

Verfasst: 4. Sep 2007 19:03
von plasma
Es reicht nicht, dass nur eine Teilmenge der Attribute des PK auf der linken Seite vorkommen.

Uebrigens reicht es nichtmal nur den PK zu betrachten, nicht-schluessel-attribute muessen von allen Schluesselkandidaten voll FD sein:

http://www.cs.jcu.edu.au/Subjects/cp150 ... n/2nf.html

[...]The concept of 2NF requires that all attributes that are not part of a candidate key be fully dependent on each candidate key.[...]

Verfasst: 5. Sep 2007 08:14
von BastiS
Hmmm, da jetzt noch keine klare Antwort gekommen ist, bin ich noch etwas im Unklaren bezüglich dieser Aufgabe.
Die zweite NF ist ja verletzt, ich frag mich nur, aus welchem Grund genau.

Erst einmal ein anderes Beispiel, bei dem die zweite Normalform (meiner Ansicht nach) nicht verletzt wird:
Relation R = ABC, Primärschlüssel A, FDs A->B und B->C
Hier wird ja die zweite NF nicht verletzt, da B vollständig vom Schlüssel abhängt und C auch, da es ja vollständig von B abhängt.
Zu diesem Schluss kam ich zumindest aus einer der Beispiellösungen der Übungen. (In Lösung 3.1.4. liegt 2NF vor, obwohl ja B vom Nicht-Schlüssel C abhängt, C aber wiederum vom Schlüssel A abhängt)
Sollte das so nicht stimmen, korrigiert mich bitte.


So, aber zurück zu dem gegebenen Beispiel:

R ist Relation mit R= ABCD, Primärschlüssel = AB und F = {BC -> D, A -> C}

Nun verletzt ja die FD A->C auf jeden Fall die zweite NF, da C nur von einem Teil des Schlüssels abhängig ist.
Aber was ist mit BC->D ? C ist ja vollständig von A abhängig, also ist D letztlich vollständig von AB abhängig. Wäre diese FD also keine Verletzung der zweiten NF?

Ich bitte um Aufklärung.
Danke.

Verfasst: 5. Sep 2007 13:49
von plasma
Ich denke, in diesem Fall verletzt BC->D nicht die 2NF, allerdings hat A->C ja schon verletzt.

Ein besseres Beispiel waere:
R = ABCD, SK = {{A,B}}, F = {BC->D, AB->C}

Da bleibt immer noch das eigentliche Problem mit der Transitivitaet aber ohne das Nebenproblem, dass schon eine andere involvierte FD die 2NF verletzt.

Verfasst: 7. Sep 2007 18:16
von Panulli
Ich habe mich heute mit dem Patric Kabus getroffen. Zu dem Beispiel von plasma:

Hier gibt es keine partielle Abhängikeit, da D nicht NUR von B abhängt, sondern auch von einem nicht-Primattribut!

Zudem prüfen wir bei 2.NF nur die Angängigkeiten an sich, und nicht irgendwelche transitiven Verbindungen. D.h. man kann NICHT sagen, da C von AB aghängt, hängt D von AB ab und verletzt somit nicht die 2. NF! Wobei das, wie oben schon beschrieben, hier gar nicht zu tragen kommt.

Verfasst: 7. Sep 2007 19:32
von BastiS
Es kann doch nicht sein, dass hier keine partielle Abhängigkeit vorliegt, da auf der linken Seite neben dem Schlüsselattribut noch ein Nicht-Schlüsselattribut steht.

[edit: Begründung falsch, siehe Post von plasma weiter unten]
Man könnte doch sonst in einer Relation mit Primärschlüssel {AB} und der FD A->D, die nicht in 2NF ist, durch hinzufügen von weiteren (Nicht-Primär-) Attributen auf der linken Seite zu einer FD machen, die zur 2NF passt. (Also z.B. AC->D, was ja durch Augmentation zulässig ist)

Verfasst: 8. Sep 2007 10:18
von SM
Panulli hat geschrieben: Hier gibt es keine partielle Abhängikeit, da D nicht NUR von B abhängt, sondern auch von einem nicht-Primattribut!
Diese Aussage ist falsch. Die 2NF sagt nichts über zusätzliche Nicht-Schlüssel-Attribute aus, sondern nur über die partielle Abhängigkeit. Und partielle Abhängigkeit in einer FD ist nur gegeben, wenn ein Nicht-Schlüssel-Attribut nur von einer echten Teilmenge eines Schlüsselkandidaten abhängt (und beliebigen zusätzlichen Nicht-Schlüsselattributen).

Daher sind Relationen mit nicht-zusammengesetzten Schlüsselkandidaten auch immer automatisch in 2NF (wenn sie auch in 1NF sind natürlich).
Zudem prüfen wir bei 2.NF nur die Angängigkeiten an sich, und nicht irgendwelche transitiven Verbindungen. D.h. man kann NICHT sagen, da C von AB aghängt, hängt D von AB ab und verletzt somit nicht die 2. NF! Wobei das, wie oben schon beschrieben, hier gar nicht zu tragen kommt.
Und ich glaube, hier irrst Du dich auch. Was Du beschreibst, ist die 3NF. Diese verbietet transitive Abhängigkeiten von Schlüsselkandidaten.

Verfasst: 8. Sep 2007 11:25
von plasma
SM hat geschrieben:
Panulli hat geschrieben: Hier gibt es keine partielle Abhängikeit, da D nicht NUR von B abhängt, sondern auch von einem nicht-Primattribut!
Diese Aussage ist falsch. Die 2NF sagt nichts über zusätzliche Nicht-Schlüssel-Attribute aus, sondern nur über die partielle Abhängigkeit.
Vielleicht nicht explizit, moeglicherweise aber implizit?
Wir brauchen BC->D *vielleicht* nicht betrachten, da wir ohnehin noch AB->C pruefen werden.
Wenn C auf rechter Seite vorkommt, schauen wir, ob es partiell von einem SK abhaengt. Wenn ja, ist eine Verletzung gefunden. Wenn nicht, ist BC->D auch keine Verletzung. Und wenn C auf keiner rechten Seite vorkommt, hm..., ich schaetze dann haetten wir auch andere Schluesselkandidaten(?).
SM hat geschrieben:Und ich glaube, hier irrst Du dich auch. Was Du beschreibst, ist die 3NF. Diese verbietet transitive Abhängigkeiten von Schlüsselkandidaten.
Er schreibt, dass wir "transitive Verbindungen" _nicht_ pruefen.

Verfasst: 8. Sep 2007 11:37
von plasma
BastiS hat geschrieben:Man könnte doch sonst in einer Relation mit Primärschlüssel {AB} und der FD A->D, die nicht in 2NF ist, durch hinzufügen von weiteren (Nicht-Primär-) Attributen auf der linken Seite zu einer FD machen, die zur 2NF passt. (Also z.B. AC->D, was ja durch Augmentation zulässig ist)
Du fuegst doch nicht Attribute auf der linken Seite hinzu, sondern -wenn ueberhaupt- eine weitere abgeleitete FD. Sprich: Du haettest dann Zwei FDs, die alte und die neue, und die alte waere immer noch eine Verletzung.
Die Armstrong Axiome sind nur Implikationen und keine Aequivalenzen.

Verfasst: 8. Sep 2007 11:43
von BastiS
@plasma: Ok, da geb ich dir Recht, das war eine schlechte bzw falsche Argumentation.

Aber trotzdem bleibe ich bei meiner Aussage, dass es nicht stimmt, dass keine partielle Abhängigkeit exisitiert, wenn auf der linken Seite neben der der echten Teilmenge eines Schlüsselkandidaten noch ein Nicht-Schlüssel-Attribut X steht.
Dies gilt eben nur in dem Fall, den plasma erläutert hat - wenn also X vollständig vom Schlüssel abhängig ist.

Verfasst: 8. Sep 2007 21:29
von Randy
Auwei, ich glaube ich hab das jetzt endlich verstanden.

Laut Elmasri ist eine Abhängigkeit X-> Y voll funktional, wenn die Entfernung eines Attributs A aus X bedeutet, dass die entstehende Abhängigkeit nicht gilt. Gilt die entstehende Abhängigkeit hingegen, dann war die ursprüngliche Abhängigkeit eine partielle Abhängigkeit.

1. Beispiel:

Relation = ABCD
PK = AB
FD = {AB->CD, B->D}

Entfernt man A aus AB->CD, erhält man B->CD und somit B->D. Das gilt ohnehin, also war AB->CD eine partielle Abhängigkeit vom Primärschlüssel.

2. Beispiel:

Relation = ABCD
PK = AB
FD = {AB->CD, BC->D}

Hier ist also noch das Nichtschlüsselattribut C in der zweiten FD hinzugekommen. Jetzt gilt: entfernt man A oder B aus AB->CD entsteht A->CD bzw. B->CD und daraus wiederum A->D und B->D. Beide gelten jedoch nicht! Also ist AB->CD eine voll funktionale Abhängigkeit vom Primärschlüssel und Beispiel 2 somit in 2NF. Würde man z.B. noch A->D in die Menge FD mit aufnehmen, wäre es (offensichtlich) wieder nicht in 2NF. Es genügt also tatsächlich zu prüfen, ob ein Nichtschlüsselattribut nur (und nur!) von einer echten Teilmenge des PK funktional abhängt um festzustellen, ob das Relationsschema in 2NF ist.

Hoffe das stimmt so jetzt.

Verfasst: 8. Sep 2007 21:45
von plasma
Randy hat geschrieben:2. Beispiel:

Relation = ABCD
PK = AB
FD = {AB->CD, BC->D}

Hier ist also noch das Nichtschlüsselattribut B in der zweiten FD hinzugekommen.
Da ist ein Tippfehler, Nichtschluesselattribut C ist dazugekommen.

Verfasst: 8. Sep 2007 22:14
von Randy
plasma hat geschrieben:
Randy hat geschrieben:2. Beispiel:

Hier ist also noch das Nichtschlüsselattribut B in der zweiten FD hinzugekommen.
Hab's mir noch nicht komplett angeschaut, aber ein Fehler ist drin:

B ist ein Schluesselattribut, da es in einem Schluesselkandidaten vorkommt.
Sorry, sollte natürlich C heissen.

Verfasst: 8. Sep 2007 22:39
von plasma
Koenntest Du das mal auf das oben erwaehnte Beispiel anwenden?:

R = ABCD, SK = {{A,B}}, F = {BC->D, AB->C}

Verfasst: 9. Sep 2007 02:40
von Randy
plasma hat geschrieben:Koenntest Du das mal auf das oben erwaehnte Beispiel anwenden?:

R = ABCD, SK = {{A,B}}, F = {BC->D, AB->C}
Das ist demnach dann auch in 2NF, weil es keine "Teilregel" A->CD bzw. B->CD gibt. Somit gibt es auch keine partielle Abhängigkeit von einem Schlüsselkandidaten.