Ich bin gerade dabei ein Datenbankkonzept (neu) zu entwerfen, wobei es um das Archivieren von Dateien (Bilder, PDF-Dokumente, Videos, …) geht. Diese werden in einer Tabelle tbl_files gespeichert. Es gibt insgesamt 5 verschiedene Medientypen, zwei davon sollen nun zusätzliche Attribute aufnehmen können - und zwar beliebig viele (eventuell auch kar keine).
Bislang habe ich zu diesem Zweck eine Tabelle tbl_attributes angedacht, die folgendermaßen aussieht:
[SQL]INTEGER attribute_id PRIMARY KEY AUTOINCREMENT --Autoindex
TINYINT type --Attributtyp; 0=Technologie, 1=Maschinenkomponenten
VARCHAR(25) attribute --Bezeichnung[/SQL]
Ich stehe nun vor dem Problem, wie ich die Attribute mit den Dateien aus der tbl_files am besten in Beziehung setzen kann. Eine Möglichkeit wäre aus meiner Sicht die Einführung einer zusätzlichen Tabelle in der jeweils die ID einer Datei und die eines bestimmten Attributs aus der tbl_attributes gespeichert wird. Aber ich weiß nicht ob das die optimale Lösung ist.
Wär spitze wenn von euch jemand eine bessere Idee hätte
Deine Lösung wie du sie machen wolltest ist die schönste Lösung, ich würde dir nur eins raten schreib deine Tabellen etwas anders.
[sql]typ name attribute --kommentar[/sql]
Das ist schöner zu lesen
Du hast wohl recht, ich hab es jetzt auch so umgesetzt. Meine Bedenken waren nur bei der Umsetzung, allerdings habe ich gestern noch den ultimativen SQL-Befehle gefunden:
[sql]SELECT * FROM tbl_files WHERE file_id IN( SELECT file FROM tbl_attr_ref WHERE attribute IN(?,…) );[/sql]
Ich wusste vorher gar nicht, dass sowas überhaupt geht
@EagleEye
Dein SQL-Code will mir nicht ganz einleuchten.
@The_S
Ich bin leider nicht sonderlich erfahren in SQL (kenn nur ein bisschen die Basics mit MySQL aus der PHP-Programmierung). Was sind JOINs und wie würde man sie in diesem Fall am besten anwenden?
ach das sind nur Wackennachwirkungen :D::rock
Du machst dort eine Abfrage auf die Tabelle t, die aber auch nur eine SQL Abfrage ist. Diese innere Abfrage könnte jetzt auch noch viel komplexer sein.
[ot] Ich würde nach so langer Zeit nicht den letzten Post editieren, sondern einen neuen machen. Sonst fällts keinem Schwein (außer Revenant ) auf, dass sich da noch was geändert hat [/ot]
Zum auslesen eines ResultSet habe ich ja (ua) zwei Möglichkeiten: getString(int) und getString(String)
Ist davon auszugehen, dass die erstere Methode schneller ist, da nicht erst zwei Strings miteinander verglichen werden müssen? Oder spielt das bei HashMaps (die vermutlich intern verwendet werden) eh keine Rolle?
Es ist davon auszugehen, dass du immer die “getXYZ(String)” Methode verwenden solltest. Alles andere macht deinen Code unlesbar, fehleranfällig und nur schlecht erweiterbar.