Vinzenz Mai: primärschlüssel "resetten"??

Beitrag lesen

Hallo

Nein, ich bemühe mich schon, zwischen den Zeilen zu lesen - und bestehe nicht auf der Auslegung exakt nach dem Wort.

Anforderungen aufnehmen kann auf ein Lesen in Teerückständen hinauslaufen.

ich mag keinen Tee.

Ich habe die Sache nur thematisiert, weil es mir 1.) hinreichend wahrscheinlich schien, dass der Anfordernde ein permanentes benutzerfreundliches Identifikationssystem wünscht und 2.) weil dieses ein kontroverses Thema ist. Viele ITler mögen solche benutzerfreundliche Identifikationssysteme nicht und dann wird in der Diskussion "geholzt". Dass ich benutzerfreundliche Identifikationssysteme für selbstverständlich halte, dürfte klar geworden sein. :)

Huch, wo habe ich geholzt? In meinem ersten Posting? Als fast gleichlautend zu Sven sagte, dass das Verhalten von Datenbankmanagementsystemen in meinen Augen sinnvoll ist? Als ich dort erwähnte, dass es je nach Umfeld weitere Möglichkeiten gibt? Ich dazu aber genauere Angaben haben müsste?

Wenn es darum gehen sollte, den neuen Namen für das neue Bild zu finden, dann muss die Anwendungslogik verschiedene Fälle betrachten, die im Ausgangsposting nicht erwähnt sind:

Einfügen, die leichte Operation:
Einfügen ist selbstverständlich nur am "Ende" möglich. Soll nur ein neues Bild in die Galerie eingefügt werden, so ist es natürlich Unsinn, Daten aller relevanten Datensätze abzufragen, eventuell sogar bequem mit SELECT * FROM ..., die Daten anzufordern - und wegzuwerfen. Für soetwas gibt es COUNT().

Löschen, die schwierige Operation:
Ist es möglich, ein Bild zu löschen. Wenn ja, müssen innerhalb einer Galerie die Bilder umbenannt werden. Dazu wäre mein Statement als Ansatz brauchbar. Wie Rouven bereits schrieb, wären in einem solchen Fall Trigger durchaus nett. Ich weiß allerdings nicht, wie man die Race Condition zwischen Umbenennen der Dateien, Ändern der Links und Ändern in der Datenbank vermeiden kann. Man könnte sie als unvermeidbar für einen sehr kurzen Zeitraum hinnehmen. Mein Schluss lautete im Anwendungsfall jedoch: verzichte auf das Umbenennen, akzeptiere dass generierte Namen "Lücken" aufweisen.
Die Alternative: Bilder werden nicht gelöscht.

Kannst Du das akzeptieren? Oder verstehst Du hier bereits "Bahnhof"? Ich erkläre es an einem Beispiel:

1. Derzeit sind 85 Bilder in der Galerie.
2. Es wird ein neues Bild hinzugefügt,
   somit bekommt es die Nummer 86 als Suffix im Dateinamen.
3. Bild 47 wird gelöscht.
4. Es wird ein neues Bild hinzugefügt.
   Gleich, welche Methode man anwendet, als Suffix wird
   wieder die Nummer 86 ermittelt. O weh! Ein doppelter
   Dateiname.

Um dieses Problem beim Löschen zu umgehen - und um keine Lücken entstehen zu lassen, müssen somit nach Schritt 3 alle Bilder nach Bild 47 umbenannt werden. Ich gehe davon aus, dass die Bilder als Datei vorliegen und nicht in der Datenbank gespeichert sind, nur der Dateiname (inklusive Pfad). Du solltest leicht erkennen, dass Löschen die aufwendige Operation ist. Hier muss alles angepasst werden.

Ich persönlich finde nicht, dass durchnumerierte Bilder wirklich benutzerfreundliche Namen tragen. Meine persönliche Ansicht von Benutzerfreundlichkeit sieht anders aus; ich fürchte, dass meine Vorstellung von benutzerfreundlichen Namen mit Handarbeit verbunden ist; diese darf man bei Galerieskripten dem Anwender weder zumuten noch überhaupt erlauben. So landet man aus praktischen Erwägungen doch bei generierten Namen :-(

Jetzt verstehe zur Abwechslung mal ich "Bahnhof".

Vielleicht sollte ich es nochmals klarstellen: Irgendwelche Numerierungen halte ich nicht für benutzerfreundlich, egal ob diese lückenlos oder lückenbehaftet sind. Ich kenne von vielen Menschen ihren Wohnort, die Straße, in der sie wohnen - aber nicht die dazugehörende Postleitzahl. Genausowenig finde ich Bildbezeichnungen der Form

galeriethema_galerieunterthema_galerienummer_bildnummer

für irgendwie benutzerfreundlich. Ich mag Bildnamen, die mir im Klartext sagen, was ich auf dem Bild sehe; ich mag Bildnamen mit Leerzeichen; ich mag Bildnamen in Groß- und Kleinschreibung - es ist schon schlimm genug, dass ich gewisse Zeichen nicht verwenden darf, weil das Dateisystm mir diese verbietet.

Quiberon, Blick auf Belle Ile im Abendrot.jpg

oder etwas in dieser Art. Das finde ich benutzerfreundlich. Nicht Nummern, Themen und ähnlicher Kram, der zu interner Strukturierung nötig ist - und oft wenig, zu wenig über den Inhalt aussagt. Ja, ich weiß, dass solche Namen für Galerieskripte ziemlich ungeeignet sind. Ja und?

Urlaub_Bretagne_17_86.jpg

ist für mich genausowenig benutzerfreundlich wie

Urlaub_Bretagne_17_85.jpg (weil gerade ein Bild gelöscht wurde)

  • Was spricht gegen ein neues Datenfeld mit auto increment, darauf sitzenden Index (für die Eindeutigkeit) und einer am RDBMS angesiedelten Logik, die transaktional für das Fortlaufen des auto increment-Wertes sorgt?
    (Wenn sich jetzt herausstellen sollte, dass es kein Datenbank-Problem ist, dann werde ich aber grün im Gesicht. ;)

Mehr als ein auto_increment-Wert (oder serial oder identity ...) je Tabelle ist bei handelsüblichen DBMSen unüblich. Es ist auch überflüssig. Du möchtest sauber durchnumerieren. Wo ist das Problem? Wie es genau zu lösen ist, das hängt vom vorliegenden DBMS ab. Bei MySQL sind die Möglichkeiten je nach Version beschränkt bis extrem beschränkt, bei einem anderen DBMS kannst Du fast im Luxus schwelgen. Was ist denn zu tun?

  • neue Namen ermitteln
  • Tabelle updaten
  • Dateien umbenennen
  • Links aktualisieren

Bei MS SQL Server könntest Du diese Aufgaben z.B. mit einem Trigger erledigen, eine entsprechende Konfiguration (bis SQL Server 2000 Standard) vorausgesetzt. Wie Christian schrieb, ginge das bei Oracle nicht. Grundsätzlich bin ich der Ansicht, dass es keine gute Idee ist, das Umbenennen der Dateien dem DBMS zu übertragen, das ist in der API besser aufgehoben - selbst dann, wenn es möglich wäre. Ich weiß ehrlich gesagt auch nicht, was bei einem Rollback der Transaktion nach Umbenennen der Dateien passierte. Nein, ich würde es nicht so machen. Somit käme man zu

  • neue Namen ermitteln

  • Tabelle updaten

und anschließend

  • Dateien umbenennen.
  • Links aktualisieren

Letzte beiden Aktionen mit Dateilocks absíchern (Dateien sogar für Lesen sperren) und zu einer bekannt zugriffsarmen Zeit durchführen. Ja, ich sehe massive technische Probleme, nur um Namen zu erhalten, die ich persönlich - ja es ist meine persönliche Meinung - kein bißchen benutzerfreundlicher halte als andere Namen, die ich problemlos erhalten kann.

Vielleicht verstehe ich aber auch die Problematik überhaupt nicht oder wir reden aneinander vorbei. Nichts ist unmöglich ...

Freundliche Grüße

Vinzenz