Ich mache dieses Datenbankdesign-Zeug für ein System, wo ich einige Arrays variabler Länge in der MySQL-Datenbank speichern muss.
Die Länge der Arrays ist (höchstens) in Hunderten, wenn nicht Tausenden.
Es werden regelmäßig neue Arrays erstellt, vielleicht täglich zehn.
um zu verdeutlichen, 1. bedeutet grob
%Vor%und 2.
%Vor%Die arr_values werden als Arrays verwendet, die durch Verbinden mit einem vollständigen Array abgefragt werden. Irgendwelche Ideen, warum einige Ansätze besser sind als andere?
Wie bei allen Antworten auf diese Art von Fragen hängt es immer etwas davon ab, was Ihr Endergebnis sein muss, aber persönlich würde ich immer eine einzelne Tabelle gegenüber dynamisch erstellten Tabellen favorisieren - es macht viel einfachere Abfragen. Es macht es auch etwas einfacher (denke ich), wenn man sich das Datenbankschema anschaut - viele tausend Tabellen können das Finden der benötigten Daten beim direkten Zugriff auf die Datenbank ein wenig erleichtern.
Wenn Sie außerdem feststellen müssen, dass Sie Ihr "Array" irgendwann mit einem anderen Feld erweitern müssen, bedeutet dies, dass eine einzelne Datenbanktabelle geändert werden muss und nicht viele.
Viele Zeilen in wenigen Tabellen. Eine neue Tabelle für jede neue Struktur / jeden neuen Datensatz zu erstellen ist absolut falsch und der schlechteste Weg, eine relationale Datenbank zu verwenden.
In der Tat, fast immer, wenn Ihr Code Tabellen dynamisch erstellt, tun Sie etwas schrecklich, furchtbar falsch.
Es sieht so aus, als ob jedes Datenfeld ein eigenes Schema hat. Haben Sie überlegt, eine NoSQL-Datenbank zu verwenden? Es wird meiner Meinung nach viel einfacher sein, damit zu arbeiten.
Wenn Sie bei MySQL bleiben müssen, dann wollen Sie auf jeden Fall so wenige Tabellen wie möglich. Basierend auf dem, was Sie vorgestellt haben, könnten Sie eine Tabelle mit drei Spalten haben -
%Vor%Und wenn Sie mehrere Kopien desselben Arrays "type" benötigen, fügen Sie auch eine Instanzspalte hinzu.
Erhöhen Sie die Anzahl der Tabellen, bis das Schema normalisiert ist (sehr wenig oder keine Redundanz / Duplizierung). Erhöhen Sie nicht die Anzahl der Tabellen darüber hinaus und seien Sie vorsichtig beim Hinzufügen einer neuen Tabelle für die Leistung (moderne Datenbanken sind mit wenigen Ausnahmen schneller als Sie denken) oder bei Edge-Fällen, wie z die Lebensdauer der Anwendung oder für & lt; 1% der Zeilen.
Es wäre auch einfacher, Ihre Frage zu verstehen, wenn wir die Domäne der Frage kennen - sind diese Adressen, Kunden, Bücher oder was?
Tags und Links sql mysql database-design