PDA

View Full Version : [MySQL]Errori nella creazione di tabelle


ste_920603
13-04-2011, 18:22
Salve a tutti, dal seguente modello logico:

STUDENTE (IDS,nome,cognome,telefono,località,email,password,oggetti_disponibili,IDT*)
LIBRO (IDL, titolo,genere,lingua,dewey,ISBN,anno,IDC*)
RIVISTA (IDR,titolo,genere,lingua, data_pubblicazione,IDC*)
TESSERA(IDT,data_rilascio, data_scadenza)
CASA_EDITRICE (IDC, nome, sede, telefono, sito_ufficiale)
AUTORE (IDA, nome, cognome, nazionalità)
PRESTITO_LIBRO (IDP, data_prestito, data_restituzione, scaduto, restituito, IDL*, IDS*)
PRESTITO_RIVISTA (IDPR, data_prestito, data_restituzione, scaduto, restituito, IDR*, IDS*)

AUTORE_LIBRO (IDAL, IDL*,IDA*)
AUTORE_RIVISTA (IDAR,IDR*,IDA*)

oggi ho provato a creare le tabelle in MySQL. Ecco i risultati:
CREATE TABLE Studente (
IDs INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
Nome VARCHAR(50) NOT NULL,
Cognome VARCHAR(50) NOT NULL,
Localita VARCHAR(20) NOT NULL,
Email VARCHAR(20) NOT NULL,
Password VARCHAR(20) NOT NULL,
Oggetti_disponibili INT(4) NOT NULL,
Telefono INT(15) NOT NULL,
IDt INT NOT NULL,
FOREIGN KEY (IDt) REFERENCES Tessera(IDt)
ON DELETE SET NULL ON UPDATE CASCADE
) ENGINE=INNODB;

CREATE TABLE Libro (
IDl INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
Titolo VARCHAR(20) NOT NULL,
Genere VARCHAR(20) NOT NULL,
Lingua VARCHAR(20) NOT NULL,
Dewey CHAR(20) NOT NULL,
ISBN INT(20) NOT NULL,
Anno INT(4) NOT NULL
IDc INT NOT NULL,
FOREIGN KEY (IDc) REFERENCES Casa_Editrice(IDc)
ON DELETE SET NULL ON UPDATE CASCADE
)ENGINE=INNODB;

CREATE TABLE Rivista (
IDr INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
Titolo VARCHAR(20) NOT NULL,
Genere VARCHAR(20) NOT NULL,
Lingua VARCHAR(20) NOT NULL,
Data_Pubblicazione DATE NOT NULL,
IDc INT NOT NULL,
FOREIGN KEY (IDc) REFERENCES Casa_Editrice(IDc)
ON DELETE SET NULL ON UPDATE CASCADE
)ENGINE=INNODB;

CREATE TABLE Tessera (
IDt INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
Data_Rilascio DATE NOT NULL,
Data_Scadenza DATE NOT NULL
)ENGINE=INNODB;

CREATE TABLE Casa_Editrice (
IDc INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
Nome VARCHAR(50) NOT NULL,
Sede VARCHAR(50) NOT NULL,
Telefono INT(15) NOT NULL,
Sito_Ufficiale VARCHAR(50) NOT NULL
)ENGINE=INNODB;

CREATE TABLE Autore (
IDa INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
Nome VARCHAR(50) NOT NULL,
Cognome VARCHAR(50) NOT NULL,
Nazionalita VARCHAR(20) NOT NULL
) ENGINE=INNODB;

CREATE TABLE Prestito_Libro (
IDp INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
Data_Prestito DATE NOT NULL,
Data_Restituzione DATE NOT NULL,
Scaduto VARCHAR(2) NOT NULL,
Restituito VARCHAR(2) NOT NULL,
IDl INT NOT NULL,
IDs INT NOT NULL,
FOREIGN KEY (IDl) REFERENCES Libro(IDl)
ON DELETE SET NULL ON UPDATE CASCADE,
FOREIGN KEY (IDs) REFERENCES Studente(IDs)
ON DELETE SET NULL ON UPDATE CASCADE
) ENGINE=INNODB;

CREATE TABLE Prestito_Rivista (
IDpr INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
Data_Prestito DATE NOT NULL,
Data_Restituzione DATE NOT NULL,
Scaduto VARCHAR(2) NOT NULL,
Restituito VARCHAR(2) NOT NULL,
IDr INT NOT NULL,
IDs INT NOT NULL,
FOREIGN KEY (IDr) REFERENCES Rivista(IDr)
ON DELETE SET NULL ON UPDATE CASCADE,
FOREIGN KEY (IDs) REFERENCES Studente(IDs)
ON DELETE SET NULL ON UPDATE CASCADE
) ENGINE=INNODB;

CREATE TABLE Autore_Libro (
IDal INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
IDl INT NOT NULL,
IDa INT NOT NULL,
FOREIGN KEY (IDl) REFERENCES Libro(IDl)
ON DELETE SET NULL ON UPDATE CASCADE,
FOREIGN KEY (IDa) REFERENCES Autore(IDa)
ON DELETE SET NULL ON UPDATE CASCADE
) ENGINE=INNODB;

CREATE TABLE Autore_Rivista (
IDar INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
IDr INT NOT NULL,
IDa INT NOT NULL,
FOREIGN KEY (IDr) REFERENCES Rivista(IDr)
ON DELETE SET NULL ON UPDATE CASCADE,
FOREIGN KEY (IDa) REFERENCES Autore(IDa)
ON DELETE SET NULL ON UPDATE CASCADE
) ENGINE=INNODB;

Il problema è che funzionano solo 3 tabelle: Autore, Tessera e Casa_Editrice. Guarda caso sono le uniche 3 tabelle che non hanno dichiarazioni di foreign key. In più, MySQL mi restituiva questo errore: "errno:150", che dovrebbe riguardare le chiavi esterne. A questo punto, cosa ho sbagliato nella dichiarazione? Qualcuno mi può aiutare?
Grazie