PDA

View Full Version : problema SQL


thefrog
22-03-2005, 10:34
allora, devo fare un coso in sql abbastanza semplice, il codice è questo:

drop database if exists db3647299;
create database if not exists db3647299;
use db3647299;

DROP TABLE IF EXISTS Rapprensentanti;
CREATE TABLE if not exists Rappresentanti(
CodR CHAR(2) PRIMARY KEY,
cognome CHAR(10),
nome CHAR(8),
via CHAR(15),
citta CHAR(15),
prov CHAR(2),
cap CHAR(5),
TotProvv DECIMAL(5,2),
PerProvv DECIMAL(5,2)
) TYPE=INNODB;

DROP TABLE IF EXISTS Clienti;
CREATE TABLE if not exists Clienti(
CodC CHAR(3) PRIMARY KEY,
cognome CHAR(10),
nome CHAR(8),
via CHAR(15),
citta CHAR(15),
prov CHAR(2),
cap CHAR(5),
saldo DECIMAL(5,2),
fido DECIMAL(5,2),
CodR CHAR(2) NOT NULL,
INDEX RInd (CodR),
FOREIGN KEY (CodR)
REFERENCES Rappresentanti(CodR)
) TYPE=INNODB;

DROP TABLE IF EXISTS Ordini;
CREATE TABLE if not exists Ordini(
NumOrdine CHAR(6) PRIMARY KEY,
Data DATE,
CodC CHAR(3),
INDEX CliInd (CodC),
FOREIGN KEY (CodC) REFERENCES
Clienti(CodC) ON DELETE SET NULL
) TYPE=INNODB;

DROP TABLE IF EXISTS Articoli;
CREATE TABLE if not exists Articoli(
NumArt CHAR(4) PRIMARY KEY,
descrizione CHAR(20),
giacenza INT,
categoria CHAR(2),
magazzino CHAR(1),
PrzUnitario DECIMAL(5,2)
);



DROP TABLE IF EXISTS DettagliOrdini;
CREATE TABLE if not exists DettagliOrdini(
NumOrdine CHAR(6) NOT NULL,
NumArt CHAR(4) NOT NULL,
PRIMARY KEY(NumOrdine, NumArt),
INDEX Ord_ind(NumOrdine),
FOREIGN KEY(NumOrdine)
REFERENCES Ordini(NumOrdine),
INDEX Art_ind(NumArt),
FOREIGN KEY(NumArt)
REFERENCES Articoli(NumArt),
QtaOrd DECIMAL(3,0),
Prezzo DECIMAL(6,2)
) TYPE=INNODB;

mi da quest'errore:

ERROR 1005: Can't create table './db3647299/DettagliOrdini.frm' (errno: 150)

se qualcuno sa come correggerlo...grazie

mailand
22-03-2005, 11:15
mi sembra un errore sulle foreign key...
in oracle, una fk richiede una primary key o uno unique index su cui appoggiarsi, e non mi sembra che ci siano su tutte le tabelle... non so in mysql ma credo che sia lo stesso...

thefrog
22-03-2005, 12:05
Originariamente inviato da mailand
mi sembra un errore sulle foreign key...
in oracle, una fk richiede una primary key o uno unique index su cui appoggiarsi, e non mi sembra che ci siano su tutte le tabelle... non so in mysql ma credo che sia lo stesso...

la primary key c'è in tutte le tabelle

cosa credi che dovrei cambiare?

thefrog
22-03-2005, 14:11
risolto....

mi ero scordato TYPE = INNODB nella tabella Articoli :D

si può chiudere

mailand
22-03-2005, 14:13
direi la sintassi...
prova a scrivere le pk tutte così:

PRIMARY KEY(NumOrdine, NumArt)

è solo un tentativo, non conosco perfettamente la sintassi mysql... ;)

comunque prova a guardare QUI (http://community.sigames.com/eve/ubb.x/a/tpc/f/893197497/m/273200458/r/344209068)

mailand
22-03-2005, 14:15
come non detto! ;)
complimenti :)