wahid Geschrieben 28. November 2009 Geschrieben 28. November 2009 Hallo zusammen, ich bin momentan bei der Umsetzung eines Schulprojektes (DB-basierte Desktop Anwendung), und brauche eure VorschlĂ€ge um mein Datenmodell richtig zu unsetzen. Es geht um ein kleines Warenwirtschaftssystem fĂŒr einen Second-Hand Computerladen. Die Waren mĂŒssen spezifisch nach dem Warentyp unter verschiedenen Kategorien gespeichert werden. Jede Ware wird einzeln eingescannt (mittels Barcodescanner) und deren entsprechenden Attributen gespeichert. Z.B. dem VerkĂ€ufer soll ermöglicht werden den Artikel "DELL Latitude XY" in der Tabelle "LAPTOPS" (diese Tabelle soll nur Laptops spezifische Attribute enthalten) anzulegen, wĂ€hrend er den Artikel "Samsung TFT XY" in einer anderen Tabelle "DISPLAYS" (spezifische Eigenschaften fĂŒr Displays) anlegt, und so weiter bei den anderen Artikelarten. Es muss auch möglich sein, dass der Benutzer die Menge der gescannten Artikelgruppe (Laptop DELL XY) ermitteln kann. Leider alle Möglichkeiten, die ich bis jetzt versucht habe, fĂŒhren zu einer Datenredundanz. FĂŒr irgendwelche VorschlĂ€ge dazu, wĂŒrde ich sehr dankbar. GruĂ
Sturm Geschrieben 29. November 2009 Geschrieben 29. November 2009 Vielleicht kannst du uns ja mal mit einem ER-Diagramm deine bisherige Lösung zeigen, und wir schauen dann mal wo man noch ansetzen kann!
wahid Geschrieben 29. November 2009 Autor Geschrieben 29. November 2009 Hallo "Sturm", so im Anhang findest du meine bisherige Lösung, die ich bisher optimieren möchte. Die Endung "_copy1" ist unnötig (wollte nur diesen Abschnitt der DB zeigen). Und jetzt eine kurze Vorstellung zu diesem Abschnitt: 1- Ein mehrfach eingelieferter Artikel (10 Stck. IBM THINKPAD XY) kann unter der Tabelle "ARTIKEL" angelegt werden. Dieser gehört zu einem bestimmten Artikeltyp (Tabelle "KATEGORIE") , jeder Kategorie kann auch untekategorien haben (durch die 1:n Beziehung innerhalb der Tabelle "KATEGORIE". 2- Jeder angelegter Artikel hat 1 bis n Artikels von Typ "COMPUTER", "DISPLAY", "DRUCKER" oder "ZUBEHOER", sodass derselbe Artikel mehrfach (da jedes StĂŒck einen Barcode hat) unter der zugehörigen Tabelle angelegt wird. Also durch diese 1 zu 1...* Beziehung muss es unbedingt einen Datensatz in einer der erwĂ€hnten Tabelle angelegt wird. 3- Jeder "ARTIKEL" stammt aus einem "LIEFERANT" 4- Jeder "ARTIKEL" hat einen "STATUS" (ausverkauft, lieferbar) oder jeder "COMPUTER" ...usw hat auch einen "STATUS" (verkauft, verfĂŒgbar, defekt...) Das Problem liegt bei meiner komischen Vorstellung, dass in jeder der Artikeltyps-Tabellen dieselbe DatensĂ€tze fĂŒr einen bestimmten Artikel gibt, auĂer dem Barcode, der wird unterschiedlich sein. Any Idea? Danke
_n4p_ Geschrieben 29. November 2009 Geschrieben 29. November 2009 nun zunĂ€chst mal, alles was nicht typ spezifisch ist in die artikeltabelle barcode,hersteller,modell warum in den typtabellen ein PK id und artikel ID? artikel ID sollte doch eindeutig genug sein? wieso kann ein artikel in der artikel tabelle mehrere computer, tfts oder drucker enthalten? eine lieferung ja, aber du willst ja die artikel speichern. was is mit dem status? kann ein TFT grundsĂ€tzlich andere werte fĂŒr status bekommen als ein drucker? ich mein verfĂŒgbar is verfĂŒgbar und bestellt ist bestellt völlig egal was fĂŒr ein Typ das is, oder nich? wĂ€re dann also noch ein kandidat fĂŒr die artikeltabelle und du möchtest bestimmt kein bild binĂ€r in die tabelle schreiben, oder?
wahid Geschrieben 29. November 2009 Autor Geschrieben 29. November 2009 Hallo _n4p_, So zu deinen Fragen: warum in den typtabellen ein PK id und artikel ID? artikel ID sollte doch eindeutig genug sein? => Artiekl_ID ist in dem Fall ein Foreign Key, brauche ich das nicht? wieso kann ein artikel in der artikel tabelle mehrere computer, tfts oder drucker enthalten? => Ja hier meinte ich folgendes: HĂ€ndler bekommt eine bestimmte Menge von einem Artikel X, dieser wird dann in der Tabelle "ARTIKEL" mit den allgemeinen Attributen gespeichert. Jedes StĂŒck aber (mit eigenem Barcode) wird von ihm eingescannt und deren Eingenschaften in einer der Artikeltyps_Tabellen gespeichert. SpĂ€ter kann der VekĂ€ufer sowohl die Eigenschaften von einem "ARTIKEL" ermittlen, oder genau den ARTIKEL mit dem Barcode "123456789DE" durch den Barcodescanner ermitteln. Und so ist die EntitĂ€t "ARTIKEL" das Produkt sozusagen und "ARTIKELTYP" das EinzelstĂŒck. was is mit dem status? kann ein TFT grundsĂ€tzlich andere werte fĂŒr status bekommen als ein drucker? => Mit "STATUS" wollte ich eigentlich einmal den status fĂŒr den ARTIKEL, d.h eine Warengruppe ARTIKEL kann entweder ausverkauft oder nicht sein, wĂ€hrend ein TFT oder DRUCKER kann den Status "verkauft" oder "verfĂŒgbar" bzw. "defekt" haben kriegen solange diese nur ein StĂŒck der Gesamtmenge sind. und du möchtest bestimmt kein bild binĂ€r in die tabelle schreiben, oder? => dieser binĂ€rer Datentyp wird von MySQL unterstĂŒtzt um z.B Bilder zu speichern. Falls irgendwelche VorschlĂ€ge zum DB-Modell bitte nicht zögern, Danke!
_n4p_ Geschrieben 29. November 2009 Geschrieben 29. November 2009 ok in "artikel" sind also 1..N verschiedene produkte pro datensatz die dann einzeln in den jeweiligen tabellen liegen? also betrachten wir den typischen wareneingang: der lieferant schickt ein pĂ€ckchen allein das sind minimum 3 tabellen, daten zum lieferanten in der einen, daten pro lieferung in einer anderen und in die 3te kommen daten wie artikelnummer, liefernummer, menge, (stĂŒckpreis,...) in der artikeltablle kommen allgemeine daten zum artikel: artikelnummer, verkaufspreis, mwst-satz, barcode, hersteller, artikeltyp, artikelkategorie, menge auf lager, ... in die typspezifischen tabellen kommt wieder die artikelnummer und alle attribute die die anderen typen nicht haben den pk in den typspezifischen tabellen brauchst du nicht, durch die artikelnummer wĂ€re das immer noch eindeutig. praktisch wird man wohl eher nach allen artikeln die ein tft von hersteller XY sind suchen oder nach einer artikelnummer, als nach einer nummer die auĂerhalb der software eigentlich keiner kennen könnte. ja man kann Bilder in MySQL speichern. nur sinnvoll ist es nicht in jedem fall. ob du das bild tatsĂ€chlich in die DB haben willst ist system abhĂ€ngig. in einer desktop anwendung, kann es sinnvoll sein, speziell wenn du mehrere kleine bilder anzeigen willst. zeigst du ein einzelnes dafĂŒr groĂes bild is das dateisystem wahrscheinlich der schnellere speicher. fĂŒr webapplikationen ist es weniger sinnvoll, da der browser fĂŒr das bild sowieso einen weiten GET auslöst, musst du an der stelle das bild irgendwie aus der DB holen hast du als kosten den dateizugriff + script laufzeit + datenbakzugriff im vergleich zu einem einzelnen dateizugriff wenn du nur den pfad zum bild angeben musst in jedem fall wird das dateisystem schneller wenn die BLOBs "sehr" groĂ werden..
wahid Geschrieben 29. November 2009 Autor Geschrieben 29. November 2009 Hallo _n4p_, erstmal Danke fĂŒr die BemĂŒhung. ok in "artikel" sind also 1..N verschiedene produkte pro datensatz die dann einzeln in den jeweiligen tabellen liegen? => Ganz genau! allein das sind minimum 3 tabellen, daten zum lieferanten in der einen, daten pro lieferung in einer anderen und in die 3te kommen daten wie artikelnummer, liefernummer, menge, (stĂŒckpreis,...) => Wie wĂŒrden dann die Beziehungen im Falls der drei Tabellen (LIEFERANT, LIEFERUNG, ARTIKEL) aussiehen ? so was Ă€hnliches: LIEFERANT - LIEFERUNG => 1:n ? LIEFERUNG - ARTIKEL => 1:n ? ARTIKEL - LIEFERANT => 1:1 bzw jeder Artikel kommt aus einem Lieferant? den pk in den typspezifischen tabellen brauchst du nicht, durch die artikelnummer wĂ€re das immer noch eindeutig. praktisch wird man wohl eher nach allen artikeln die ein tft von hersteller XY sind suchen oder nach einer artikelnummer, als nach einer nummer die auĂerhalb der software eigentlich keiner kennen könnte. => WĂ€re dann die Beziehung in dem Fall eine 1:1, d.h jeder ARTIKEL ist ein COMPUTER oder? Also in der Tabelle COMPUTER z.B wird kein PK geben? nur der FK von Artikel-Tabelle? Ist der PK bei MySQL-DB ungeachtet der DB-GröĂe nicht ein Muss? ja man kann Bilder in MySQL speichern. nur sinnvoll ist es nicht in jedem fall. ob du das bild tatsĂ€chlich in die DB haben willst ist system abhĂ€ngig. in einer desktop anwendung, kann es sinnvoll sein, speziell wenn du mehrere kleine bilder anzeigen willst. zeigst du ein einzelnes dafĂŒr groĂes bild is das dateisystem wahrscheinlich der schnellere speicher. fĂŒr webapplikationen ist es weniger sinnvoll, da der browser fĂŒr das bild sowieso einen weiten GET auslöst, musst du an der stelle das bild irgendwie aus der DB holen hast du als kosten den dateizugriff + script laufzeit + datenbakzugriff im vergleich zu einem einzelnen dateizugriff wenn du nur den pfad zum bild angeben musst => Das wird ja auch eine DB einer Desktop Anwendung. Danke dir
_n4p_ Geschrieben 29. November 2009 Geschrieben 29. November 2009 es gibt keine direkte beziehung zw artikel und lieferant. ist ja unnötig, da du ĂŒber die lieferungen vom lieferant zu den artikeln und von den artikeln zum lieferant kommst ein pk ist nicht notwendig. die beziehung zw computer und artikel ist eine generalisierung: computer ist ein artikel, aber artikel KANN ein computer sein. artikel kann aber auch ein tft sein. du könntest auch jedem artikel ein set von eigenschaften zuordnen. artnr, attributename, wert 111, taktfrequenz, 3GHz 111, cache, 3MB 112, diagonale, 24" das ist dann sauber normalisiert.
wahid Geschrieben 30. November 2009 Autor Geschrieben 30. November 2009 Hallo "_n4p_", Zuerst möchte ich dir fĂŒr deine BemĂŒhung wirklich sehr danken! es gibt keine direkte beziehung zw artikel und lieferant. ist ja unnötig, da du ĂŒber die lieferungen vom lieferant zu den artikeln und von den artikeln zum lieferant kommst => Soll dann also dieses Prozess so sein: ARTIKEL _____________________________________ ID| lieferung_ID|Attribute 1| Attribute 2|... ------------------------------------------ LIEFERUNG ___________________________ ID | Lieferant_ID| Attribute 1|... ------------------------------- LIEFERANT __________________________ ID| Attribute 1| Attribute 2| ... ------------------------------ ein pk ist nicht notwendig. die beziehung zw computer und artikel ist eine generalisierung: computer ist ein artikel, aber artikel KANN ein computer sein. artikel kann aber auch ein tft sein. du könntest auch jedem artikel ein set von eigenschaften zuordnen. artnr, attributename, wert 111, taktfrequenz, 3GHz 111, cache, 3MB 112, diagonale, 24" => Dann brauche ich hier in dem Fall das erweiterte ER-Modell und ist damit auch eine richtige Lösung. Aber da ich fĂŒr MySQL-DB entschieden habe, weiĂt du wie ich eine "is-a" Beziehung mit MySQL umsetzen kann? Nach der Arbeit werde ich das Modell ĂŒberarbeiten, und ein Screenshot davon posten, damit du die "letzte Version" bewerten kannst. Danke dir GrĂŒĂe
_n4p_ Geschrieben 30. November 2009 Geschrieben 30. November 2009 zum ersten teil, genau so hatte ich das gemeint ^^ zum zweiten artikel ------ id|lieferung_id|barcode|hersteller|modell|einzelpreis|artikelTyp|.. -------------------------------------------------------------- 1|1|2452345|Samsung|Syncmaster XY|146.00|TFT 2|1|328783946|Samsung|Spinpoint M2|56.89|HDD tabelle hdd: ----------- artikelid|size|rpm|... 2|400GB|5400|.. tabelle TFT: ------------ artikelid|diagonale|HDMI|.. 1|24|yes|.. SELECT * FROM artikel LEFT JOIN hdd ON (artikel.artikelid = hdd.artikelid) LEFT JOIN tft ON (artikel.artikelid = tft.artikelid) WHERE hersteller = 'Samsung' hier wĂ€rs natĂŒrlich gut du wĂŒsstest vorher welchen artikeltyp du grade suchst, leider kann MySQL keine tabellen als rĂŒckgabewert fĂŒr funktionen, weshalb du selbst bestimmen musst welche tabellen beteiligt sind.
wahid Geschrieben 1. Dezember 2009 Autor Geschrieben 1. Dezember 2009 Hallo _n4p_, im Anhang findest eine Ăbersicht vom DB-Modell, nachdem ich es nach deinen VorschlĂ€ge verbessert habe. Ich habe aber noch eine Frage, die ich selbst nicht beantworten konnte und zwar: wie kriege ich, dass die Artikeltyps-tabellen die ID des entsprechenden Artikels zugewiesen bekommen? Weil nĂ€mlich, wenn ich artikel_ID als FK bei den Artikeltyp-tabellen dann bedeutet das eine 1-n Beziehung oder? (Im Grafik siehst du den zweiten Teil meiner DB, es geht um ReparaturauftrĂ€ge, wenn du magst, du kannst den auch auf Fehler prĂŒfen :-) ). Danke dir GruĂ
_n4p_ Geschrieben 1. Dezember 2009 Geschrieben 1. Dezember 2009 im ER modell gibt es keine spezialisierung bzw generalisierung, das gibts soweit ich weiĂ erst im EERM: Grundlagen von Datenbanksystemen - Google BĂŒcher da siehst du die darstellung in einem UML diagramm, das dreieck ist das was du suchst. die reperaturen sehen auf die schnelle ganz gut aus, wo ist denn da das problem?
Empfohlene BeitrÀge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto fĂŒr unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden