Moin!
Ich bin dabei einen kleinen Buchshop zu modellieren (amazon-api).
In dieser Unique-Tabelle möchte ich eindeutige Buchtitel "sammeln" und eine mehrfach Erfassung vermeiden. Es ist zwar nicht die ganz saubere Lösung ("Mysql Duplikate Fehler") Aber dennoch die schnellste Möglichkeit ohne viele Prüfschleifen.
Ein eindeutiger und deshalb wesentlich besserer Schlüssel ist die ISBN-Nummer oder (wenn du schon auf Amazon bezug nimmst) die Amazon-Bestellnummer (sofern das was anderes ist, als die ISBN).
Mit dem Buchtitel hingegen würde ich keinesfalls eine UNIQUE-Tabelle machen. Wenn es die Erfasser mental überfordert, zuerst die ISBN einzugeben, damit dein System sehen kann, ob die schon erfaßt ist, dann sollte dein System eben die erfaßten Buchtitel ausgeben und dem Erfasser die Möglichkeit geben, nachzusehen, ob einer der möglichen Buchtitel schon erfaßt wurde.
Mit einem UNIQUE-Buchtitel handelst du dir nämlich mehr Probleme ein, als dir im Moment klar sein könnte.
Das fängt bei der Möglichkeit an, dass es Hardcover- und Taschenbuchausgaben desselben Werks gibt, die natürlich unterschiedliche Bücher sind, aber gewöhnlich den gleichen Titel haben. Das geht weiter mit der Möglichkeit unterschiedlicher Ausgaben desselben Buchtyps (der Duden beispielsweise oder auch Lexikons erscheinen in gewissen Abständen neu, behalten aber natürlich ihren identischen Titel), was zugegeben nur relevant ist, wenn man ein tatsächliches Archiv zu pflegen hat.
Und zu guter letzt gibt es schlicht auch die Möglichkeit, dass grundverschiedene Bücher einfach zufällig den gleichen Titel haben. Autobiographien beispielsweise werden oft "Mein Leben" genannt, was weder sonderlich kreativ noch sehr unterscheidungskräftig ist.
Aber weder das Erscheinungsjahr noch der Autorenname sind Bestandteil des Titels eines Buches und müßten, wenn all die genannten unterschiedlichen Bücher in deiner Datenbank eindeutig erfaßt werden sollen, von allen Erfassern immer in der gleichen Art und Weise, insbesondere in der identischen Schreibweise (vor allem, was diakritische Zeichen, Satzzeichen etc. angeht) eingegeben werden. So etwas halte ich aber für absolut ausgeschlossen.
Die ISBN ist daher ein zentral vergebenes, sehr leicht erkenn- und prüfbares Kennzeichen eines Buches, welches Duplikate bei der Erfassung viel wirksamer verhindert.
Abgesehen davon ist deine jetzige Lösung ja auch keine wirkliche. Nur die ersten 255 Zeichen des Titels gehen in den UNIQUE-Index ein. Wenn zwei unterschiedliche Bücher sich erst nach dem 255. Zeichen unterscheiden, wird dein Mechanismus den Erfasser nicht nur diesen Wahnsinnstitel einmal komplett abtippen lassen, sondern auch noch falschen Alarm geben und die Erfassung verweigern.
Abgesehen davon: MEDIUMTEXT - warum bitte 16 MB mögliche Titellänge? Wenn ein VARCHAR(255) es nicht tut, wäre als nächste Stufe TEXT (mit 64 KB Maximallänge) angebracht gewesen. Schließlich willst du im Titelfeld ja nicht gleich den gesamten Buchinhalt speichern, oder?
- Sven Rautenberg
My sssignature, my preciousssss!