Problem mit Verknüpfung einer Tabelle

Buzz Lightzyear

Benutzer
Beiträge
17
Hallo wieder mal! :-)


Ich hab hier zwei Tabellen vor mir:

Tabelle movies:


+-----------------------+--------------+------+-----+---------+----------------+

| Field | Type | Null | Key | Default | Extra |

+-----------------------+--------------+------+-----+---------+----------------+

| movie_id | mediumint(9) | NO | PRI | NULL | auto_increment |

| movie_name | char(255) | NO | | NULL | |

| movie_genre | mediumint(9) | NO | | NULL | |

| boxshot_front | blob | YES | | NULL | |

| boxshot_back | blob | YES | | NULL | |

+-----------------------+--------------+------+-----+---------+----------------+

Tabelle genre:

+------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------+--------------+------+-----+---------+-------+
| genre_id | mediumint(9) | NO | PRI | NULL | |
| genre_name | char(70) | YES | | NULL | |
+------------+--------------+------+-----+---------+-------+

Jetzt will ich die Felder von movies(movie_genre) mit dem Feld von genre (genre_id) verknüpfen und das mach ich mit folgenden Befehl:

Code:
ALTER TABLE genre
  ADD CONSTRAINT fk_genre_id
FOREIGN KEY (genre_id) REFERENCES movies(movie_genre);

Dann bekomm ich immer folgenden Fehler:

Code:
Create table 'MovieDatabase/#sql-5b8_3' with foreign key constraint failed. There is no index in the referenced table where the referenced columns appear as the first columns.

Kann mir jemand sagen was ich da falsch mache? Hab keinen Plan mehr -.-



Thx & Lg
buzzzz
 
Werbung:
Kann es sein, daß Du das Pferd von der falschen Seite zu satteln versuchst?

Code:
test=*# create table movies (movie_id int primary key, movie_genre int);
CREATE TABLE
test=*# create table genre (genre_id int primary key, genre_name text);
CREATE TABLE
test=*# alter table movies add constraint lk_genre foreign key (movie_genre) references genre(genre_id) on delete cascade;
ALTER TABLE
test=*# \d movies;
                      Tabelle »public.movies«
   Spalte    |   Typ   | Sortierfolge | NULL erlaubt? | Vorgabewert
-------------+---------+--------------+---------------+-------------
 movie_id    | integer |              | not null      |
 movie_genre | integer |              |               |
Indexe:
    "movies_pkey" PRIMARY KEY, btree (movie_id)
Fremdschlüssel-Constraints:
    "lk_genre" FOREIGN KEY (movie_genre) REFERENCES genre(genre_id) ON DELETE CASCADE

test=*#

Wenn man zuerst diese Detailtabellen erzeugt spart man sich den Krampf.
 
ok thx... was ich nicht ganz verstehe: wenn ich das ganze "von der anderen Seite" aus mache, sprich die Verknüpfung genau so wie ich sie will von der movies Tabelle aus, funktioniert das Ganze einwandfrei.
 
... und ich versteh nicht was Du meinst mit "wenn ich das ganze "von der anderen Seite" aus mache, sprich die Verknüpfung genau so wie ich sie will von der movies Tabelle aus,..."
 
vielleicht hilft das folgende Beispiel, das besser zu verstehen, zumal die Fehlermeldung in PostgreSQL auch sinnvoller ist:

Code:
test=# create table genre(g_id int, genre_name text);
CREATE TABLE
test=*# create table movies(m_id int primary key, g_id int references genre);
FEHLER:  in Tabelle »genre«, auf die verwiesen wird, gibt es keinen Primärschlüssel
test=*# rollback;
ROLLBACK
test=# create table genre(g_id int primary key, genre_name text);
CREATE TABLE
test=*# create table movies(m_id int primary key, g_id int references genre);
CREATE TABLE
test=*#
 
Kurz gesagt: Dein FK zeigt von movies auf genres, nicht umgekehrt. Für die genres Tabelle ist ist genre_id ein PK und kann damit kein FK sein (außer in einer 1:1 Beziehung). Du brauchst den FK nur in movies zu setzen.
 
Ok danke für eure Hilfe... ich glaub ich hab noch zu wenig Erfahrung mit den Verknüpfungen und hab mal wieder mein MySQL Buch aus dem Regal geholt und werd mich da mal weiter informieren :-)

Thx & Lg
buzzz
 
MySQL Buch aus dem Regal geholt und werd mich da mal weiter informieren

MySQL ist meiner Meinung nach nur sehr bedingt als Lernsystem geeignet, es hat schlicht zu viele Fehler, was die Umsetzung der SQL-Specs anbelangt. Von fehlenden Features mal ganz zu schweigen. Von der ganz aktuellen Version mal abgesehen ist MySQL unter den Datenbanken etwa vergleichbar mit Windows95 unter den Betriebssystemen.
 
Werbung:
Zurück
Oben