verifica correttezza semantica

Ciao Gianni,

potresti dare un'occhiata a questa serie di definizione di tabelle, per vedere (per favore), se ci sono degli errori semantici, tutte le quesry di seguito eseguite una alla volta su MySQL 4.1, nn dano nessuno errore sintattico, ne warnings:

CREATE TABLE STUDENTI

(

 Matricola VARCHAR(10) NOT NULL,

 Cod_Piano INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,

 Nome VARCHAR(20) NOT NULL,

 Cognome VARCHAR(20) NOT NULL,

 Data_N DATE NOT NULL,

 Indirizzo VARCHAR(50) NOT NULL,

 Telefono VARCHAR(15) NOT NULL,

 Sesso CHAR(1) NOT NULL,

 PRIMARY KEY  (Matricola),

 UNIQUE (Cod_Piano),

 CONSTRAINT Check_Sex CHECK (Sesso IN (M,F))

);

CREATE TABLE ESAMI

(

 Cod_Esame CHAR(3) NOT NULL,

 Titolo VARCHAR(30) NOT NULL,

 Contenuti TEXT NOT NULL,

 Tipo_Attivita VARCHAR(8) NOT NULL,

 Prova_Fin CHAR(1) NOT NULL,

 CFU SMALLINT(1) NOT NULL,

 Tipo CHAR(1) NOT NULL DEFAULT 'O',

 PRIMARY KEY (Cod_Esame),

 CONSTRAINT Check_Prova_Fin CHECK (Prova_Fin IN (E,K,C))

);

CREATE TABLE ANNI

(Cod_E CHAR(3) NOT NULL,

 Anno SMALLINT(1) NOT NULL,

 PRIMARY KEY (Cod_E,Anno),

 FOREIGN KEY (Cod_E) REFERENCES ESAMI(Cod_Esame)

  ON DELETE CASCADE

  ON UPDATE CASCADE,

 CONSTRAINT Check_Anno CHECK (Anno IN (1,2,3))

);

CREATE TABLE PIANI

(Mat CHAR(10) NOT NULL,

 Cod_P INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,

 Cod_Esami CHAR(3) NOT NULL,

 Anno SMALLINT(1) NOT NULL,

 Data_P DATE DEFAULT 'NULL',

 Voto SMALLINT(2) DEFAULT 'NULL',

 Lode CHAR(1) DEFAULT 'N',

 PRIMARY KEY  (Mat,Cod_P,Cod_Esami),

 FOREIGN KEY (Mat) REFERENCES STUDENTI(Matricola)

  ON DELETE CASCADE

  ON UPDATE CASCADE,

 FOREIGN KEY (Cod_P) REFERENCES STUDENTI(Cod_Piano)

  ON DELETE CASCADE

  ON UPDATE CASCADE,

 FOREIGN KEY (Cod_Esami) REFERENCES ESAMI(Cod_Esame)

  ON DELETE CASCADE

  ON UPDATE CASCADE

);

CREATE TABLE PROPEDEUTICI

(

 Cod_Esa CHAR(3) NOT NULL,

 Cod_Prop CHAR(3) NOT NULL,

 PRIMARY KEY  (Cod_Esa,Cod_Prop),

 FOREIGN KEY Cod_Esa REFERENCES ESAMI(Cod_Esame)

  ON DELETE CASCADE

  ON UPDATE CASCADE,

 FOREIGN KEY Cod_Prop REFERENCES ESAMI(Cod_Esame)

  ON DELETE CASCADE

  ON UPDATE CASCADE

);

GRAZIE MILLE PER GLI AIUTI

inviato 11 anni fa
noems
X 0 X

Prima devi specificare che si tratta di tabelle di tipo InnoDB (ENGINE=InnoDB), poi devi togliere i "CONSTRAINT ... CHECK"

 :bye:

risposto 11 anni fa
Gianni Tomasicchio
X 0 X

e al posto dei constraint cosa metto, visto che devo implementare quei vincoli?

risposto 11 anni fa
noems
X 0 X

Usa un campo ENUM:

CREATE TABLE `esami` (                    
         ...,  
         `scelta` enum('si','no') default 'si',    
         ...        
)
risposto 11 anni fa
Gianni Tomasicchio
X 0 X

Quindi mi stai dicendo che al posto di:

CONSTRAINT Check_Sex CHECK (Sesso IN (M,F))

posso scrivere:

create table studenti

(....

 Sesso ENUM enum('si','no') default 'si';

Una curiositą, con MySQL io nn metto ad ogni attributo le virgole, come hai fatto tu prima con l'attributo scelta, faccio un'errore. Eppure mi compaiono tutti gli attributi dichiarati.....

risposto 11 anni fa
noems
X 0 X

Non č un errore.

 Sesso ENUM enum('M','F') default 'M';

 :bye:

risposto 11 anni fa
Gianni Tomasicchio
X 0 X

si hai ragione.... :)

ma sto da stamattina le 9 vicino a questo progetto, LA STANCHEZZA SI FA' SENTIRE!!!

risposto 11 anni fa
noems
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda