ik kom er niet uit wat doe ik hier fout?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Ossie ossiet

ossie ossiet

10/03/2015 12:04:56
Quote Anchor link
ERROR 1215: Cannot add foreign key constraint
SQL Statement:
ALTER TABLE `kunst_kunst`.`kunstenaar`
ADD CONSTRAINT `Kunstenaars`
FOREIGN KEY (`Kunstenaars`)
REFERENCES `kunst_kunst`.`schilderij` (`Kunstenaars`)
ON DELETE NO ACTION
ON UPDATE NO ACTION

ERROR: Error when running failback script. Details follow.

ERROR 1050: Table 'kunstenaar' already exists
SQL Statement:
CREATE TABLE `kunstenaar` (
`Kunstenaars` varchar(45) NOT NULL DEFAULT '',
`Geboorte_Jaar` int(4) NOT NULL,
`Mogelijke_Sterfte_Jaar` int(4) DEFAULT NULL,
PRIMARY KEY (`Kunstenaars`),
UNIQUE KEY `Naam_Kunstenaar_UNIQUE` (`Kunstenaars`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
 
PHP hulp

PHP hulp

16/04/2024 12:39:13
 
Frank Nietbelangrijk

Frank Nietbelangrijk

10/03/2015 12:42:01
Quote Anchor link
Het is eigenlijk meer een waarschuwing dat de database-tabel al bestaat. Het aanmaken ervan hoeft in principe maar één keer te gebeuren.
 
Ward van der Put
Moderator

Ward van der Put

10/03/2015 13:14:35
Quote Anchor link
Als één kunstenaar meerdere schilderijen heeft (zeer waarschijnlijk), moet je de relatie omkeren. De FOREIGN KEY hoort in de tabel met schilderijen en verwijst naar de PRIMARY KEY in de tabel met kunstenaars.

Aangezien in kunstenaarsfamilies namen vaker voorkomen (vader en zoon bijvoorbeeld), is het logischer een UNIQUE INDEX te zetten op naam én geboortejaar.

Tot slot is het verstandig interne ID's (in de database) los te koppelen van andere identifiers in de implementatie van een applicatie. Gebruik daarom niet de naam van een kunstenaar als primaire sleutel, maar een unieke integer.

Daarmee krijg je zoiets:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
CREATE TABLE IF NOT EXISTS kunstenaars (
  kunstenaar_id  MEDIUMINT UNSIGNED  NOT NULL  AUTO_INCREMENT,
  naam           VARCHAR(45)         NOT NULL  DEFAULT '',
  geboortejaar   YEAR                NOT NULL,
  sterfjaar      YEAR                NULL  DEFAULT NULL,
  PRIMARY KEY (kunstenaar_id),
  UNIQUE INDEX naam_en_geboortejaar (naam,geboortejaar)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci;

CREATE TABLE IF NOT EXISTS schilderijen (
  schilderij_id  MEDIUMINT UNSIGNED  NOT NULL  AUTO_INCREMENT,
  kunstenaar_id  MEDIUMINT UNSIGNED  NOT NULL,
  titel          VARCHAR(255)        NOT NULL  DEFAULT '',
  jaar           YEAR                NOT NULL,
  PRIMARY KEY (schilderij_id),
  CONSTRAINT FOREIGN KEY (`kunstenaar_id`)
    REFERENCES `kunstenaars` (`kunstenaar_id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci;
 
Ossie ossiet

ossie ossiet

11/03/2015 12:05:48
Quote Anchor link
Bedankt voor de hulp. Ik heb het geprobeerd maar lukt me niet met een ander tabel. Hij geeft aan dat de foreign key constraint fout is.
Quote:
CREATE TABLE IF NOT EXISTS Klant (
Naam_Klant VARCHAR(45) NULL AUTO_INCREMENT,
Adres VARCHAR(45) NOT NULL DEFAULT '',
Postcode varchar(45) NOT NULL,
Woonplaats VARCHAR(45) NOT NULL,
Telefoonnummer INT(11) NOT NULL,
PRIMARY KEY (Naam_Klant),
UNIQUE INDEX Naam_en_Adres (Naam_Klant,Adres)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci;

CREATE TABLE IF NOT EXISTS Uitleen (
Uitleen_Id Int(11) NOT null AUTO_INCREMENT,
Naam_Klant VARCHAR(45) NULL ,
Naam_Schilderij VARCHAR(45) NOT NULL,
Uitleen_Datum DATE NOT NULL ,
Inlever_Datum DATE NOT NULL,
Waardering INT(2) NOT NULL,
PRIMARY KEY (Uitleen_Id),
CONSTRAINT FOREIGN KEY (`Naam_Klant`)
REFERENCES `Klant` (`Naam_Klant`)
ON DELETE set null
ON UPDATE cascade
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci;


Kan je me hiermee helpen?
 
Ivo P

Ivo P

11/03/2015 12:33:32
Quote Anchor link
ah.
hier dezelfde vraag die ook al in een los topic staat?

Ik heb daar al een stuk of 3 opmerkingen op gegeven.

Toevoeging op 11/03/2015 14:41:02:

http://www.phphulp.nl/php/forum/topic/help-dit-lukt-me-niet-en-kan-niet-verder/97440/last/

dus
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.