PDA

Vollständige Version anzeigen : Datenmodellierung - Problem


Franz Rueh
09.05.2004, 20:48
Ich komme mit folgendem Problem einfach nicht weiter. Es handelt sich um ein Verwaltungsprogramm für einen Sportverein, der seine Utensilien, hauptsächlich Dressen und Trainigsanzüge, übersichtlich verwalten möchte.
DIe Tabellen schauen so aus:
tblProduct: ProductID(Primärschlüssel), Artikelbezeichnung, Farbe, Einkaufspreis
tblProductdetails: ProductdetailID(Primärschlüssel), ProductID(Fremdschlüssel), Größe, Menge
In der tblProduct sind alle gleichbleibenden Daten eines bestimmten Artikels, z.B. eines Trainingsanzugs, in einem Datensatz abgelegt. Bisher hatte ich auch noch die Größen(XXL, XL, L etc.) dort abgelegt, weil ich damit eine eindeutige ProductID für jede Größe eines bestimmten Artikels hatte. Das entspricht aber erstens nicht den Regeln der Normalisierung und zweitens muss die Eingabe ein und desselben Artikels für jede gekaufte Größe wiederholt werden, was sehr zeitaufwändig ist. Also habe ich bei der Umarbeitung eine 2. Tabelle angelegt, in der die Größen abgelegt werden und auch die Menge pro Größe.
Bei der Lagerbestandsberechnung stehe ich jetzt an, da ich die Menge eines bestimmten Artikels in jeder vorhandenen Größe errechnen muss und ich nicht weiß, wie ich eine eindeutige ID für jede Größe eines jeden Artikels bekomme. Ich habe einmal etwas von kombinierten Primärschlüsseln gehört - ist das die Lösung meines Problems - wenn ja, wer kann mir erklären, wie so etwas gemacht wird!?

Und es wird noch ein bisschen komplizierter. Bei jeder Dress gibt es eine sogenannte Rückennummer. Wie muss in Fortführung von oben eine weitere Tabelle ausschauen, die die Rückennummern einer bestimmten Größe erfasst - damit ich dann auch ausgeben kann, wie viele Dressen einer bestimmten Rückennummer vorhanden oder an Spieler ausgegeben sind!?

Franz

PS: Habe jetzt zur Verdeutlichung eine DB mit den Tabellen und einer Abfrage angehängt!

elmar
09.05.2004, 21:11
Die Größe und die Artikelnummer kann man zu einem Primärschlüssel zusammenfassen.
Beispiel: Von der Größe XXL und der Artikelnunner 1234 gibt es nur einen einzigen Eintrag in der Tabelle.

Im Tabellenentwurf werden die beiden Felder markiert und dann auf das Icon mit dem Schlüsselsymbol geklickt. Auf den Zeilenköpfen links erscheinen nun bei beiden Feldern die kleinen Schlüsselsymbole.
Wenn beim Speichern der Änderungen an der Tabelle keine Fehlermeldung kommt, ist alles glatt gegangen. Anderenfalls befinden sich in der Tabelle Werte, die einen zusammengesetzen Primärschlüssel aus den gewählten Feldern nicht zulassen. Das ist z.B. dann der Fall, wenn zur Größe XXL und der Artikelnummer 1234 mehr als ein Datensatz vorhanden ist.

Stichworte für die Online-Hilfe: Definieren oder Ändern des Primärschlüssels

Franz Rueh
09.05.2004, 21:23
Danke, Elmar, für die Erklärung des kombinierten Primärschlüssels. Ich sehe aber, dass mir das wahrscheinlich nicht weiterhilft. Denn erstens sind z.B. die Product ID und die Größen_ID in 2 verschiedenen Tabellen und 2. gibt es mit der Zeit von jedem Artikel mehrere Eintragungen in mehreren Größen, wenn z.B. nachgekauft wird.
Die Artikelnummer ist übrigens die Nummer im Bestellkatalog.

Franz

elmar
09.05.2004, 22:26
Habe mir mal die Struktur angeschaut.

Dem Grunde nach kommt man doch mit einer Tabelle "tbl_BEKL_STAMM" (Stammdaten Bekleidung) und der dazugehörigen Detailtabelle "tbl_BEKL_DETAILS" (Detailinformationen zu Stammdaten Bekleidung) aus.

Wenn Du nun auch noch festhalten musst, welcher Spieler was in Besitz hat und seit wann er das bekam, sollte das mit einer weiteren Tabelle möglich sein.
Gruß
elmar

stpimi
10.05.2004, 04:22
Hallo Franz!

Ich denke, Du hast hier zwei m:n-Beziehungen aufzulösen:

Artikelstamm - Grösse über eine Zwischentabelle tblArtikelgroesse und dann noch tblArtikelgroesse - Rückennummer wiederum in einer Zwischentabelle.
Erst der Datensatz in dieser zweiten Zwischentabelle ist Dein "Detailartikel".

Hier ist dann wieder der Zusammenhang zum Spieler zu erstellen, der dann 1 - n Stück dieses Detailartikels zur Verfügung gestellt bekommt (Spieler - Detailartikel 1:n)

Ein zusammengesetzter Primärschlüssel scheint mir nicht erforderlich.

Grüße nach Oberösterreich

Mfg, Michael

Franz Rueh
10.05.2004, 19:20
Ich habe versucht, die 1. m:n-Beziehung laut stpimi mittels einer Zwischentabelle aufzulösen, aber irgendetwas läuft da noch schief. Ich habe nur die tblProduckt, die die Artikelstammdaten beinhaltet. In der tblProductgroessen befinden sich die Groessen_ID und die Menge(Zahl). Die Zwischentabelle heißt tblProductdetails und beinhaltet eine ArtikelID, die ProductID, die Groessen_ID und die AcqID, die mit der tblAcq verknüpft ist, wo das Artikeleingangsdatum abgelegt wird und ein Memo-Feld für Anmerkungen zur Verfügung steht.
Gebe ich jetzt über das Formular "Frm_Artikel", Register "Produktdetails" mit einem bestimmten Datum einen Artikel in mehreren Größen und Mengen ein, stimmt dann auch das Ergebnis, das mittels abf_Artikelbestand errechnet wird. Mache ich dann eine 2. Artikeleingabe zum gleichen Artikel(was z.B. bei einer Nachlieferung ohne weiteres passieren kann), aber mit einem anderen Datum, so ändert sich die ArtikelID, die eigentlich für ein und derselben Artikel in ein und derselben Größe immer gleich bleiben sollte(zur eindeutigen Indentifizierung) und die zuerst eingebenen Mengen einer Größe erscheinen im Formularfeld, die dann bei einer Neueingabe überschrieben werden.
Wo liegt mein (Denk-)Fehler!??? In der angehängten Demo-DB kann das alles nachvollzogen werden.

Danke für eure Mühe schon jetzt!

Franz

stpimi
11.05.2004, 07:17
Hallo Franz!

Ich hab mir Deine DB runtergeladen, kann sie mir aber im Moment nicht anschauen.
Rein vom Lesen Deines Postings hast Du aber den Fehler, das jeder Artikeleingang quasi ein neuer Artikel ist.
Du brauchst die ProduktdetailID als Fremdschlüssel in der tblAcq und nicht umgekehrt. Dann kannst Du beliebig viele Zukäufe eines Artikels haben.

Wenn Du weiter Probleme hast, melde Dich nochmal - spätestens morgen abend habe ich mehr Zeit dafür.

Mfg, Michael

Franz Rueh
11.05.2004, 08:04
Michael, inzwischen habe in der Richtung, die du beschreibst, gearbeitet, bin aber noch nicht wirklich sicher, ob das so ganz in Ordnung ist. Daher wäre ich sehr froh, wenn du einen Blick auf meine Demo machst - dann, wenn du Zeit hast-es eilt bei mir gottseidank nicht.

Danke für deine Bemühungen

Franz

stpimi
12.05.2004, 19:20
Hallo Franz!

Ich habe Dein Datenmodell überarbeitet. Schau Dir den Anhang an.

Franz Rueh
12.05.2004, 20:02
Danke, Michael, für deinen Vorschlag. Ich werde ihn mir jetzt im Detail anschauen und mich dann wieder bei dir melden!!

Franz

Franz Rueh
16.05.2004, 09:45
Michael, ich habe deinen Vorschlag etwas abwandeln müssen, nämlich die Rueckennummer aus der tblPruductdetails rausnehmen und in einer eigenen Tabelle anlegen mit einer eigenen Anzahl. Dadurch ist es möglich, z.b. 10 XL - Trikots aufzunehmen und ihnen z.B. 2x Rückennummer 1, 2x Rückennummer 2 etc. zuzuordnen.
Genau dazu habe ich eine Frage, aber dazu werde ich den Forumsregeln nach einen neuen Thread eröffnen.
Danke für die Hilfe bei der Datenmodellierung!!!

Franz