M:N-Relation Problem

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 54 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    M:N-Relation Problem

    Hallo in die Runde,

    ich benötige einen Denkanstoß da ich nicht weiter komme.
    Ich bau gerade ein kleines Programm in dem man Bestellungen aufgeben kann. Soweit alles ok aber ich habe jetzt ein Problem wo ich nicht weiter weiß wie ich das realisieren sollte.
    Ein Artikel verfügt über Eigenschaften wie z.B. Seite,Länge, Verstärkung. Ich möchte nun den Eigenschaften ihre Werte zuweisen die Ihrer Menge unterschiedlich sind. Ich möchte nachher erreichen das wenn ein Produkt ausgewählt wurde nur noch ausgewählt werden muss welche Seite, Länge und Verstärkung. Jeden Artikel mit deinen Kombinationsmöglichkeiten anzulegen wäre wahnsinnig.

    Hat da jemand einen Tipp für mich?
    Hallo und Willkommen :thumbup:

    Da musst du wohl genauer werden. Hat JEDER Artikel ausnahmslos die selben Eigenschaften oder nicht. also nicht Wert, sondern Eigenschaften.

    Wenn ja: Fix die Eigenschaften vergeben und setzen.
    Wenn nein: Als Attribute lösen. Es gibt X Attribute. diese werden 1x angelegt. z.b. Länge. Jedem Artikel können X Attribute zugewiesen werden.

    Weiters: Was hast du? DB, XML, DataSet ........

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Hallo Sascha,

    Danke für die schnelle Anwort.
    Nein, die Artikel haben unterschiedliche Mengen an Eigenschaften. Den einen wird z.B. nur eine Farbauswahlmöglichkeit zugewiesen und dem anderen noch weitere.
    Also wie z.B. Im Onlinehandel wo ich Schuhe und Hosen kaufen kann.

    Wie darf ich das mit den Attributen verstehen?

    Ja ich arbeite mit Dataset und XML.
    Hallo

    z.b. so in der Art:

    VB.NET-Quellcode

    1. Public Class Artikel
    2. Public Property ID As Integer
    3. Public Property ArtNr As Integer
    4. Public Property ArtBezeichnung As String
    5. Public Property Attribute As ICollection(Of Attribut)
    6. End Class
    7. Public Class Attribut
    8. Public Property ID As Integer
    9. Public Property Arrtibutname As String
    10. Public Property Value As String
    11. End Class


    Hoffe das wird nun etwas klarer, sonst frag hald einfach nochmals.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    @na_Icke Willkommen im Forum. :thumbup:
    Gib diesem Deinem Thread bitte einen aussagekräftigen Titel, der unmittelbar mit Deinem Problem zusammenhängt!
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    na_Icke schrieb:

    Hätte ich gerne gemacht aber wußte nicht was ich schreiben sollte.
    Das senkt die Hilfe-Quote.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Theoretisch kann man eine Klasse für die Artikel anlegen. Dort einfach alle Eigenschaften die ein Artikel haben könnte anlegen. Wenn du dann einen Artikel anlegst, fülle einfach nur die Eigenschaften, die er tatsächlich hat. Der Rest wäre dann eben "leer".

    Wobei die Lösung von @Nofear23m an sich recht nice ist. Halt schwerer zu speichern (je nachdem wie du das speichern willst)

    P.s. Der Thread Titel ist echt schlecht ;)
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen

    mrMo schrieb:

    Halt schwerer zu speichern

    Habs jetzt nicht probiert, sollte der XMLSerializer aber so wie es ist eigendlich können, da ja nur Primitive Typen. So müsste im XML auch der Attribut-"baum" entstehen.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Ja mit Serialisieren geht das. Zumindest mit ner List(Of T) ist das kein Problem. Aber wir wissen ja leider (noch) nicht wie die Daten hier gespeichert werden sollen.
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    Wenn der Ansatz von Nofear23m fortgesetzt wird, ist die Frage, ob es sinnvoll wäre, die Attributklasse generisch zu definieren, um Value typtechnisch (beinahe) beliebig zu machen.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    @mrMo
    Ich habe bisher alles über Datatable realisiert. Darüberhinaus möchte ich die Eigenschaftenanzahl variabel halten denn es könnten Artikel hinzukommen die Eigenschaften aufweisen die beim schreiben des Programms noch nicht bekannt sind. Daher habe ich mir eine Datatable angelegt über die dann die Art der Eigenschaften angelegt werden können ( Seite,Länge etc). Alles wird in XML gespeichert.
    Ich bin wie gesagt an dem Punkt das mir eine XML geschreiben wird in der die Artikel, inkl. seinem Lieferanten und dessen Kategorie gespeichert sind.
    Ich bin leider noch nicht dazu gekommen mir den Vorschalg von Sascha anzusehen. Arbeit,Kind und etwas krank hindern mich gerade ein wenig.
    Bisher war mein Gedankengang folgendermaßen: Eigenschaften werden anglegt. Anzeige im Datagridview. Nach doppelklick auf eine Eigenschaft kann ich ihm seine Werte zuweisen. Hier kommt dann wohl die Attributgechichte zum tragen.
    Jo, Dataset kann sich auch als Xml abspeichern, das geht sogar ohne Serialisierer.
    Ich hoffe du hast ein typisiertes Dataset. Darin kannste das Konzept von NoFear im Grunde noch viel einfacher umsetzen:

    Ich empfehle dir diese Tutorial-Reihe zur Datenverarbeitung: codeproject.com/Articles/10309…l-Datamodel-for-Beginners
    Hatte ich zuerst auch gedacht, aber wie würdest Du dann Wert generisch gestalten? Im DataSet muss man sich ja für einen Typ entscheiden.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    @EDR, ja ich arbeit mit typisierten Dataset. Dank deiner vielen Filmchen und diversen Erklärungen hier im Forum hab ich das verstanden wie ich mit dem ganzen Spaß DFaset, Binding etc arbeiten kann und sollte. Dafür schon mal zwei :thumbsup: hoch.

    So sieht momentan mein Dataset aus:


    Zur Erklärung, die Werte die der Eigenschaft zugewiesen werden können integer aber auch string sein.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „na_Icke“ ()

    nach deim Datenmodell kann dieselbe Eigenschaft in mehreren Artikeln gegeben sein, aber ein Artikel kann nur eine Eigenschaft haben.
    Das sicherlich nix gutt.

    Wennde bei mir guckst - da ist die Relation umgedreht: Eine Eigenschaft kommt nur einem einzigen Artikel zu, dafür hat ein Artikel aber deren mehrere.
    Wo ich drüber nachdenk ist das auch nix gut.

    Mir scheint, da muss eine m:n-Relation her.
    Um es mal praxisnaher zu gestalten:

    Es gibt einen Artikel: ein externer Hörer eines Hörgeräts. Dieser unterscheidet sich in Links und Rechts. Dazu kommt das dieser auch noch eine Länge besitzt die von 1-4 gehen kann. ein anderer Hörer wiederum hat die Größe 0-3.
    Als weitere Eigenschaft kommt die Verstärkung hinzu die der Hörer leisten kann. da habe ich mal einen db-Wert oder einfach einen Wert in Buchstaben S,M,P,HP etc. Mein Ziel ist es diesen Artikel nur ein einziges Mal in der xml zu hinterlegen und dann später über seine möglichen Eigenschaften ihn näher zu definieren wenn ich ihn im Bestellvorgang auswähle. Bisher, ein externes Programm, sind alle möglichen Varianten in einer Datenbank hinterlegt. das ist soooooo mühselig einen Hörer so anzulegen.