MySQL ERREUR 1005: ne Peut pas créer de table (errno: 150)

Je suis en train de créer le tableau suivant


 create table messaInScena
  (
    data               date,  
    ora                time,
    spazio             varchar(20),
    spettacolo         varchar(40),
    postiDisponibili   smallint,
    prezzoIntero       decimal(5,2),
    prezzoRidotto      decimal(5,2),
    prezzoStudenti     decimal(5,2),
    primary key (data, ora, spazio),
    foreign key (spazio) references spazio(nome) 
on update cascade on delete set null,
    foreign key (spettacolo) references spettacolo(titolo) 
on update cascade on delete set null,
    constraint RA3_1 check (postiDisponibili >= 0)     
  ) ;

mais j'obtiens l'erreur suivante:
Code d'erreur: 1005 ne Peut pas créer la table 'teatrosql.messainscena' (errno: 150)

Les tables référencées par des clés étrangères sont les suivants:


create table spazio
  (
    nome             varchar(20) primary key, 
    indirizzo        varchar(40) not null,
    pianta           varchar(20),
    capienza         smallint
  );

create table spettacolo
  (
    titolo             varchar(40) primary key,  
    descrizione        LONGBLOB,
    annoProduzione     char(4)
  );

J'ai déjà vérifié que les fk sont uniques et qu'il n'y a pas de fautes (mais donné un contrôle aussi que vous ne savez jamais :D). Comme vous pouvez le voir les champs de référence sont des clés primaires. entre les champs et fk types de référence et les dimensions coïncident ..

où je me trompe??

les autres tables de la DB


create table teatro
(
nome             varchar(20) primary key, 
telefono         varchar(15),
fax              varchar(15),
indirizzo        varchar(40) not null,  
email            varchar(30),
url              varchar(30)
);
create table biglietteria
(
nome             varchar(20) primary key, 
indirizzo        varchar(40) not null,
email            varchar(30),
telefono         varchar(15),  
teatro           varchar(20),
foreign key (teatro) references teatro(nome) 
on update cascade on delete set null
);
create table orario
(
biglietteria     varchar(20), 
giorno           varchar(10), 
inizio           time, 
fine             time, 
primary key(biglietteria, giorno, inizio),
foreign key (biglietteria) references biglietteria(nome)
on update cascade on delete cascade
);
create table notizia
(
data        date,
ora         time,
oggetto     varchar(100),
testo       LONGBLOB,
primary key(data, ora, oggetto)
);
create table newsletter
(
teatro      varchar(20),
data        date,
ora         time,
oggetto     varchar(100),
primary key(teatro, data, ora, oggetto),
foreign key (teatro) references teatro(nome)on update cascade on delete cascade,
foreign key (data, ora, oggetto) references notizia(data, ora, oggetto) on update cascade on delete cascade
);
create table dipendente
(
cf                     char(16) primary key, 
nome                   varchar(20) not null, 
cognome                varchar(20) not null,
dataDiNascita          date,
luogoDiNascita         varchar(20), 
residenza              varchar(30), 
telefonoFisso          varchar(15), 
telefonoMobile         varchar(15),  
email                  varchar(30)
);
create table lavoro
(
teatro              varchar(20), 
dipendente          char(16),
dataAssunzione      date,
ruolo               varchar(5),
cda                 boolean,
primary key(teatro, dipendente),
foreign key (teatro) references teatro(nome) on update cascade on delete cascade,
foreign key (dipendente) references dipendente(cf) on update cascade on delete cascade,
constraint RA1 check (
cda = false or 
(year(current_date) - year(dataAssunzione) > 10) or
(year(current_date) - year(dataAssunzione) = 10 and 
month(current_date) > month(dataAssunzione)) or
(year(current_date) - year(dataAssunzione) = 10 and 
month(current_date) = month(dataAssunzione) and
day(current_date) >= day(dataAssunzione)) 
),
check (ruolo in ('CA', 'POD', 'CUSRP', 'ACF'))
);
create table stipendio
(
dipendente    char(16), 
inizio        date, 
importo       decimal(6,2),
primary key(dipendente, inizio),
foreign key (dipendente) references dipendente(cf) on update cascade on delete cascade
) ;
create table luogo
(
teatro     varchar(20), 
spazio     varchar(20),
primary key(teatro, spazio),
foreign key (teatro) references teatro(nome) on update cascade on delete cascade,
foreign key (spazio) references spazio(nome) on update cascade on delete cascade
) ;

OriginalL'auteur user2610920 | 2013-07-23