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:
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;
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.
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;