Zitat von
DJ-SPM:
... Kann ich in einem Datensatz auch mehrere Dateianhänge in das BLOB-Feld "Anhang" eintragen?
Hai DJ-SPM,
im Prinzip geht das natürlich. Du müsstest die Daten dann vorher in einen Stream schreiben und vor jedem "Datenblock" dessen Länge (Als INT64) eintragen.
Code:
Daten-Stream
100
[i]Daten[/i]
10578
[i]Daten[/i]
78
[i]Daten[/i]
Aber ich würde das nicht machen
Die BLOBs würde ich in einer eigenen Tabelle abspeichern. Da der Anwender die Daten aus dem BLOB-Feld sicher nicht immer braucht sparst Du so eine riesen Menge an Datentransfer.
Ein Beispiel: Du hast 1000 Datensätze. In jedem Datensatz ist ein BLOB-Feld mit 10 kByte an Daten. Wenn Du nun ein
SELCT * FROM tabelle
machst hast Du schon einmal mindestens 10 MB an Daten die vom Server zum Client übertragen werden müssen.
Jetzt stellt sich nur die Frage ob die Daten aus einem BLOB-Feld immer nur zu einem Datensatz gehören oder ob sie auch zu verschiedenen gehören könnten.
Im ersten Fall brauchst Du nur eine extra Tabelle für die BLOBs
Code:
Haupt_Tabelle:
--------------
id : integer (autoinc), PK
blubb : varchar(10)
meow : DateTime
Blobb_Tabelle:
--------------
id : integer (autoinc), PK
fk_haupt_tabelle_id : integer
anhang : blobb
Die Einträge der
Blobb_Tabelle verbindest Du jetzt einfach über das Feld
fk_haupt_tabelle_id mit dem PK der Haupttabelle. Somit kannst Du beliebig viele BLOBs mit
einem Datensatz der Haupttabelle verknüpfen. (1:n Relation).
Wenn Du
ein BLOBB mit
verschiedenen Datensatzen der Haupt-Tabelle verbinden möchtest (n:m Relation) brauchst Du eine dritte Tabelle:
Code:
Haupt_Tabelle:
--------------
id : integer (autoinc), PK
blubb : varchar(10)
meow : DateTime
Blobb_Tabelle:
--------------
id : integer (autoinc), PK
anhang : blobb
Haupt_Blobb_Tabelle:
--------------------
fk_haupt_tabelle_id : integer
fk_blobb_tabelle_id : integer
Zitat:
PS: Wo ist der Unterschied zwischen den Blob-Feldern (LongBlob, Blob etc.)
- *
- TINYBLOB / TINYTEXT
Eine BLOB- oder TEXT-Spalte mit einer maximalen Länge von 255 (2^8 - 1) Zeichen.
- BLOB / TEXT
Eine BLOB- oder TEXT-Spalte mit einer maximalen Länge von 65535 (2^16 - 1) Zeichen.
- MEDIUMBLOB / MEDIUMTEXT
Eine BLOB- oder TEXT-Spalte mit einer maximalen Länge von 16777215 (2^24 - 1) Zeichen.
- LONGBLOB / LONGTEXT
Eine BLOB- oder TEXT-Spalte mit einer maximalen Länge von 4294967295 (2^32 - 1) Zeichen.
Bei einem Longblob ist zu beachten das (zumindest bei
mySQL 3) das Client-Server-Protokoll und MyISAM-Tabellen momentan
eine Beschränkungen auf 16 MB pro Kommunikationspaket / Tabellenzeile haben.
(*Quelle: Meine
mySQL-Dokumentation)
Stephan B.
"Lasst den Gänsen ihre Füßchen"