Liebe Mitdenker,
liebe Wissende,
liebe Neugierige,
ja!
hi,
Wenn es keine Ausnahemregeln für Indexe gibt bei MySQL (ich kenne sowas von anderen DBMS: bdeingte Aufnahme in den Index), dann scheint mir der schmerzloseste Weg zu sein, den Insert- und den Update-Trigger anzupassen. Die Trigger-Exceptions werde ich gegenüber dem Client nicht durchreichen. Dann hat es eben mal nicht funktioniert. Aber es gelangen keine fehlerhaften Daten mehr in die Tabelle.
Auch wenn Du schon eine Lösung hast: Am Einfachsten wäre eine zentrale Verwaltung des Dateiname(FS) + Linkname(DB) für die neuen Einträge. Zum Beispiel fortlaufende und eindeutige Nummern, evntl. die ID eines Benutzer-Profils. Den Image-Type (gif, jpeg, png...) kann der Browser feststellen (sofern die Images von daher reinkommen).
Prinzipell eine gute Idee, zumal sich das dann im Reich meiner Anprogrammierung abspielen würde.
Allerdings kann ich die Message-ID beim Insert nicht voranstellen, da zuerst das File erzeugt werden muss und dann anschließend erst der Datensatz geschrieben werden kann. Man könnte natürlich so eine Krücke mit next_insert_id() bauen (ich weiß jetzt nicht, wie das bei MySQL genau heißt). Die wird aber in den Scheme-Daten vorgehalten. Die könnte man dem Dateinamen voranstellen. Dann könnte es tatsächlich keine doppelten Einträge mehr geben.
Die next_insert_id() müsste aber sowieso die Datenbank beim Insert erzeugen wegen der atomaren Kapselung. Und somit kann ich das File nicht vorher anlegen und müsste darauf vertrauen, dass der Name im Filesystem auch nicht exisitert. Man dreht sich im Kreis. Das ist der Fluch von Redundanzen. Es könnte immer noch Files geben, die aber in der DB nicht mehr oder noch nicht wieder drinstehen.
Die Wahrscheinlichkeit, dass ich eine vorhandene Session-ID treffe habe ich durch eine andere Länge des Namens unterbunden. (Zur Erinnerung: die Upload-Cache-Dateien befinden sich im Session-Verzeichnis, damit sie mit aufgeräumt werden können.
Da es mit den Triggers nun schon funktioniert (der Update-Trigger hat mir erst noch einen Streich gespielt), schreibe ich mir diese Idee mal auf den großen Ideenzettel. Ich werde nochmal darauf zurückkommen. Trivialnamen können aufgrund der hohen Kollionswahrscheinlichkeit sowieso nicht benutzt werden für das Dateisystem und die Spalte in der DB. Dafür findet auch eine Übersetzung statt. Der zugehörige Trivialname / zukünftige Downloadname wird sowieso in einer eigenen Spalte verwaltet.
Spirituelle Grüße
Euer Robert
Möge der Forumsgeist wiederbelebt werden!