1. Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm
    Information ausblenden

Ähnliche Entitäten in eine Tabelle? (Anfängerfrage)

Dieses Thema im Forum "Datenmodellierung, Datenbank-Design" wurde erstellt von FestlA, 25 Juni 2018.

  1. FestlA

    FestlA Benutzer

    Moin Moin,

    ich habe bis jetzt immer nur kleine Projekte, mit geringer Komplexität erstellt.
    Dieses mal muss ich eine etwas größere Anwendung planen, in der unter anderem Geräte inventarisiert werden.
    Das können beispielsweise Router, Server, SAN, NAS, Drucker und mehr sein.
    Ich würde für jedes Gerät eine eigene Tabelle erstellen. Nun ist allerdings die Frage aufgekommen, ob es nicht eine Möglichkeit gibt, eine Tabelle für viele ähnliche Geräte zu nutzen. Zusätzlich soll der Benutzer später Felder anlegen können, die vorher noch nicht bekannt sind. (z.B. Geräteart)

    Gibt es da Empfehlungen, Beispiele oder Regeln, wie man mit solchen Dingen umgeht oder sollte man den Gedanken direkt verwerfen/abschmettern?
    Für mich hört sich das nach "Wir sparen uns die Planung und machen einfach alles Flexibel an".

    Grüße
    af
     
  2. Dukel

    Dukel Datenbank-Guru

    Du meinst sicher pro Gerätegruppe eine Tabelle.

    Ja es gibt die Möglichkeit unterschiedliche Felder für ähnliche (oder sogar alle (!)) Geräte zu definieren und damit alle Geräte in eine Tabelle zu speichern.
    Du kannst zum einen eine spezielle Tabelle erstellen (Objekt, Feld, Wert), welches du mit deinen Geräten (= Objekt) verknüpfst. (das hat auch einen Fachbegriff, den ich aktuell nicht weiß)
    Du kannst aber auch JSON Daten in einem Feld speichern und somit beliebige Feld-Wert Paare oder noch komplexere Informationen speichern.
     
    FestlA gefällt das.
  3. Walter

    Walter Administrator Mitarbeiter

    In meinen Augen ist es Irrsinn, für jede Geräteart eine eigene Tabelle zu definieren.

    Es gibt ja eine grössere Anzahl an Gemeinsamkeiten, die alle Gerätearten teilen - und wenn ich darüber eine Auswertung machen will oder in der Anwendung darauf zugreifen, dann muss ich jedesmal 20 verschiedene Tabellen berücksichtigen? Alptraum.

    Denk an einen Webshop der Elektronik und Computer verkauft. Glaubst Du wirklich, dass nur weil ein Staubsauger andere Eigenschaft besitzt als ein PC (zumindest noch teilweise :D ), dass für hunderte Artikelarten jeweils eigene Tabellen angelegt werden?
     
  4. FestlA

    FestlA Benutzer

    Deswegen frage ich! ;-)
    Könnte mir das vorstellen wie bei der Adressverwaltung am Handy. Da kann ich Felder hinzufügen und entfernen.
    Etwa, Geräte-Tabelle mit allgemeinen Felder und dann eine weitere Tabelle für die Eigenschaften, die je nach Gerät unterschiedlich sind. Die könnte der Benutzer dann auch selber anlegen.
    Jedes Gerät hat einen Namen, eine Seriennummer, ist einem Standort zugeordnet und hat zusätzliche Eigenschaften, je nach Art.

    Geräte
    id
    Name
    Standort_id (Fremdschlüssel)
    Seriennummer
    Eigenschaften_id (Fremdschlüssel)

    Eigenschaften
    id
    Name
    Wert

    Ich hoffe das ist verständlich.
     
  5. akretschmer

    akretschmer Datenbank-Guru

    über was für Datenmengen reden wir?

    völlig fail.

    Du willst nicht in größeren Tabellen später dynamisch neue Felder anlegen. Wenn Dein Projekt mit dieser Designentscheidung jetzt startet, ist es bereits jetzt gescheitert.

    Ich kommen in weiteren Antworten noch auf die möglichen Optionen zu sprechen...
     
  6. akretschmer

    akretschmer Datenbank-Guru

    EAV

    ACK. Das ist das, was ich auch empfehlen würde. Und mit passenden Datenbanken kannst Du diese Felder auch indexbasiert - und damit schnell - durchsuchen.
     
    FestlA gefällt das.
  7. akretschmer

    akretschmer Datenbank-Guru

    Ja, ist es. Ich hoffe, Du siehst den Fehler selber.

    Falls nein: Du kannst so nur 1 Eigenschaft je Gerät definieren. Mehr nicht.
     
    FestlA gefällt das.
  8. FestlA

    FestlA Benutzer

    Au, gleich nen Schnellschuss ins Knie!

    Geräte
    id
    Name
    Standort_id (Fremdschlüssel)
    Seriennummer

    Eigenschaften
    id
    Geräte_id (Fremdschlüssel)
    Name
    Wert

    so schaut es besser aus?!


    Danke auch für "EAV", so ein Schlagwort habe ich gesucht!
     
  9. akretschmer

    akretschmer Datenbank-Guru

    Ja, besser. EAV-Modell. Zwar oft genutzt, aber auch nur, wenn man nix besseres findet und/oder die DB nix besseres kann.
     
  10. FestlA

    FestlA Benutzer

    Bin zuerst bei "Die Erste Allgemeine Verunsicherung (EAV) ist eine österreichische Pop-Rock-Band, die 1977 gegründet wurde" gelandet.
    Hab mir gedacht, das ist es nicht.
    In Verbindung mit Datenbank spuckt Google aber einiges zu lesen aus.
    Danke Euch!

    Nachtrag: "Größeres Projekt" bedeutet in meinem Fall keine 1000 Geräte. ;-)
     
  11. akretschmer

    akretschmer Datenbank-Guru

    ach wie niedlich ;-)

    Unabhängig davon könnte man es auch da schon gleich vernünftig machen und die Nachteile von EAV vermeiden.
     
  12. FestlA

    FestlA Benutzer

    Noch bin ich in der komfortablen Situation, dass ich das mit entscheiden kann.
    Hast Du ggf. noch einen Tipp, was ich mir anschauen sollte?
    Es mangelt am Wissen, nicht an der Motivation es gut zu machen.

    Ich erinnere mich, dass unser Lehrer uns früher davon abgeraten hat. Widerspricht das dann nicht dem eigentlichen System, dass ich ein Feld für einen eindeutigen Wert nutze.
    Manchmal ist ggf. die nicht perfekte Lösung (EAV) besser als eine, deren Vorteile man nicht versteht.
     
  13. akretschmer

    akretschmer Datenbank-Guru

    Wurde schon genannt, Key-Value-Store oder JSON. In PostgreSQL ersteres via HSTORE-Datentyp, zweiteres via JSONB (das B steht für binary). Das mag gegen 'die heilige Kuh' verstoßen, je Feld nur ein Merkmal zu speichern - funktioniert aber super. Achte aber darauf, daß die DB das auch wirklich richtig kann - sprich indexbasiert in solchen Feldern suchen kann.
     
    FestlA gefällt das.
  14. FestlA

    FestlA Benutzer

    Dann habe ich jetzt ordentlich was zu recherchieren!
    Danke Euch und einen guten Start in die Woche!
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden