-- MySQL Administrator dump 1.4
--
-- ------------------------------------------------------
-- Server version	5.0.45-community-nt

/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;

-- COMMENTI SULLO STATEMENT DI CUI SOPRA:
-- 1) Per informazioni sul parametro FOREIGN_KEY_CHECKS, vedere le ultime slide del testo dell'esercitazione 2.
-- 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`
--

DROP TABLE IF EXISTS `argomento`;
CREATE TABLE `argomento` (
  `relazione` int(15) NOT NULL,
  `corso` varchar(50) 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`
--

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

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

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

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

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


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

DROP TABLE IF EXISTS `discussione`;
CREATE TABLE `discussione` (
  `relazioneFinale` int(15) NOT NULL,
  `sessioneDiLaurea` date NOT NULL,
  `voto` int(3) 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 ;


--
-- Definition of table `esame`
--

DROP TABLE IF EXISTS `esame`;
CREATE TABLE `esame` (
  `studente` int(10) NOT NULL,
  `corso` varchar(50) NOT NULL,
  `voto` enum('30','29','28','27','26','25','24','23','22','21','20','19','18') NOT NULL, -- sarebbe stato possibile risolvere questo vincolo anche con un trigger
  `data` date NOT NULL,
  PRIMARY KEY  (`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`
--

DROP TABLE IF EXISTS `pianodistudio`;
CREATE TABLE `pianodistudio` (
  `studente` int(15) 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`
--

DROP TABLE IF EXISTS `prevede`;
CREATE TABLE `prevede` (
  `pianoDiStudio` int(15) NOT NULL,
  `corso` varchar(50) 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`
--

DROP TABLE IF EXISTS `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`
--

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

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

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



/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;

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

