Supportnet Computer
Planet of Tech

Supportnet / Forum / Datenbanken

Eindeutigkeit bei MySQL DB





Frage

Hi! Also ich habe auf meinem Rechner Apache inklusice PHP und mySQL drauf. Alles geht wunderbar, jetzt will ich aber eine Datenbank für alle meine Bücher einrichten und da wäre es ja gant praktisch, wenn man auf das Titel-Feld ein "unique" setzt. Also wollte ich mit phpMyAdmin die Tabelle erstellen, allerdings kommt immer folgender Fehler: [b]MySQL meldet: BLOB column 'titel' used in key specification without a key length[/b] Ich habe es auch schon so probiert: [b]CREATE TABLE `bücher` ( `id` int(5) unsigned NOT NULL auto_increment, `titel` text NOT NULL, `autor` text NOT NULL, `genre` text NOT NULL, `exemplare` text NOT NULL, `info` text NOT NULL, PRIMARY KEY (`ID`), INDEX (titel), UNIQUE (titel) ) TYPE=MyISAM;[/b] Kommt aber der gleich Fehler bei raus, kann mir vielleicht jemand sagen, was ich ändern muss um den Fehler zu beheben? Wäre nett, Mfg Jim

Antwort 1 von MixMax

ändere den typ von titel auf varchar(255) denn das du einen titel hast der länger ist sollte wohl ausgeschlossen sein.
überhaupt solltest du überlegen ob du für alles spalten brauchst in denen du je 64KB text speichern kannst...

Antwort 2 von JimPanse5

Danke für deine Hilfe, es hat jetzt geklappt. Allerdings habe ich noch eine Frage, ich habe mir überlegt, das ganze doch etwas anders zu gestalten. Ich wollte jetzt für den titel eine tabelle anlegen (titel_tab) für das genre (genre_tab) und für den autor (autor_tab), damit ich die verschiedenen Daten nich alle so oft sondern immer nur einmal eingeben muss, allerdings weiß ich jetzt nicht so ganz, wie ich die Verbindung zwischen den tabellen herstellen kann.

Ich muss dann ja irgendwie wenn ich den Titel "Shining" eingebe den passenden Autor aus der autor_tab holen und das passende genre aus der genre_tab.

Aber wie soll ich das ganze bewerkstelligen??

Mfg Jim

Antwort 3 von JimPanse5

Achso, in der titel_tab sind dann folgende Spalten:

id, titel, exemplare, info

bei autor_tab:

id, autor[/B]

bei genre_tab:

id, genre

So müsste/sollte man die Tabellen doch eigentlich einteilen oder??

Mfg Jim

Antwort 4 von MixMax

also du wirst dann bei der titel_tab noch 2 spalten einfügen müssen, für author und genre in denen dann die ID des authors hinterlegt wird, wenn Author und genre bloß aus einer Datenspalte bestehen macht das nicht unbedingt sinn

Antwort 5 von JimPanse5

wie meinst du das?? oder wie würdest du so eine bücher datenbank realisieren?

Mfg Jim

Antwort 6 von MixMax

Also eher ungünstig, außer wenn du mehr informatitionen zum Autor speichern möchstest.

Also entweder einfach in einer tabelle :

create table buecher(ID int unsigned not null auto_increment primary key,
 titel varchar(255) unique not null,
 autor varchar(255) not null,
 genre varchar(255) not null,
 info text, example text);

wobei ich bei example und info die not null clausel weglassen und als einzige spalten mit einem evtl längeren text lassen würde.


die andere (auch php-seitig und sql-abfrage seitig) aufwendigere variante wäre dann halt mit 3 Tabellen. beim selectieren mußt du dann ein join aus 3 tabellen machen. wäre sinnvoll wenn du z.B. zum Authr noch Geburts/Todesdatum, anzahl der Werke und andere informationen speichern willst.

beim Genre dürfte es eh quatsch sein.

Ich würde (wenn du echt vorhast mehr zum Autor zu speichern)
2 Tabellen machen :

buecher (vermeide besser umlaute)
autoren (und großbuchstaben, solange du nicht weißt ob der server dazwischen unterscheidet)


create table buecher(id int unsigned not null auto_increment primary key,
 titel varchar(255) unique not null,
 autor int not null,
 genre varchar(255) not null,
 info text, example text);

create table autoren(id int unsigned not null auto_increment primary key,
 autor varchar(255) unique not null,
 geboren datetime, gestorben datetime,
 weitere Spalten mit infos über den autor);


bei dem HTML-Formularen solltest du einfach eine Dropdownbox machen zum eintragen des Genres damit du nicht mal so und mal so eine schreibweise nehmen kannst.
bei der auswahl des authors kannst du ja auch eine dropdownbox machen wo du alle Autoren aus der anderen tabelle auflisten läßt.

Antwort 7 von JimPanse5

ja, ok, aber eine frage noch hier zu:

Zitat:
bei dem HTML-Formularen solltest du einfach eine Dropdownbox machen zum eintragen des Genres damit du nicht mal so und mal so eine schreibweise nehmen kannst.
bei der auswahl des authors kannst du ja auch eine dropdownbox machen wo du alle Autoren aus der anderen tabelle auflisten läßt.


Wenn ich das so mit einem DropDown Feld machen würde, dann müsste ich doch erst immer alle Autoren eingeben und dann hinterher kann ich die Buecher eingeben oder?

Also erstmal von allen Büchern die Autoren rein und dann die Titel der Bücher?!

Mfg Jim