Die Entity "Schicht" ist hier als Weak Entity eingezeichnet. Warum ist z.B.
"Taxi" keine Weak Entity? Ein Taxi kann ja auch nur eingetragen werden, wenn
bereits ein Autotyp existiert (Existenzabhängigkeit). Wie lautet die genaue
Definition einer Weak Entity???
Danke.
Definition aus dem VO-Skriptum (Seite 2.5):
| Entities, deren Objekte nur mit Hilfe einer anderen Entity oder
| mehreren anderen Entities, mit der bzw. denen sie in Beziehung
| stehen, identifiziert werden können, nennen wir Weak Entities. Eine
| Weak Entity wird durch doppelte Umrahmung dargestellt. Sie hat keine
| Attribute, die alleine den Schlüssel bilden, obwohl sie dazu
| beisteuern können.
Vereinfacht ausgedrückt: Wenn die Tabelle A im Primärschlüssel einen
Fremdschlüssel auf eine Tabelle B enthält, so ist Tabelle A eine weak
entity.
Beispiel Taxi: Der Primärschlüssel lautet _taxinr_. taxinr ist kein
Fremdschlüssel auf eine andere Tabelle, daher ist Taxi keine weak
entity.
Beispiel Schicht: Der Primärschlüssel lautet _svnr_, _wochentag_,
_von_. svnr ist ein Fremdschlüssel auf die Tabelle Taxifahrer, daher
ist Schicht eine weak entity.
Um auf Ihre Frage bzgl. Taxi<->Autotyp zurückzukommen. Angenommen wir
würden in der Tabelle Taxi keine eindeutige taxinr speichern sondern
stattdessen die Taxis pro Autotyp aufnummerieren (lfdNr). Dann hätten
wir _autotyp_, _lfdnr_ als Primärschlüssel und die Tabelle sähe wie
folgt aus:
AUTOTYP LFDNR weitere Attribute...
-------------- ----- --------------------
Mercedes A140 1 ...
Mercedes A140 2 ...
Mercedes A140 3 ...
Ford Galaxy 1 ...
Ford Galaxy 2 ...
In diesem Fall wäre Taxi eine weak entity, da der Primärschlüssel
(_autotyp_, _lfdnr_) einen Fremdschlüssel auf eine andere Tabelle
enthält (nämlich autotyp).
Wenn Sie keine weak entity haben, können Sie einfach Beziehungen zu
anderen Tabellen entfernen und haben trotzdem noch einen eindeutigen
Schlüssel. Beispielsweise können Sie, wenn Sie eine eindeutige
_taxinr_ als Primärschlüssel (PK) verwenden, einfach die Tabelle
autotyp und das Feld autotyp in der Tabelle Taxi löschen. Sie haben
trotzdem noch einen gültigen PK in der Tabelle.
Wenn Sie hingegen die Variante PK = <_autotyp_, _lfdnr_> haben, dann
geht das nicht mehr. Wenn Sie die Tabelle autotyp und das Feld autotyp
in Taxi entfernen, haben Sie keinen PK mehr. Deshalb heißt die Tabelle
*weak*: Sie ist auf eine Beziehung mit einer anderen Tabelle
angewiesen, um einen PK bilden zu können.
Der Vollständigkeit halber: Angenommen, Sie fügen an die Tabelle mit
der <_autotyp_, _lfdnr_>-Variante ein eindeutiges Feld _taxinr_ hinzu,
lassen aber <_autotyp_, _lfdnr_> als Primärschlüssel. Dann ist die
Tabelle trotzdem *keine* weak entity, da sie einen eigenen, von
anderen Tabellen unabhängigen Primärschlüssel bilden könnte. (Siehe
Definition oben.)
Wenn Sie im EER die Attribute einzeichnen, können Sie ganz einfach
herausfinden, ob eine Tabelle eine weak entity ist: Wenn alle
Primärschlüsselattribute sichtbar sind (d.h. nicht implizit durch eine
Beziehung definiert sind), ist es keine weak entity (vgl. das EER in
Kapitel A3).
MfG,
Heinrich Moser (DBUE-Admin)
> Definition aus dem VO-Skriptum (Seite 2.5):
>
> | Entities, deren Objekte nur mit Hilfe einer anderen Entity oder
> | mehreren anderen Entities, mit der bzw. denen sie in Beziehung
> | stehen, identifiziert werden können, nennen wir Weak Entities. Eine
> | Weak Entity wird durch doppelte Umrahmung dargestellt. Sie hat keine
> | Attribute, die alleine den Schlüssel bilden, obwohl sie dazu
> | beisteuern können.
Und das wesentliche Wort hier ist "identifiziert".
Anders formuliert verfuegt eine Entity selbst nicht ueber einen vollen
Schluessel, sondern benoetigt "von aussen Hilfe" dazu (wie ich in der
VO uebrigens wiederholt erklaert habe).
> Vereinfacht ausgedrückt: Wenn die Tabelle A im Primärschlüssel einen
> Fremdschlüssel auf eine Tabelle B enthält, so ist Tabelle A eine weak
> entity.
Genau, wenn man's von Seite des Relationenmodells betrachtet (das man
beim Modellieren aber oft noch nicht im Auge hat).
Vorsicht uebrigens: "einen Fremdschluessel" ist hier im Sinne von
"mindestens einen" zu verstehen, nicht im Sinne von "genau einen";
das nicht zu verstehen hat bei einigen der letzten Pruefungen zu
Punkteabzuegen gefuehrt.
> Der Vollständigkeit halber: Angenommen, Sie fügen an die Tabelle mit
> der <_autotyp_, _lfdnr_>-Variante ein eindeutiges Feld _taxinr_ hinzu,
> lassen aber <_autotyp_, _lfdnr_> als Primärschlüssel. Dann ist die
> Tabelle trotzdem *keine* weak entity, da sie einen eigenen, von
> anderen Tabellen unabhängigen Primärschlüssel bilden könnte. (Siehe
> Definition oben.)
Soll ich das als Anregung fuer die kommende Pruefung nehmen? :-)
Gerald Pfeifer
--
Gerald "Jerry" pfe...@dbai.tuwien.ac.at http://www.dbai.tuwien.ac.at/~pfeifer/