Thema: Delphi Dateiahängemit BLOB

Einzelnen Beitrag anzeigen

Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.251 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Dateiahängemit BLOB

  Alt 22. Aug 2005, 07:03
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"
  Mit Zitat antworten Zitat