Relationales Datenmodell i. O. oder kommt seht wie man es nicht macht

  • VB.NET
  • .NET (FX) 3.0–3.5

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von Dksksm.

    Relationales Datenmodell i. O. oder kommt seht wie man es nicht macht

    Hallo zusammen,

    mittlerweile habe ich mir jedes Tut zum Thema relationale Datenmodellierung, "Dataset Only" etc. zu Gemüte geführt das ich finden konnte.
    Herausgekommen ist soweit das Dataset im angehängten Bild.

    Einige Hintergrundinformationen:

    Eine Bestellung besteht aus n Positionen.
    Es werden in bestimmten Zyklen verschieden Arten von Anfragen an Lieferanten versendet die sich auf n Positionen beziehen.
    Damit ich weiß in welchen Anfragen eine Position angefragt wurde oder welche Positionen in einer Anfrage angefragt wurden, habe ich die Tabelle AnfragenPositionenMap eingpflegt... kann man das so lösen?

    Personen können Disponenten sein, müssen es aber nicht. Andersherum ist jeder Disponent auch eine Person.
    Genauso verhält es sich mit Firmen, die Lieferanten sein können...



    Alles in allem frage ich hier nach eurem Feedback. Sieht das soweit ordentlich aus oder habe ich nichts verstanden?
    Eine andere Anlaufstelle habe ich soweit nicht :)

    Danke im voraus für eure Beiträge

    Prof
    Bilder
    • Unbenannt.PNG

      61,07 kB, 963×721, 308 mal angesehen

    TheProfessor schrieb:

    ... oder habe ich nichts verstanden?
    Imo, so flüchtig angeguckt, also "nichts verstanden" kann man auf keinen Fall sagen :thumbsup:
    (Andererseits finde ich immer was zu meckern - ich glaub, von dieser Regel hats bislang noch keine Ausnahme gegeben, obwohl das theoretisch doch möglich sein müsste :saint: )
    ZB die Benamung:
    • Bestellung.Nummer sollte Bestellung.ID heissen (und entsprechend wären auch die Fremdschlüssel zu ändern)
    • ich empfehle immer, Entitäten (also Tabellen) singular zu benamen. Plural-Namen mögen auf die Tabelle bezogen plausibel erscheinen, aber es wird auch Code für einzelne Datensätze generiert, und dort ist die Plural-Flexierung definitiv falsch und irreführend, denn ein Datensatz repräsentiert eine Einheit, keine Vielheit

    TheProfessor schrieb:

    Personen können Disponenten sein, müssen es aber nicht. Andersherum ist jeder Disponent auch eine Person.
    Genauso verhält es sich mit Firmen, die Lieferanten sein können...
    Das berührt das problematische Thema der Vererbung von Entitäten.
    Ist glaub so leidlich möglich, wie du es umgesetzt hast, aber letztendlich wird, was wirklich mit Entität-Vererbung gemeint ist (Stichwort 1:1-Relation), von typDataset nicht unterstützt.

    Die AnfragenpositionMap ist eine klassische Mittler-Tabelle einer m:n-Relation - jo, genau so macht man das.

    Ich versteh nur noch nicht die Beziehung zw. Lieferant und Artikel - Lieferant ist nicht etwa eine Spedition, sondern ist der Hersteller eines Artikels, richtig?
    Aber da müsste doch eine Beziehung bestehen, denn ein Hersteller stellt doch bestimmte Artikel her (und andere nicht), evtl. auch m:n, wenn mehrere Hersteller gleichartige Artikel herstellen.
    Oder ist das so, dass alle Hersteller alle infrage kommenden Artikel herstellen - dann kann man das so global lassen.

    Das mit den Anfragen versteh ich auch nicht - also worum gehts eiglich insgesamt?
    Ich versteh das Modell als Beschaffungs-Verwaltung, also die Artikel kommen herein, oder?

    Jdfs. verstehe ich nicht, warum man zyklisch zu iwelchen Bestell-Positionen Anfragen stellt.
    In meiner Welt ist eine Bestellung was fertiges, also wenn man nicht vorher den Preis angefragt hat, ist man selber schuld.

    Und wieso Anfragen nur zu einzelnen Positionen?

    Für mich ergäbe es einen Sinn, wenn man eine Bestellung zusammenstellt, und sich dann Angebote einholt - aber das macht man ja nicht zyklisch, sondern das wäre vlt. ein Status, den eine Bestellung einnehmen kann. Dann bezöge die Anfrage sich auf die komplette Bestellung.
    Eine andere Art Anfrage wäre punktuell artikelbezogen, "Eggood - was kosten die Kondome?" oder sowas.

    Also gut - ich versteh das nicht, so wie's ist.
    Danke schonmal für die Antwort.

    ErfinderDesRades schrieb:


    ZB die Benamung:
    • Bestellung.Nummer sollte Bestellung.ID heissen (und entsprechend wären auch die Fremdschlüssel zu ändern)
    [list][/list]Bestellung - Nummer heißt absichtlich so und nicht Bestellung - ID weil es sich bei uns im Betrieb um die Bestellnummer handelt. Alle anderen ID generiere ich selbst - diese Nummer kommt von extern.


    Ich weiß garnicht ob ich das so offenlegen darf aber ich tus jetzt einfach mal :D

    Bestellt sind die Artikel bereits, deshalb gibt es ja eine Bestellung. Angefragt wird jedoch beim Lieferanten (richtig, hier ist der Hersteller gemeint) ob dieser auch rechtzeitig liefert. Da Bestellung und Anlieferung fast immer mehrere Monate auseinander liegen, ist es wichtig, mehrmals den Termin bestätigen zu lassen (die erwähnten Zyklen). Da gibt es dann 1. Anfrage, 2. Anfrage uvm. Status wären dann z. B. "Bestätigt", "Ausgesetzt"... Regelfall ist es gleich mehrere Bestellungen anzufragen oder nur teile einer Bestellung Lieferanten werden dann nach Ihrem Antwortverhalten auf diese Anfragen bewertet >>> der wahre Zweck der Datenbank.


    Die Relation zwischen Artikel und Lieferant kann ich tatsächlich nicht gewährleisten. Es handelt sich um Einzelteilfertigungen und Lieferanten können mitunter munter wechseln.


    Ich muss sagen ich habe das mit der Sinnhaftigkeit oder nicht Sinnhaftigkeit der Vererbung von Person und Firma nicht ganz verstanden. Ist das nun brauchbar oder nicht? Was bedeutet dass das vom typDataset hier nicht unterstützt wird?
    Ging mir beim Designen irgendwie gegen den Strich Disponenten/Anfragende (ist hier nicht drin, kommt aber wahrscheinlich noch)/LieferantenAnsprechpartner als eigene Entitäten einzupflegen und jedem die selben Eigenschaften zu geben.

    TheProfessor schrieb:

    Ging mir beim Designen irgendwie gegen den Strich Disponenten/Anfragende (ist hier nicht drin, kommt aber wahrscheinlich noch)/LieferantenAnsprechpartner als eigene Entitäten einzupflegen und jedem die selben Eigenschaften zu geben.
    Jo - genau an diesem Punkt merkt man das, dass dem Dataset ein Konzept von Entität-Vererbung fehlt.
    Wird sich dann zeigen, ob und wie du mit deim Behelf durchkommst, oder ob nicht doch besser ist, (zähneknirschend gewissermassen) die Attribut-Gruppen halt mehrfach anzulegen, in verschiedenen Entitäten.
    Zumindest im DGV und in anderen datengebundenen Dialogen wirds glaub einfacher werden, wenn die Attribute direkt zu binden sind, und nicht erst eine Relation aufzulösen ist.

    Ansonsten versteh ich glaub dein Modell nu :thumbsup: (fast)

    (Fast) nämlich, warum gibts 2 Relationen Disponent => Bestellung ?

    Und wie gesagt: Beobachte zumindest die Auswirkungen der Plural-Flexierung. Ich rate ja davon ab, und dein Mischmasch ist besonders ungeschickt, also achte drauf, ob dir später beim Coden was auffält an den generierten Benamungen, mit denen du zu hantieren hast.
    Ich halte den Aufbau der Tabellen Personen, Firma, Lieferanten und Disponenten für nicht zweckmäßig, von der Benamsung in Plural mal abgesehen.
    Jede "Person" mit der eine Geschäftsbeziehung besteht gehört für mich in einen "Topf", den nenne ich Businesspartner (also die Tabelle).
    In der Tabelle kann man "Firma" und "Person" unterscheiden und für beide benötige ich noch Anreden, die aus der (nicht vorhandenen) Tabelle Anredecode kommen. Dann gehören da noch Adressen mit in die Tabelle Businesspartner und Subtabellen für die Kontaktdaten (Telefonnummern, Email-Adressen).

    Lieferant und Disponent sind für mich Rollen (Tabelle), ebenso wie Mitarbeiter, Kunde oder wenn man das spezifiszieren will oder muss, Endabnehmer, Großabnehmer. Hinter den Rollen stecken dann weitere Informationen wie Personalnummer beim Mitarbeiter oder Lieferantennummer beim Lieferanten etc.