DROP DATABASE IF EXISTS azienda;
CREATE DATABASE azienda;

\c azienda

CREATE TABLE IMPIEGATI(
    MatriImpie INTEGER PRIMARY KEY,
    Cognome VARCHAR,
    Nome VARCHAR,
    Citta VARCHAR,
    Stipendio INTEGER,
    NomeDipa VARCHAR(2) NULL,
    Ufficio INTEGER NULL,
    MatriImpieCapo INTEGER NULL REFERENCES IMPIEGATI(MatriImpie) ON UPDATE SET NULL
);


CREATE TABLE DIPARTIMENTI(
    NomeDipa VARCHAR(2) PRIMARY KEY,
    Citta VARCHAR(2),
    MatriImpieCassiere INTEGER NULL
);

/*
    Aggiunta dei vincoli di integrita' referenziale, in particolare occorre aggiungerli dopo la creazione delle tabelle;
    Nell' aggiunta di vincoli di integrita' referenziale non vengono riconosciute tabelle non ancora create!
*/

ALTER TABLE IMPIEGATI ADD FOREIGN KEY (NomeDipa) REFERENCES DIPARTIMENTI(NomeDipa) ON UPDATE CASCADE ON DELETE SET NULL;
ALTER TABLE DIPARTIMENTI ADD FOREIGN KEY (MatriImpieCassiere) REFERENCES IMPIEGATI(MatriImpie) ON UPDATE SET NULL;


/*
    Dipartimento con i relativi Impiegati
*/
INSERT INTO DIPARTIMENTI (NomeDipa, Citta, MatriImpieCassiere) VALUES ('SW', 'PD', NULL);
INSERT INTO IMPIEGATI (MatriImpie, Cognome, Nome, Citta, Stipendio, NomeDipa, Ufficio, MatriImpieCapo) VALUES (1, 'A', 'X', 'PD', 50, 'SW', 1, NULL);
INSERT INTO IMPIEGATI (MatriImpie, Cognome, Nome, Citta, Stipendio, NomeDipa, Ufficio, MatriImpieCapo) VALUES (2, 'A', 'Y', 'VI', 80, 'SW', 2, NULL);
INSERT INTO IMPIEGATI (MatriImpie, Cognome, Nome, Citta, Stipendio, NomeDipa, Ufficio, MatriImpieCapo) VALUES (5, 'C', 'Y', 'PD', 20, 'SW', 2, 2);
/*
    Aggiunta Impiegato con Capo non presente nel DB
 */
INSERT INTO IMPIEGATI (MatriImpie, Cognome, Nome, Citta, Stipendio, NomeDipa, Ufficio, MatriImpieCapo) VALUES (7, 'E', 'A', 'VI', 90, 'SW', 1, 4);


