Denkanstoss zum Datenmodel (MWST-Rechner)

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

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von asusdk.

    Denkanstoss zum Datenmodel (MWST-Rechner)

    Hi an alle,

    ich habe diesen thread zwecks einer Grundsätzlichen Frage bezüglich Datenmodellen erstellt. Im Anhang findet ihr einen ScreenShot, der eine Simple Excel-Liste zeigt. Jede Zeile enthält einen Auftrag. Numerierung, KundenName, und die Kosten, aufgeteilt in Netto, Mwst und Brutto.
    Wenn man dies nun in einem Programm machen möchte, da man Excel nicht weiter verwenden möchte stellt sich mir folgende Frage:

    Ich benötige ja einmal ein Modell für einen Kunden (Dieser enthält im Prinzip nur den Kunden Namen) und ein Modell für den Auftrag. Hier beginnt mein Problem, da ich ja anscheinend eine verbindung zwischen den Kunden und dem Auftrag brauche. Wie würdet ihr das lösen ? Hätte dann euer "KundenModell eine Liste mit Ihm zugehörigen Aufträgen" oder würdet Ihr eher eurem "AuftragsModell" einen Kunden zuweisen. Ich stolpere hier aktuell über die Grundidee, da ich am Ende in der Auftragsliste, sowohl einen Datums-Filter als auch einen KundenFilter einbauen möchte.

    Evtl. denke ich ja hier mit beiden Optionen in die völlig falsche Richtung, daher wollte ich eben mal fragen nach welchem Prinzip Ihr dies aufziehen würdet.

    LG
    Bilder
    • HF-List.JPG

      72,32 kB, 581×730, 84 mal angesehen
    If Energy = Low Then
    Drink(aHugeCoffee)
    Else
    Drink(aHugeCoffeeToo)
    End If
    Die Frage ist auch, ob du Wpf machst, oder WinForms.
    In WinForms ist das eine klare Sache: Das einfachste wäre ein typisiertes Dataset, in dem du ein relationales Datenmodell erstellst.
    Übrigens nur ein Datenmodell, nicht eines für Kunden, eines für Aufträge, eines für...
    Weil das relationale am relationalen Datenmodell ist, dass vieles mit vielem (meist sogar: alles mit allem) über Relationen miteinander in Zusammenhang steht.
    (Also Kunde und Auftrag stehen auf jeden Fall in einem relationalen Zusammenhang.)

    Wundert mich bisserl, ich dachte, relationale Datenmodellierung sei dir schon bekannt.
    Ansonsten gugge Grundlagen: Relationale Datenmodellierung und natürlich vier Views-Videos

    In Wpf musst du dir leider eine Datenbank antun, und mittm EF drauf losgehen.
    Relational modellieren musste aber so oder so.
    Wundert mich bisserl, ich dachte, relationale Datenmodellierung sei dir schon bekannt.


    Naja ich habe bisher nur ein Projekt, mit einem typisiertem DataSet erstellt, allerdings kann ich mich damit absolut nicht anfreunden, ich bevorzuge es anhand von klassen zu arbeiten, diese wiederum werden schlicht in List(of DatenModel) geführt und bei Programmstart/Programmende von/in einer Datei geladen.
    Was ich allerdings nicht ganz verstehe und auch damals bei dem Projekt mit DataSet nicht verstanden habe, ist wie ich damit umgehe wenn abhängikeiten voneinenader vorhanden sind.

    Im Moment würde ich vermutlich am ehesten, eine Liste mit Kunden erstellen, und bei dem Window in welchem ich den Auftrag anlege, einfach eine ComboBox zur Verfügung stellen in welcher alle Kunden gelistet sind. Nur weis ich eben nicht ob das so dann auch Sinn machen würde, wenn cih dann die AuftragsListe auch filtern können möchte

    Die Frage ist auch, ob du Wpf machst, oder WinForms.

    Im Prinzip Beides. Ich möchte künftig (zumindest fürs erste) die Oberflächen in WPF gestalten, damit ich mich langsam aber sicher an die Xaml gewöhnen kann, allerdings würde ich "Ich weiss ich krieg gleich wieder (bildliche) haue von NoFear ^^ mit CodeBhind arbeiten" da ich vermute das ich mich erstmal in wirklich kleinen BabySchriten an WPF herantasten muss, damit ich evtl. irgendwann mal weit genug bin, um auf MVVM umzusteigen, da ich vermute das es noch einfach zu viel ist was ich lernen muss um zwischen all dem überhaupt verbindungen zu erkennen.


    LG
    If Energy = Low Then
    Drink(aHugeCoffee)
    Else
    Drink(aHugeCoffeeToo)
    End If

    asusdk schrieb:

    Was ich allerdings nicht ganz verstehe[...], ist wie ich damit umgehe wenn abhängikeiten voneinenader vorhanden sind.
    Hmm - da täte ich jetzt die empfohlenen Tutorials zu lesen empfehlen - insbesondere Grundlagen der relationalen Modellierung.
    "umgehe wenn abhängikeiten voneinenader" - Das machen die Relationen im relationalen Datenmodell. Wirkllich: lese Tut, downloade SampleCode, gugge typDataset, bastel selbst eines.

    Ich würde da erstmal WinForms empfehlen, weil in Wpf musste gleich mit EF-CodeFirst auf den SqlServer losgehen - dassis nichttrivial, es überhaupt ans Laufen zu bringen.
    Ausserdem ist EF-CodeFirst so superschlau, dass du da die relationale Datenmodellierung gleich wieder vergessen kannst, weil EF-CodeFirst legt ja für dich die Datenbank an.
    Also es funktioniert zunächstmal (für Standard-Fälle, wie diesen hier), nur du weisst nicht, warum.
    Hmm - da täte ich jetzt die empfohlenen Tutorials zu lesen empfehlen - insbesondere Grundlagen der relationalen Modellierung.

    Das habe ich damals über mehrere Monate versucht, evtl. kannste dich daran erinnern das ich dich immer wieder gefragt habe dazu, allerdings haben mir die Tutorials leider nciht geholfen dies zu verstehen.

    weil in Wpf musste gleich mit EF-CodeFirst auf den SqlServer

    hm das verstehe ich nicht, in der WPF kann ich doch genauso manuel sagen, für jedes Item in meiner AuftragsListe, ListBoxAufträge-items.add(natürlich nur bildlich) wüsste also nciht wieso ich hier einen SqlServer bräuchte.

    Aber gut dann muss ich mir eine Lösung ohne abhängikeiten einfallen lassen, also evtl. aufs filtern verzichten.

    LG
    If Energy = Low Then
    Drink(aHugeCoffee)
    Else
    Drink(aHugeCoffeeToo)
    End If
    nö - kann mich nicht erinnern.
    Kann mir aber auch nicht vorstellen, dass du tatsächlich zu dumm sein solltest, es zu verstehen - es ist relativ einfach.
    Mit

    asusdk schrieb:

    oder würdet Ihr eher eurem "AuftragsModell" einen Kunden zuweisen.
    hast du das wesentliche der relationalen Datenmodellierung bereits selbst formuliert.
    Nun musste nurnoch schnackeln, wie das praktisch vor sich geht (nämlich über den PrimKey-ForeignKey - Mechanismus).
    nö - kann mich nicht erinnern.
    Kann mir aber auch nicht vorstellen, dass du tatsächlich zu dumm sein solltest, es zu verstehen - es ist relativ einfach.

    Nur einer von mehreren Threads wo wir das schon durchexorziert haben. Und leider muss ich zugeben, doch ich bin wohl so dämlich.....


    Jetz mal von allem abgesehen, unabhängig davon wie ich es letztlich implementiere, was würde mehr Sinn machen: Kunden enthalten Aufträge, Oder Auftrag enthält Kunde ?

    LG
    If Energy = Low Then
    Drink(aHugeCoffee)
    Else
    Drink(aHugeCoffeeToo)
    End If
    Hi,
    vermutlich beides... wenn ich mir die Klassen vors auge halte... hätte die Klasse Kunde eine List Of Aufträge und die Klasse Aufträge hätte einen Kunden... ist ja eine klassische 1:n Relation, 1 Kunde kann viele Aufträge haben, aber 1 Auftrag gehört nur zu einem Kunden
    "Hier könnte Ihre Werbung stehen..."

    asusdk schrieb:

    Nur einer von mehreren Threads wo wir das schon durchexorziert haben. Und leider muss ich zugeben, doch ich bin wohl so dämlich.....
    Ja, tatsächlich - da haben wir uns längers mit einem typDataset auseinandergesetzt - bisses plötzlich abgebrochen ist.

    Beim nochmal lesen scheint mir das Problem des damaligen Threads, dass du alles auf einmal wolltest: ParentChild-View, DetailView, mehrere Forms, und ausserdem wars iwie verdaddelt.

    Ich denke aber, wenn man sich ganz kleinkariert ans Tut hält, müsste man in kleinen Schritten vorankommen.

    Ich denke weiters - du kommst da garnet drumherum.
    Wenn du Kunden und Aufträge hast, und willst die Aufträge mal nach Kunde, mal nach Datum filtern, und womöglich nach sonst noch was, dann brauchst du eine relationale Datenverarbeitung.

    Eine Liste von selbstgebastelten Kunden, und jeder Kunde enthält eine Liste von selbstgebastelten Aufträgen, und jeder Auftrag enthält einen Kunden-Verweis (und hofflich genau den, bei dem er auch in der Liste drin ist) - sowas macht über kurz oder lang einfach keinen Spass mehr.

    Und es ist wirklich einfach:
    Bilder
    • AuftragDataset.png

      4,38 kB, 406×150, 74 mal angesehen
    Wenn du Kunden und Aufträge hast, und willst die Aufträge mal nach Kunde, mal nach Datum filtern, und womöglich nach sonst noch was, dann brauchst du eine relationale Datenverarbeitung.

    Eine Liste von selbstgebastelten Kunden, und jeder Kunde enthält eine Liste von selbstgebastelten Aufträgen, und jeder Auftrag enthält einen Kunden-Verweis (und hofflich genau den, bei dem er auch in der Liste drin ist) - sowas macht über kurz oder lang einfach keinen Spass mehr.


    Ich denke schon das ich es für meine Zwecke ganz gut hinbekommen habe, muss nur noch das Serialisieren einbauen, und einen besseren weg zur Anzeige finden, da in der Listbox so natürlich keine gescheite Formatierung möglich ist, da ja die Strinlängen variieren, wahrscheinlich muss ich mir eine DGV antun.
    Oberfläche ist mit Xaml gemacht, der Rest Simpler CodeBehind, auch wenn vielen der Code so nicht schmecken dürfte... Falls du es dir angucken magst, bereinigtes Projekt im Anhang




    Beim nochmal lesen scheint mir das Problem des damaligen Threads, dass du alles auf einmal wolltest: ParentChild-View, DetailView, mehrere Forms, und ausserdem wars iwie verdaddelt. Ich denke aber, wenn man sich ganz kleinkariert ans Tut hält, müsste man in kleinen Schritten vorankommen.

    Stimmt ich denke ich wollte damals alles auf einmal, aber mir wiederstrebt das in erster Linie wegen dem binding. Ich möchte bestimmen was wann und wie mit den Daten geschieht, das Binding hat mir schon Monatelange Wut beschert, da es nie das tut was ich möchte, also lieber von hand ^^
    Dateien
    • HappyFeetsDB.rar

      (302,68 kB, 65 mal heruntergeladen, zuletzt: )
    If Energy = Low Then
    Drink(aHugeCoffee)
    Else
    Drink(aHugeCoffeeToo)
    End If