Relation auf gleiche Tabelle

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

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

    Relation auf gleiche Tabelle

    Hallo zusammen.

    Der Titel sagt eigentlich schon alles. Ziel ist es eine Dokumentenverwaltung zu schaffen die in Kategorien unterteilt werden kann. Da ich aber im Vorfeld nicht sagen kann wie viele Unterkategorien ich haben kann muss ich das Datenmodel so aufbauen kann das ich n Abstufungen haben kann....

    Vergleichsweise wie eine Ordnerstrucktur .... ich kann in einem Ordner einen Unterordner und darin wieder einen Unterordner usw.. erstellen. und das muss eben belibig oft gehen.

    Die Idee war jetzt eine Relation von einer Tabelle auf die gleiche Tabelle zu setzen.

    Tabelle : Kategorien

    Spalten:

    ID
    Name
    Bereich
    UeKatId

    UeKatId würde dann immer die ID die übergeordneten Kategorie enthalten. Die Frage ist nun ob eine Solche Relation überhaupt gültig ist und wenn nicht wie man alternativ vorgehen könnte

    Ich hoffe ich konnte das recht verständlich rüber bringen ;)
    ja, sowas ist gültig. Ich nenne nur ParentIds immer ParentId - niemals UeKatId. Und man muss bei ParentId AllowNull einstellen.

    Auch kanns beim Befüllen solcher DataTables dazu kommen, dass DataRows geladen werden, deren Parents noch nicht da sind. Also während Befüllens muss Dataset.EnforceConstraints abgestellt sein.
    Und dann hoffen, dass richtig befüllt wurde, sonst Bumm beim reaktivieren der Constraints.

    Es gibt auch eine alternative Modellierungs-Möglichkeit, dass man die Relation nicht als 1:n mit sich selbst modelliert, sondern als m:n mit sich selbst.
    Dabei hat man dann eine zusätzliche Mittlertabelle, und ist umständlicher, aber man kann das Laden nach üblichem Standard abhandeln, indem man halt die übergeordnete Tabelle als erste lädt.
    vlt. nützen dir auch meine Winforms-/Db-Extensions - die sollten eiglich mit beiden Varianten klarkommen.
    ​Ich nenne nur ParentIds immer ParentId - niemals UeKatId.


    Ja ParentId ist sinniger ... hätte ich auch drauf kommen können :P

    ​Und man muss bei ParentId AllowNull einstellen.


    Ist klar da ja Kategorien da sein werden die keine übergeordnete Kategorie haben

    ​Auch kanns beim Befüllen solcher DataTables dazu kommen, dass DataRows geladen werden, deren Parents noch nicht da sind. Also während Befüllens muss Dataset.EnforceConstraints abgestellt sein.Und dann hoffen, dass richtig befüllt wurde, sonst Bumm beim reaktivieren der Constraints.


    ebenfalls klar soweit ...

    wichtig ist nur das ich in der Relation ein Cascade drin habe damit beim Delete einer Kategorie alle Unterkategorien und deren Unterkategorien mit gekillt werden.
    Ich bin ja manchmal regelrecht erschüttert, wenn einfach verstanden wird, was ich von mir gebe.
    Ich rechne sonstwie mit Nachfragen, aber (wie's aussieht) - du setzst einfach um, was ich sage :thumbsup:

    Das Bildle - das zeigt nicht zufällig das gute alte WinForms-Datagrid-Control, was glaub seit 2005 (z.T. unberechtigterweise) total aus der Mode gekommen ist?

    @Cell Das sieht mir ganz Stark nach den DevExpress Tools aus, hab ich recht?


    Korrekt :D

    Ich finde die Controls von denen echt gut. Damit kann man echt extremst viel ganz einfach umsetzen.


    Ich bin ja manchmal regelrecht erschüttert, wenn einfach verstanden wird, was ich von mir gebe.Ich rechne sonstwie mit Nachfragen, aber (wie's aussieht) - du setzst einfach um, was ich sage


    so solls doch sein ^^
    ich bin ja lernfähig :rolleyes:
    @ErfinderDesRades Nicht ganz. Wie ich schon sagte handelt es sich um das DevExpress DataGrid. Im gegensatz zum Standard Winforms Grid, kann man hier eben per Drag'n'Drop Gruppieren, Sortieren und Suchen, und das ohne auch nur eine Zeile Code dafür zu schreiben. Zudem siehts noch nen bischen schöner aus als das Alte, und passt sich, sofern man ein DefaultLookAndFeel Objekt benutzt, dem Stil der Anwendung nahtlos an. Damit ist man voll in der Mode :P

    EaranMaleasi schrieb:

    Im gegensatz zum Standard Winforms Grid
    Darauf spiele ich ja an.
    Bis 2005 gab war das DataGrid das Standard-Control zur Anzeige von DataTables. 2005 haben sie DataGridView eingeführt, bei dem (leider) die Darstellung von Relationen direkt des Grids nicht mehr unterstützt wird.
    Das DataGrid ist (wg. Abwärts-Kompatibilität) noch immer im Framework enthalten, nur nutzt es niemand mehr.
    ​Darauf spiele ich ja an.Bis 2005 gab war das DataGrid das Standard-Control zur Anzeige von DataTables. 2005 haben sie DataGridView eingeführt, bei dem (leider) die Darstellung von Relationen direkt des Grids nicht mehr unterstützt wird.Das DataGrid ist (wg. Abwärts-Kompatibilität) noch immer im Framework enthalten, nur nutzt es niemand mehr.


    Interesannt zu wissen. Dennoch kann das Grid von Devexpress weit mehr und wenn meine Firma das Paket ohnehin kauft hat es keinen Sinn das DataGrid bzw das DataGridView zu nutzen.

    Dennoch ist es gut das zu wissen das im Framework auch ein Control drin ist, das ebenfalls Relationen darstellen kann