Andreas Korthaus: Tabellenstruktur

Beitrag lesen

Hi!

Mit dieser Struktur habe ich sehr kurze SQL-Statements. Es kann zu sehr vielen NULL-Feldern kommen,

das ist eigentlich nicht schlimm, wenn auch nicht besonders schön. NULL nimmt nicht viel Platz weg, udn bei 5000 Datensätzen sollte sowas egal sein. Trotzdem würde ich es anders machen, kommt aber drauf an wie Du das später verwenden willst. Ich würde das z.B. so machen:

tbl_dateien
  dat_id        MEDIUMINT PRIMARY KEY
  obj_id        MEDIUMINT
  typ           ENUM('gif', 'jpg', 'pdf')
  beschr        CHAR(128)

Ich würde den Namen gar nicht mehr speichern, da ich zumindest in meinen Projekten befürchte dass verschiedene Dateien denselben Namen haben könnten, daher verwende ich nur die eindeutige ID als Namen und die Endung.

Jetzt könntest Du z.B. alle Grafik-Dateien von Objekt 1 abfragen mit

SELECT * FROM tbl_dateien WHERE obj_id = "1"

Dann kanst Du aus

echo $row['dat_id'].".".$row['typ'] den Dateinamen ausgeben. Ggfs. noch eine Beschreibung dazu.

Es ist nicht mit zu rechnen, daß ein weitere Dateiart hinzu kommt. Es ist davon auszugehen, daß die Tabelle nicht mehr als 5000 Datensätze bekommen wird, also nicht gerade viel.

genau, also würde ich mir um Performance wirklich keine Sorgen machen,  lege halt nützliche Indices drauf und es wird vollkommen ausreichen, egal welche Variante Du verwendest. Verwende die Variante die Dir am besten gefällt.

Als alternative Struktur habe ich mir folgende ausgedacht. Besteht fast nur aus dem Typ INT und Enum, also schnelle Spaltentypen und wenig Speicherplatz. Die eine VARCHAR-Spalte wird die Geschwindigkeit wieder runter ziehen.

Du brauchst aber keine varchar Spalte, CHAR tut es auch, udn wenn man mal den Speicherplatz ausrechnet, haben 5000 Datensätze CHAR(255) vielleicht 1 MB Speicherplatz, nicht wirklich viel.

Grüße
Andreas