[ER] - Attribut die keiner Entität zugeordnet wird

Hallo,

habe hier eine tolle Beispielaufaufgabe: Bon (Kassenbon) und Produkt soll miteinander verbunden werden (als ER)

Ich mach einfach zwei Entitäten (Bon und Produkt). Dann sage ich noch das mein Bon 3 Attribute hat: BonID, Datum und Menge - bei der Produkt habe ich auch drei: ProduktID, Name und Preis. Ich mache eine N:N beziehung und gut ist.

Jetzt wurde mir aber gesagt, das das soweit richtig ist, ausser das beim Bon das Attribut „Menge“ gar nicht stehen kann. Das passt da nicht hin. Das passt aber auch nicht zu der Menge, ich soll das aber irgendwo hinschreiben, soll mir da mal gedanken machen. Also deswegen meine Fragen:

1.) Warum kann ich das nicht zu meinem Bon als Attribut nehmen?
2.) Die Lösung ist dann (obwohl ich immer noch nicht weiß warum ich das nicht zu Bon schreiben darf), dass ich die Menge einfach zwischen Bon und Produkt schreibe. Als Extratabelle oder? WENN als Extratabelle wie würde man das jetzt wissen wohin das das zu der beliebigen Bon und Produkt gehört?

Vielleicht könnte mir das jemand mal erklären

Danke schon mal

Gruß

Hallo,

also ich versuch mal Dir das zu erklären.

Die Menge ist keine Eigenschaft des Bons, sondern gehört in eine Beziehung zwischen Bon und Produkt. Die Menge bezieht sich doch auf das Produkt :wink:

Du brauchst eine Relation (Tabelle) die Bon und Produkt verbindet.
Du musst Dich darin also beziehen auf die BonID und die ProduktID und denen dann die Menge zuordnen. Will meinen, diese Tabelle muss BonID und ProduktID sowie ein Attribut Menge enthalten. BonID und ProduktID zusammen bilden den Fremdschlüssel.

Ich hab das jetzt mal etwas lasch ausgedrückt, hoffe aber, dass ich Dir damit etwas Klarheit verschaffen konnnte.

Gruss
Petra

Entität gefunden :wink:
Moin, Petra,

Du brauchst eine Relation (Tabelle) die Bon und Produkt
verbindet.

als Ergänzung: Das Konstrukt heißt m:n-Beziehung, die Entität könnte BonPosition heißen, und formal schaut es dann so aus:

**Produkt** (<u>ProduktId</u>, Bezeichnung, ...)
**Bon** (<u>BonId</u>, Datum, ...)
**BonPosition** (<u>BposId</u>, FS\_ProduktId, FS\_BonID, Menge, ...)

wobei die Fremdschlüsselkombination FS_ProduktId und FS_BonID eindeutig sein muss.

BonID und ProduktID zusammen bilden den Fremdschlüssel.

Das ist, mit Verlaub, ein wenig schief ausgedrückt. Jedes der Felder ist ein Fremdschlüssel; zusammen sind sie Schlüsselkandidat der Entität BonPosition.

Gruß Ralf

Hallo WaldiWo,

Ich mach einfach zwei Entitäten (Bon und Produkt).

(umgangssprachlich richtig, aber genauer gesagt: Entitätstypen. Entitäten sind später die einzelnen Ausprägungen dieses Typs/dieser Vorlage/dieses Schemas.)

Dann sage ich noch das mein Bon 3 Attribute hat: BonID, Datum und Menge - bei der Produkt habe ich auch drei: ProduktID, Name und Preis. Ich mache eine N:N beziehung und gut ist.

(„N:M-Beziehungstyp“ in meiner Sprache)

1.) Warum kann ich das nicht zu meinem Bon als Attribut
nehmen?

Stell dir vor, ich schaue mir eine konkrete Ausprägung deines ER-Modells an: Dann habe ich z.B. zwei Produkte (P1; Milch; 0,55 €) und (P2; Butter; 0,89 €), die beide in Beziehung stehen zu einem Bon von gestern mit der ID 4711 und der Menge 5. Bildet das die reale Welt hinreichend gut ab? Kannst du folgende Fragen beantworten? Wieviel Packungen Milch und wieviele Pakete Butter habe ich gekauft? Worauf bezieht sich die Menge 5?

Normalerweise gibt es zu jedem aufgeführten Produkt auf einem Bon eine Menge/Anzahl. Deswegen kann die Menge nicht ein Attribut des Bons sein.

(Vielleicht besteht auch ein Missverständnis zwischen dir und deinem Kritiker: Die „Gesamtmenge“, die angibt, wieviele Artikel insgesamt gekauft wurden, gehört natürlich als Attribut zum Bon.)

2.) Die Lösung ist dann (obwohl ich immer noch nicht weiß
warum ich das nicht zu Bon schreiben darf), dass ich die Menge
einfach zwischen Bon und Produkt schreibe.

Attribute können nicht im luftleeren Raum existieren. Du kannst aber neben Entitätstypen auch Beziehungstypen mit Attributen versehen: Der Beziehungstyp „enthält/gekauft“ (oder wie er bei dir heißt) zwischen Bon und Produkt könnte dann ein Attribut „Menge“ haben. Im Beispiel könnte damit die Beziehung von Milch zum Bon 4711 die Menge 3 haben und die Beziehung von Butter zum selben Bon die Menge 2 (auf Deutsch heißt das, mit diesem Bon wurden 3 Packungen Milch und 2 Stück Butter gekauft).

Umgesetzt in das relationale Modell würde das dann so aussehen wie von drambeldier gezeigt.

Viele Grüße

Andreas

Produkt (ProduktId, Bezeichnung, …)
Bon (BonId, Datum, …)
BonPosition (BposId, FS_ProduktId, FS_BonID,
Menge, …)

Hi,

ja so habe ich mir das irgendwie vorgestellt. Nur in meine BonPosition-Tabelle hätte ich statt FS_ProduktId und FS_BonID nur ProduktId und BonID geschrieben. Bin jetzt verwirrt warum das so sein muss?

Gruß

Produkt (ProduktId, Bezeichnung, …)
Bon (BonId, Datum, …)
BonPosition (BposId, FS_ProduktId, FS_BonID,
Menge, …)

warum das so sein muss?

das muss nicht sein, ist in dieser Darstellung aber guter Brauch, um die Beziehungen herauszuheben. Beim Programmieren hat man nicht immer das Datenmodell vor Augen.

Gruß Ralf