Datenbankdesign und hierarchische Struktur

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

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von 100Volt.

    Datenbankdesign und hierarchische Struktur

    Ich bin mir bei meinem Datenbankdesign gerade etwas unschlüssig, ob das wirklich so ok ist.

    Die mySQL-Datenbank liegt auf einem Webserver. Es gibt viele Standorte (Gebäude), in denen jeweils ein PC steht, an den Geräte aus diesem Gebäude Meßdaten melden.

    Die Standorte sind unternehmerische Betriebsstätten. Je nach Unternehmensgröße gibt es eine (mehrstufige) hierarchische Struktur (z.B. Konzern, Gesellschaft, Niederlassung, Bezirk, Standort). Da alle Objekte (Konzern, Gesellschaft, Niederlassung, Bezirk, Standort) über Büroräume, Adresse, Telefon verfügen, möchte ich sie allesamt in einer Tabelle speichern.

    Die Idee ist nun für die Objekteverwaltung drei Tabellen anzulegen:

    tblObjekte
    colID_Objekt
    colID_ObjektKategorie
    colName
    colOrt
    colTelefon

    tblObjektKategorien
    colID_ObjektKategorie
    colBezeichnung
    colOrdnungsindex

    tblObjektZuordnung
    colID_ObjektZuordnung
    colID_Objekt
    colID_Objekt_Parent

    In der Tabelle tblObjekte stehen die Eigenschaften des Objektes. Jedes Objekt hat einen eindeutigen Schlüssel colID_Objekt. In colID_ObjektKategorie ist die Art/Kategorie (Niederlassung, Bezirk etc.) festgelegt. Es gibt immer einen Eintrag colName="Root" mit colID_Objekt = 0.

    In der Tabelle tblObjektKategorien ist über colOrdnungsindex die hierarchische Struktur (z.B. Konzern, Gesellschaft, Niederlassung, Bezirk, Standort) abgebildet

    In der Hilfstabelle tblObjektZuordnung steht für jedes Objekt (colID_Objekt) das übergeordnete Objekt (colID_Objekt_Parent).


    Taugt das soweit was oder mache ich einen Denkfehler?
    --------
    Lieber inkompetent als inkontinent
    zunächstmal würde ich dir dringend empfehlen, nochmal meine englischen Tuts durchzugehen, im zweiten Tut gehe ich ausführlich auf sinnvolle Benamung ein.

    Das typDataset erstellt zig Klassen, Methoden, Events aus den Namen, wie sie vorgegeben sind, also sowas

    VB.NET-Quellcode

    1. dim rwtblObjektKategorien = myDataset.tblObjektKategorien.AddtblObjektKategorienRow()
    2. rwtblObjektKategorien.colBezeichnung = "Walter"
    tut doch nur weh.
    Viel angenehmer:

    VB.NET-Quellcode

    1. dim rwKategorie = myDataset.ObjektKategorie.AddObjektKategorieRow()
    2. rwKategorie.Bezeichnung = "Walter"
    Sind noch viele andere Unebenheiten drinne, also den Artikel wirklich zu Gemüt führen und zu Herzen nehmen.

    Sonst endest du iwann bei sowas:

    VB.NET-Quellcode

    1. Dim rwtblObjekte = rwtblObjektKategorien.GettblObjekteRows.FirstOrDefault(Function(rwrtblObjekteRow As tblObjekteRow) rwrtblObjekteRow.tblObjektZuordnungRow.colID_Objekt_Parent = 25)




    Weiters wäre ein Bildle viel sinnvoller, um drüber zu sprechen. Am einfachsten Foto vom Dataset-Designer, noch hübscher siehts aus, wenn du son INet-Tool verwendest - guck mal auf diese Post: Mitgliederverwaltung - Hilfe bei der Erstellung sauberen Codes
    Dort in dem Thread ist auch iwo das Inet-tool verlinkt.
    ABer wie gesagt: Dataset-Designer reicht auch.

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „ErfinderDesRades“ ()

    ErfinderDesRades schrieb:

    Dort in dem Thread ist auch iwo das Inet-tool verlinkt.

    Hier ist der Link - ich nutz' das Tool immer, um mir nen Plan zu machen, bevor ich in der eigentlichen Anwendung rumpfusche.
    Zum Thema Benamung hatte ich ja auch schon meinen Senf dazu gegeben. tblTabellenname ist unnötig - du weißt doch auch ohne tbl, dass es sich um eine Tabelle handelt.
    Dann singular benamen statt tblObjekte -> Objekt weil pro Row in der Table ist es ja nur ein Objekt.

    Und statt colColumnname -> ColumnName reicht aus. Das mit den ID-Benennungen hatten wir ja auch schon. Also statt ID_Kunden in der Objekt-Table, dann
    KundeID und in der Kunde-Table sollte die dann sinnvoll nur noch ID und nicht mehr Kunde_ID heißen.
    Am Ende musst du das wissen aber es sieht wesentlich sinnvoller aus und lässt sich im weiteren Code natürlich einfacher verwenden, wie Edr ja schon veranschaulicht hat.

    Edit: mal eben auf die Schnelle mit dem Tool gemacht:


    Das tool könnte auch SQL generieren - daraus könnte man sich was basteln, was die Tabellen und Beziehungen auch im DataSet hinzufügt.
    "Na, wie ist das Wetter bei dir?"
    "Caps Lock."
    "Hä?"
    "Shift ohne Ende!" :thumbsup:

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

    Das Tutorial habe ich gelesen.
    Die Tabellen heißen auch längst nicht mehr tbl... bei mir, die Primärschlüsselspalten nur noch ID und die Spalten noch nie col..., aber in so einer Liste wie hier fand ich es eindeutiger einen Präfix zu verwenden.

    Ich mache dann ein Bild...


    ----------------------- NACHTRAG -----------------------

    Hier ist der Ausschnitt aus dem DataSet-Designer:
    --------
    Lieber inkompetent als inkontinent

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „100Volt“ ()