PDA

Visualizza versione completa : [DB Postgres] Errore chiave esterna


GiulioCesare
29-10-2004, 18.05.51
Salve ragazzi, ho un problema con Postgresql, non mi fa inserire più di una
volta, la stessa chiave esterna, mi spiego meglio mettendo il mio database
in questione.

create table artista
(id_artista integer not null,
nome varchar (14) not null,
cognome varchar (14) not null,
nascita date,
primary key (id_artista));

create table museo
(id_museo integer not null,
nome varchar (15),
n_dipendenti integer,
localita varchar (12) not null,
primary key (id_museo));

create table opera
(id_opera integer not null,
nome varchar (15) not null,
costo float,
n_autore integer not null,
n_museo integer not null,
primary key (id_opera),
constraint composta foreign key (n_autore) references artista on delete
cascade,
constraint appartine foreign key (n_museo) references museo on delete
cascade);

insert into artista
(id_artista, nome, cognome, nascita)
values (1, 'Franco', 'Franchi', '07/05/1934');
insert into artista
(id_artista, nome, cognome, nascita)
values (2, 'Ciccio', 'Ingrassia', '06/07/1932');
insert into artista
(id_artista, nome, cognome, nascita)
values (3, 'Leonardo', 'Da Vinci', '05/08/1834');
insert into artista
(id_artista, nome, cognome, nascita)
values (4, 'Mario', 'Neri', '05/02/1939');
insert into artista
(id_artista, nome, cognome, nascita)
values (5, 'Bianco', 'Bianchi', '07/01/1967');
insert into artista
(id_artista, nome, cognome, nascita)
values (6, 'Ermanno', 'Fraschi', '09/09/1965');

insert into museo
(id_museo, nome, n_dipendenti, localita)
values (1, 'Arcispolo', 23, 'Firenze');
insert into museo
(id_museo, nome, n_dipendenti, localita)
values (2, 'Tuzzettu', 90, 'Livorno');
insert into museo
(id_museo, nome, n_dipendenti, localita)
values (3, 'La Meraviglia', 56, 'Milano');
insert into museo
(id_museo, nome, n_dipendenti, localita)
values (4, 'I quattro venti', 34, 'Torino');
insert into museo
(id_museo, nome, n_dipendenti, localita)
values (5, 'La Maestà', 23, 'Torino');
insert into museo
(id_museo, nome, n_dipendenti, localita)
values (6, 'Il Franco', 12, 'Roma');

insert into opera
(id_opera, nome, costo, n_autore, n_museo)
values(1, 'Il Teschio', 23000.90, 1, 1);
insert into opera
(id_opera, nome, costo, n_autore, n_museo)
values(1, 'La Verità', 34000.34, 1, 3);
insert into opera
(id_opera, nome, costo, n_autore, n_museo)
values(2, 'Il Nano', 56000.00, 2, 5);
insert into opera
(id_opera, nome, costo, n_autore, n_museo)
values(2, 'Il Caimano', 100000.00, 3, 6);
insert into opera
(id_opera, nome, costo, n_autore, n_museo)
values(3, 'Mejo me sento', 90986.11, 5, 4);
insert into opera
(id_opera, nome, costo, n_autore, n_museo)
values(4, 'La Gioconda', 100000.09, 3, 2);

Questi sono gli errori che mi segnala Postgresql
psql:opere_arte.sql:68: ERROR: Cannot insert a duplicate key into unique
index opera_pkey
INSERT 18287 1
psql:opere_arte.sql:74: ERROR: Cannot insert a duplicate key into unique
index opera_pkey

In pratica nella tabella opera, un autore non può aver composto più di una
opera e questo è molto strano, visto che il campo n_autore nella tabella
opera è una chiave esterna e non primaria, quindi perchè non potrei
inserire la stessa chiave esterna più di una volta? Grazie a chi vorrà
aiutarmi :)