MySQL 5.5.24 Ubuntu

mäks

Mitglied
Hi,

ich würde gerne wissen was genau ein duplicate key name bei der Vergabe von Foreign Keys ist.

Meine DB sieht folgendermaßen aus:

Code:
DROP DATABASE IF EXISTS main;

CREATE DATABASE main ;
use main;

CREATE TABLE user (
    ip                  varchar(15),
    id                  int(10) PRIMARY KEY NOT NULL AUTO_INCREMENT,
    username            varchar(30) NOT NULL,
    vname               varchar(30),
    nname               varchar(40),
    birthdate           date,
    country             varchar(100),
    language            varchar(2),
    avatar              varchar(100),
    registration_date   date,
    access_stat         int(1)
) engine=InnoDB;

## access_stat

/*

0... admin
1... user

*/

CREATE TABLE ctype (
    id                  int(10) PRIMARY KEY NOT NULL AUTO_INCREMENT,
    elementid           int(2) NOT NULL,
    elementname         varchar(50) NOT NULL,
    elementdesc         varchar(100) NOT NULL,
    creationdate        date
) engine=InnoDB;

CREATE TABLE content (
    id                  int(10) PRIMARY KEY NOT NULL AUTO_INCREMENT,
    uid                 int(10) NOT NULL,
    cid                 int(10) NOT NULL,
    value               text(2500) NOT NULL,
    creationdate        date NOT NULL
) engine=InnoDB;

ALTER TABLE content ADD FOREIGN KEY content(cid) REFERENCES ctype(id);
ALTER TABLE content ADD FOREIGN KEY content(uid) REFERENCES user(id);

Ich hab mir dabei folgendes gedacht, bitte korrigiert mich wenn ich falsch liege:

Die Tabelle content steht für den Content meiner Homepage.
Die Tabelle ctype enthält contenttypen (administrative -> Layout bezogene, Navigation etc..., beiträge -> Beiträge zu diversen Projekten von mir etc...)
Die Tabelle user enthält die infos über die einzelnen user und deren berechtigungen.

Ich denke mir das ein User mehrere Beiträge erfassen kann also würde ich den Foreign Key auf content(uid) mit der Referenz auf user(id) legen um dies zu erreichen.

Ein ctype kann zu mehrere beiträge gehören aber nur ein beitrag zu einem ctype (möglicherweise ist auch hier der Fehler warum die Foreign Key Zuweisung nicht stimmt).

Wenn ich diese beiden Foreign Keys setze bekomme ich jedoch die Fehlermeldung: "ERROR 1061 (42000): Duplicate key name 'content'".

Was mach ich hier falsch und was bedeutet diese Fehlermeldung genau?

Danke schon mal für eure Hilfe!

mfg

Maks
 
Klappt das?
Code:
CREATE TABLE content (
    id                  int(10) PRIMARY KEY NOT NULL AUTO_INCREMENT,
    uid                 int(10) NOT NULL,
    cid                 int(10) NOT NULL,
    value               text(2500) NOT NULL,
    creationdate        date NOT NULL
    FOREIGN KEY (uid) REFERENCES user(id)
    FOREIGN KEY (cid) REFERENCES ctype(id)
) engine=InnoDB;

Gruß, Pat
 
Auszug aus der MySQL Referenz:

ALTER TABLE tbl_name
ADD [CONSTRAINT symbol] FOREIGN KEY [id] (index_col_name, ...)
REFERENCES tbl_name (index_col_name, ...)

Du versuchst, beiden Schlüsseln dieselbe id (content) zuzuweisen.

Die Fehlernummern kannst du auch hier nachsehen.
 
Zurück