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

Komma separierte Liste oder viele Spalten?

Dieses Thema im Forum "Allgemeine Diskussionen" wurde erstellt von dario91, 14 März 2015.

  1. dario91

    dario91 Neuer Benutzer

    Hallo Experten!

    Bei meinem Datenbankdesign komme ich nicht weiter. Folgendermaßen sieht es aus:
    Ich habe eine Tabelle 't_object', die eben einige Spalten hat, u.a. auch die Spalte 'properties'. In dieser Spalte properties stehen derzeit mehrere Werte, die von einem Komma getrennt werden, z.B. '5,6,13'. Aufgelöst werden diese Werde dann durch eine Tabelle names 't_object_properties', bei der die id eben den Werten aus der Liste entspricht.

    Jetzt habe ich mal gehört, dass man nicht mehrere Werte in einer Spalte haben sollte, also keine von Kommas getrennte Liste. Um das zu umgehen, müsste ich der Tabelle 't_objects' viele neue Spalten hinzufügen und die die Spalte 'properties' entfernen. Die ganzen neuen Spalten würden dann nur einen bool'schen Wert enthalten, der eben angibt, ob diese Eigenschaft vorhanden ist, oder eben nicht.

    Meine Frage ist nun, was aus Perfomancegründen die bessere Wahl ist.
    1. So wie bisher, mehrere Werte in einer Spalte und diese mit Kommas getrennt. Aufgelöst werden diese Werte durch eine separate Tabelle.
    2. Viele zusätzliche Spalten in der Tabelle 't_object'. (Dabei handelt es sich um ca. 30 zusätzliche Spalten, weil es eben ca. 30 verschiedene Eigenschaften gibt, die ein Objekt haben kann, oder nicht.

    Was empfiehlt ihr mir?

    Liebe Grüße,
    Dario
     
  2. akretschmer

    akretschmer Datenbank-Guru

    Nach der reinen Lehre keine der beiden Lösungen, sondern eine extra Tabelle, die zu jedem Objekt die Eigenschaften enthält.
    Alles andere ist in normalen Datenbanken Murks.

    Solltest Du mit PostgreSQL arbeiten, könntest Du aber auch quasi bei Deinem Design bleiben, aber die Eigenschaften dann entweder als HSTORE oder als JSONB ablegen. Das ist ziemlich cool.
    Aber Komma-Listen geht gar nicht, und wenn Du viele mögliche Attribute hast, die zudem auch noch zunehmen können, geht das auch mit den Spalten nicht.
     
  3. dario91

    dario91 Neuer Benutzer

    Danke für die schnelle Antwort, akretschmer!

    Wie kann ich mir die neue extra Tabelle vorstellen? Für mich klingt das so, als würde ich damit die Tabelle 't_object' einfach nur teilen.

    Ich gebe ein Beispiel:
    Im Moment habe ich ja die Tabelle 't_object' mit ca 15 Spalten. Die Spalte 'object_id' sei der PRIMARY KEY. Desweieteren existiert die Spalte 'properties', die von ca. 30 einzelnen propertie-Spalten ersetzten werden soll. Und anstatt diese weiteren 30 Spalten hinzuzufügen, soll ich eine extra Tabelle anlegen, in der diese 30 Spalten stehen und eine weitere Spalte 'object_id', die wiederum der PRIMARY KEY sein soll?

    (Es handelt sich um eine MySQL Datenbank)
     
  4. akretschmer

    akretschmer Datenbank-Guru

    Code:
    test=*# create table properties(id int primary key, name text);
    CREATE TABLE
    Time: 49,555 ms
    test=*# insert into properties values (1, 'eigenschaft 1');
    INSERT 0 1
    Time: 0,574 ms
    test=*# insert into properties values (2, 'eigenschaft 2');
    INSERT 0 1
    Time: 0,168 ms
    test=*# create table objekte (id int primary key, name text);
    CREATE TABLE
    Time: 7,245 ms
    test=*# insert into objekte values (1, 'objekt 1');
    INSERT 0 1
    Time: 0,429 ms
    test=*# insert into objekte values (2, 'objekt 2');
    INSERT 0 1
    Time: 0,170 ms
    test=*# create table objekt_prop (id_objekt int references objekte, id_prop int references properties, primary key(id_objekt, id_prop));
    CREATE TABLE
    Time: 36,589 ms
    test=*# insert into objekt_prop values (1,1);
    INSERT 0 1
    Time: 17,561 ms
    test=*# insert into objekt_prop values (2,2);
    INSERT 0 1
    Time: 0,356 ms
    
    Ich auch. Siehe oben.

    Mein herzliches Beileid.
     
  5. dario91

    dario91 Neuer Benutzer

    Achsooo. Das wird dann strukturiert, wie ein n zu m Beziehung! Danke! Jetzt habe ich das verstanden.
    Wundert mich jetzt im ersten Moment schon ein bisschen, weil es ja eigentlich keine n zu m Beziehung ist. Aber das wird so schon Sinn machen.

    Vielen Dank noch mal für diese Hilfe!! :)
     
  6. Hony%

    Hony% Datenbank-Guru

    Was denn sonst? ;)
     
    akretschmer gefällt das.
  7. Distrilec

    Distrilec Datenbank-Guru

    Magie...
     
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