Gerald: Frage zu mysql5 / Aufblähen der Datenbank

Hallo,

Ich habe eine Tabelle mit Artikeln.

Jetzt möchte ich an diese Tabelle 3 zusätzliche Felder (also Spalten) anhängen.
Da nicht alle Artikel diese 3 zusätzlichen Felder benötigen, frage ich mich, ob ich diese dann einfach inhaltslos mitführen sollte oder aber eine neue Tabelle mit diesen 3 Feldern und der Artikel-ID anlege und anschließend über JOIN oder Subquery in den Abfragen verknüpfe.

Es geht um eine Tabelle mit ca. 50000 Artikeln.

Wie sollte ich sinnvollerweise vorgehen?

Die 3 zusätzlichen Felder sind 2 Tiny-Int und 1 Text - Feld.

Gerald

  1. Tach!

    Jetzt möchte ich an diese Tabelle 3 zusätzliche Felder (also Spalten) anhängen.
    Da nicht alle Artikel diese 3 zusätzlichen Felder benötigen, frage ich mich, ob ich diese dann einfach inhaltslos mitführen sollte oder aber eine neue Tabelle mit diesen 3 Feldern und der Artikel-ID anlege und anschließend über JOIN oder Subquery in den Abfragen verknüpfe.

    Mit den jetzigen Informationen kann das Vorhaben nicht aus fachlicher Sicht beurteilt werden.

    Es geht um eine Tabelle mit ca. 50000 Artikeln.
    Die 3 zusätzlichen Felder sind 2 Tiny-Int und 1 Text - Feld.

    Die machen das Kraut auch nicht fett. Es sei denn, dein Text-Feld enthält jeweils viele-megabyte-große Daten. Dann würde ich das MySQL-Handbuch nach Informationen zum Speicherverhalten solch großer Felder in der gewählten Storage Engine befragen.

    Wie sollte ich sinnvollerweise vorgehen?

    Du solltest zum Beispiel solche Fragen klären:

    • Was spielen diese Daten aus fachlicher Sicht für eine Rolle?
    • Lohnt sich deshalb ein Auslagern?
    • Wie handhabt sich diese Struktur im täglichen Betrieb? Die Felder mitzuführen ist vielleicht wartungstechnisch einfacher als ständig joinenden Code zu pflegen.

    dedlfix.

  2. ob ich diese dann einfach inhaltslos mitführen sollte oder aber eine neue Tabelle mit diesen 3 Feldern und der Artikel-ID anlege und anschließend über JOIN oder Subquery in den Abfragen verknüpfe.

    ... Was jeder Abfrage vermutlich deutlich mehr Last erzeugt als die für etliche der 50.000 Zeilen leeren Felder. Ein Ausnahme wäre womöglich gegeben, wenn- wie dedlfix goldrichtig ausführte -  die Textfelder
    sehr groß sein können. Ein paar Byte Text (vermutlich höchstens 2 Kilobytes) blähen hier kaum auf. Eine weitere Frage wäre die nach dem Index - sollen denn die Textfelder durchsuch- oder gar sortierbar bar sein? Wie auch immer: bei der heutigen Speicherausstattung dürften bei vergleichbaren Größenordnungen die 50.000 * x Bytes für eine Beschreibung (also wohl höchstens 2 Kilobytes) nur Speicher fressen, der auch reichlich da ist.

    1. Da fällt mir ein  Stein vom Herzen, weil es hinsichtilich Datenpflege wirklich wesentlich einfacher wird, die 3 Felder ein fach anzuhängen.

      Ich dachte aber, das würde einen der Normalisierungsgrundsätze widersprechen.

      Gerald

      1. Da fällt mir ein  Stein vom Herzen, weil es hinsichtilich Datenpflege wirklich wesentlich einfacher wird, die 3 Felder ein fach anzuhängen.

        Ich dachte aber, das würde einen der Normalisierungsgrundsätze widersprechen.

        Gerald

        Normalisieren kannst du, wenn du immer die gleichen Werte hast. Also quasi eine N:M Tabelle zu einer Anderen aufbaust die fixe Werte enthält, deren Inhalte von mehreren Artikeln benötigt werden.

        Dann müsstest du diese drei Felder (sofern Sie denn immer gleiche Inhalte enthalten), nur an einer Stelle Pflegen.

        Ansonsten wäre es keine Normalisierung, sondern lediglich auslagern von Feldern in andere Tabellen.

        Für solche dynamischen Spalten-Anzahlen-Probleme gibt es aber inzwischen einige NoSQL Datenbanken. Je nachdem was du machst, wären Sie evtl. ein paar Experimente Wert.

        Viele Grüße, Ch