Fremdschlüsselabhängikeiten mit mehreren Tabellen

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

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

    Fremdschlüsselabhängikeiten mit mehreren Tabellen

    Hallo,

    ich bin hier schon einige Zeit als Ghostreader unterwegs und speziell die Beiträge und Videos von ErfinderdesRades haben mir sehr weitergeholfen.
    Nun habe ich allerdings ein Problem, das ich nicht mehr als "Ghost" lösen kann; und auch eine Suche bringt mich nicht weiter - wahrscheinlich, weil ich zu doof bin, die richtigen Tags einzutippen.

    Zuallererst: Ich nutze VB 2015 in der Comunity Edition und darin wie empfohlen typisierte Datasets, die ich als XML speichere (und lade). Alles soweit wunderbar in Ordnung.
    Das Problem ist folgendes (ich kürze alles etwas, ohne die Funktion einzuschränken):

    Ich habe eine Tabelle namens "Bauteil" mit den Primary Key "ID" einer Spalte "Name" und einer Spalte "GruppenID"
    Dann habe ich eine zweite Tabelle namens "Gruppe", ebenfalls mit Primary Key "ID" und einer Spalte "Name"
    Die Spalte "GruppenID" steht in einer Beziehung "cascade" zur ID der Tabelle Gruppe

    Was ich will, ist einem Bauteil mehrere Gruppen zuzuordnen, und zwar über die typisierten DatagridViews.
    Aus der oben beschriebenen Ausgangslage kann ich über die datagridviewcomboboxcolumn 1 (eine) Gruppe zuordnen, nicht aber mehrere, da ich nicht mehrere Gruppeneinträge in der combobox auswählen kann.

    Ich habe es dann über eine Hilfstabelle Gruppe_zu_Bauteil mit dem Primary Key "ID" und den beiden Spalten BauteilID und GruppenID versucht. Diese Hilfstablle habe ich dann auch über ein datagridview eingebunden (jeweils Comboboxen), aber jedes Mal, wenn ich entweder ein Bauteil das zweite Mal auswähle kommt eine Fehlermeldung oder eine Gruppe...
    Oder - ist auch schon passiert - beim Start schon, dass entweder die Constraints falsch sind...

    Kann mir hier jemand einen Tipp geben, wie ich mich dem Problem nähern kann? Dachte eigentlich, mit der Hilfstabelle müsste es gehen, aber da war ich wohl auf dem Holzweg - oder die Beziehungen sind falsch...


    Grüße und Danke schon mal voarb,

    2bbionic



    Kann mir jemand helfen, dieses Problem zu lösen?

    2bbionic schrieb:

    Was ich will, ist einem Bauteil mehrere Gruppen zuzuordnen


    Wäre das wahr, würde es reichen, wenn Du Bauteil mit Name und ID ausstattest und Gruppe mit Name, ID und BauteilID. Dann hat jede Gruppe genau ein Bauteil und mehrere Gruppen können auf das selbe Bauteil verweisen. Aber ich vermute mal, dass nicht nur ein Bauteil in mehreren Gruppen sein soll, sondern auch eine Gruppe eine unbekannte Anzahl von verschiedenen Bauteilen. Es stellt sich nun die Frage, ob es Dir reicht, dass mehrere identische Objekte vom Typ Gruppe existieren oder aber ob z.B. x Bauteile auf der einen Seite existieren und y Gruppen auf der anderen und Du wild kombinieren willst, ohne Bauteil- oder Gruppenduplikate zu haben.

    EDIT: Hat denn ein Bauteil eine maximale Anzahl an Gruppenzugehörigkeiten?
    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.

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

    2bbionic schrieb:

    Was ich will, ist einem Bauteil mehrere Gruppen zuzuordnen, und zwar über die typisierten DatagridViews. ... Hilfstablle habe ich dann auch über ein datagridview eingebunden (jeweils Comboboxen), aber
    Also klingt sehr nach m:n - Relation, und auch die Hilfstabelle klingt wie richtig gemacht.
    (Zur Sicherheit kannste auch mal Bild vom DatasetDesigner anhängen)

    Also wird wohl iwas beim Binden verkehrt gelaufen sein. Da kannste auf vier Views-Videos das Filmchen angucken, wie da der m:n-View gemacht ist.
    Wäre das wahr, würde es reichen, wenn Du Bauteil mit Name und ID ausstattest und Gruppe mit Name, ID und BauteilID. Dann hat jede Gruppe genau ein Bauteil und mehrere Gruppen können auf das selbe Bauteil verweisen.

    Das ist genau so gemacht. Allerdings gibt es ja mehrere Bauteile, die der gleichen Gruppe zugehörig sind. So ist z.B. ein Widerstand das Bauteil und gehört z.B. in die Gruppen "passive Bauelemente" und "Durchkontaktierung". Gemeint ist es eher umgekehrt, wie Du es gemeint hast - ein Bauteil hat mehrere Gruppen; jede Gruppe hat aber auch mehere Bauteile.
    Es stellt sich nun die Frage, ob es Dir reicht, dass mehrere identische Objekte vom Typ Gruppe existieren oder aber ob z.B. x Bauteile auf der einen Seite existieren und y Gruppen auf der anderen und Du wild kombinieren willst, ohne Bauteil- oder Gruppenduplikate zu haben

    Das ist eigentlich das, was ich will: x Bauteile, die in y Gruppen sind. Und ja, wild kombinierbar....

    @ErfinderdesRades: Deine Videos, kenne ich - sonst wäre ich noch in Jahrzehnten nicht so weit - dafür auch von mir ein herzliches :thumbsup:
    Dachte anfangs auch, dass es eine m:n-Relation sei; soweit ich Deine Tuts verstanden habe. Nur funktioniert es bei mir nicht so, wie gewünscht...

    Hier ein Screenshot des Dsigners:



    Hier die Relation:


    Und die zweite Relation:


    Sieht für mich richtig aus - beim Starten kommt aber direkt diese Meldung:


    Ein testweises auskommentieren der Zeile

    VB.NET-Quellcode

    1. BFLdts.EnforceConstraints = True
    lässt mich zwar starten, dann baer mit hässlichen roten Ausrufezeichen - bringt mich also auch nicht weiter...

    EDIT:

    Bin jetzt einen Schritt weiter - wenn ich die Fremdschlüsseleinstellung so vornehme, wie im Screenshot funktioniert es - die Datenbank behält ihre Daten (auch nach dem Speichern in XML und Reload):

    Was jetzt natürlich noch nicht funktioniert ist der "automatische" Filter; d.h. wenn ich eine Gruppe anklicke, in dem entsprechenden DGV nur die Bauteile erscheinen, die in der Gruppe enthalten sind. Nächstes Problem...
    Bilder
    • f4.png

      17,21 kB, 960×588, 119 mal angesehen

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

    Wie sieht es mit den drei Regeln unten aus ("Aktualisierungs,..Lösch,...)? Wenn alle auf "none" stehen - "Nur Beziehung" wie im letzten Bild, kann es dann Probleme geben? Ich verstehe es so, dass beim Löschen eines Eintrags in dieser Verknüpfungstabelle gar nichts mit den übergeordneten Tabellen passiert, was ja auch so gewünscht ist.