-- MySQL Administrator dump 1.4
--
-- ------------------------------------------------------


-- COMMENTI SULLO STATEMENT DI CUI SOPRA:
-- 1) 	Uso del parametro foreign_key_checks
-- 		If set to 1 (the default), foreign key constraints for InnoDB tables are 
-- 		checked. If set to 0, they are ignored. Disabling foreign key checking can be
-- 		useful for reloading InnoDB tables in an order different from that required 
-- 		by their parent/child relationships. [See Section 13.6.4.4, "FOREIGN KEY 
-- 		Constraints"]. 
-- 		Setting foreign_key_checks to 0 also affects data definition statements: 
-- 		DROP SCHEMA drops a schema even if it contains tables that have keys 
-- 		that are referred to by tables outside the schema, and DROP TABLE
-- 		drops tables that have foreign keys that are referred to by other tables. 
-- 		NOTE: Setting foreign_key_checks to 1 does not trigger a scan of the
-- 		existing table data. Therefore, rows added to the table while 
-- 		foreign_key_checks = 0 will not be verified for consistency
-- 2) 	Quando uno statement viene racchiuso tra '/*!' e '*/', quello statement viene parsato ed eseguito SOLO da un motore MySQL.
--    	Questo consente di eseguire questo file SQL anche su altri DBMS, che però salteranno tali statement che sono legali solo in MySQL
-- 3) 	Il numero 40014, indica inoltre che quello statement deve essere eseguito solo da un motore MySQL la cui versione sia superiore alla 4.00.14
-- 4) 	Questo statement, da un punto di vista logico, memorizza il vecchio valore di FOREIGN_KEY_CHECKS in una veriabile temporanea, per poi
--    	ripristinarlo alla fine del file SQL (vedi fine file SQL)

--
-- Create schema ex2
--

CREATE DATABASE IF NOT EXISTS esercitazione2;
USE esercitazione2;

--
-- Definition of table `argomento`
--

CREATE TABLE `argomento` (
  `relazione` int(15) NOT NULL,
  `corso` varchar(200) NOT NULL,
  PRIMARY KEY  (`relazione`),
  KEY `corso` (`corso`),
  CONSTRAINT `argomento_ibfk_2` FOREIGN KEY (`corso`) REFERENCES `corso` (`nome`),
  CONSTRAINT `argomento_ibfk_1` FOREIGN KEY (`relazione`) REFERENCES `relazionefinale` (`studente`)
) ENGINE=InnoDB ;

--
-- Definition of table `corso`
--

CREATE TABLE `corso` (
  `nome` varchar(200) NOT NULL,
  `n°crediti` int(2) NOT NULL,
  PRIMARY KEY  (`nome`)
) ENGINE=InnoDB ;

--
-- Definition of table `corsononprogettuale`
--

CREATE TABLE `corsononprogettuale` (
  `nome` varchar(200) NOT NULL,
  PRIMARY KEY  (`nome`),
  CONSTRAINT `corsononprogettuale_ibfk_1` FOREIGN KEY (`nome`) REFERENCES `corso` (`nome`)
) ENGINE=InnoDB ;

--
-- Definition of table `corsoprogettuale`
--

CREATE TABLE `corsoprogettuale` (
  `nome` varchar(200) NOT NULL,
  PRIMARY KEY  (`nome`),
  CONSTRAINT `corsoprogettuale_ibfk_1` FOREIGN KEY (`nome`) REFERENCES `corso` (`nome`)
) ENGINE=InnoDB ;


--
-- Definition of table `discussione`
--

CREATE TABLE `discussione` (
  `relazioneFinale` int(15) NOT NULL,
  `sessioneDiLaurea` date NOT NULL,
  `voto` int(10) NOT NULL,
  PRIMARY KEY  (`relazioneFinale`),
  KEY `sessioneDiLaurea` (`sessioneDiLaurea`),
  CONSTRAINT `discussione_ibfk_2` FOREIGN KEY (`sessioneDiLaurea`) REFERENCES `sessionedilaurea` (`data`),
  CONSTRAINT `discussione_ibfk_1` FOREIGN KEY (`relazioneFinale`) REFERENCES `relazionefinale` (`studente`)
) ENGINE=InnoDB ;

-- ++++++++++++++++++++++++++++++++++++++++++
-- SOLUZIONE ESERCITAZIONE 2 PUNTO 1 
-- ++++++++++++++++++++++++++++++++++++++++++
--
-- Definition of table `esame`
--


CREATE TABLE `esame` (
  `studente` int(10) NOT NULL,
  `corso` varchar(200) NOT NULL,
  `voto` int(15),
  `data` date NOT NULL,
  PRIMARY KEY  (`studente`,`corso`),
  KEY `esame_ibfk_1` (`studente`),
  CONSTRAINT `esame_ibfk_1` FOREIGN KEY (`studente`) REFERENCES `studente` (`matricola`),
  CONSTRAINT `esame_ibfk_2` FOREIGN KEY (`corso`) REFERENCES `corso` (`nome`)
) ENGINE=InnoDB ;

--
-- Definition of table `pianodistudio`
--

CREATE TABLE `pianodistudio` (
  `studente` int(200) NOT NULL,
  `tipo` enum('Sistemi Informatici','PLM') NOT NULL,
  PRIMARY KEY  (`studente`),
  CONSTRAINT `pianodistudio_ibfk_1` FOREIGN KEY (`studente`) REFERENCES `studente` (`matricola`)
) ENGINE=InnoDB ;

--
-- Definition of table `prevede`
--

CREATE TABLE `prevede` (
  `pianoDiStudio` int(15) NOT NULL,
  `corso` varchar(200) NOT NULL,
  PRIMARY KEY  (`pianoDiStudio`,`corso`),
  KEY `corso` (`corso`),
  CONSTRAINT `prevede_ibfk_1` FOREIGN KEY (`pianoDiStudio`) REFERENCES `pianodistudio` (`studente`),
  CONSTRAINT `prevede_ibfk_2` FOREIGN KEY (`corso`) REFERENCES `corso` (`nome`)
) ENGINE=InnoDB ;

--
-- Definition of table `relazionefinale`
--

CREATE TABLE `relazionefinale` (
  `studente` int(15) NOT NULL,
  `n°Pagine` int(4) NOT NULL,
  PRIMARY KEY  (`studente`),
  CONSTRAINT `relazionefinale_ibfk_1` FOREIGN KEY (`studente`) REFERENCES `studente` (`matricola`),
  CONSTRAINT `relazionefinale_ibfk_2` FOREIGN KEY (`studente`) REFERENCES `argomento` (`relazione`)
) ENGINE=InnoDB ;


--
-- Definition of table `sessionedilaurea`
--

CREATE TABLE `sessionedilaurea` (
  `data` date NOT NULL,
  PRIMARY KEY  (`data`)
) ENGINE=InnoDB ;

--
-- Definition of table `studente`
--

CREATE TABLE `studente` (
  `matricola` int(15) NOT NULL,
  PRIMARY KEY  (`matricola`),
  CONSTRAINT `studente_ibfk_1` FOREIGN KEY (`matricola`) REFERENCES `pianodistudio` (`studente`)
) ENGINE=InnoDB ;




-- COMMENTI:
-- 1) il parametro di sistema FOREIGN_KEY_CHECKS assume di nuovo lo stato precedente all'esecuzione di questo file SQL
