ik kom er niet uit wat doe ik hier fout?
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
Het is eigenlijk meer een waarschuwing dat de database-tabel al bestaat. Het aanmaken ervan hoeft in principe maar één keer te gebeuren.
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)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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;
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;
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;
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?
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