Implementare una vista

di il
4 risposte

Implementare una vista

Ciao a tutti, sto cercando di eseguire questa View relativa alla tabella sottostante

LISTA_FILIALI_CON_MUTUI_ATTIVI(NomeFiliale, Numero) -> calcola, per ogni filiale, il numero di mutui con stato ATTIVO sottoscritti da utenti di quella filiale.



DROP DATABASE IF EXISTS CASAMUTUO;
CREATE DATABASE CASAMUTUO;
USE CASAMUTUO;

#Creo le table ed inserisco i vincoli di integrità referenziale al loro interno
CREATE TABLE `FILIALE` (
  `Nome` varchar(30) PRIMARY KEY,
  `Via` varchar(30),
  `Citta` varchar(30),
  `NumeroClienti` int DEFAULT 0
  
) ENGINE=InnoDB;

CREATE TABLE `CLIENTE` (
  `Email` varchar(30) PRIMARY KEY,
  `Nome` varchar(30),
  `Cognome` varchar(30),
  `AnnoNascita` int,
  `NomeFiliale` varchar(30),
  
  FOREIGN KEY (NomeFiliale) REFERENCES Filiale(Nome)
  
) ENGINE=InnoDB;

CREATE TABLE `IMMOBILE` (
  `Codice` varchar(30)  PRIMARY KEY,
  `Via` varchar(30) NOT NULL,
  `Citta` varchar(30) NOT NULL,
  `AnnoFabbricazione` int,
  `Tipologia` ENUM("APPARTAMENTO", "CASA_SINGOLA")
  
) ENGINE=InnoDB;

CREATE TABLE `MUTUO` (
  `Codice` varchar(30) PRIMARY KEY,
  `EmailCliente` varchar(30),
  `CodiceImmobile` varchar(30),
  `DataAvvio` DateTime,
  `ImportoTotale` int NOT NULL,
  `Stato` ENUM("APERTO", "ATTIVO", "SALDATO") DEFAULT "APERTO",
  
  FOREIGN KEY (EmailCliente) REFERENCES Cliente(Email) ON DELETE CASCADE,
  FOREIGN KEY (CodiceImmobile) REFERENCES Immobile(Codice)
  
) ENGINE=InnoDB;

CREATE TABLE `RATA` (
  `Numero` int AUTO_INCREMENT PRIMARY KEY,
  `CodiceMutuo` varchar(30),
  `Data` Datetime,
  `Importo` int NOT NULL,
  
  FOREIGN KEY (CodiceMutuo) REFERENCES Mutuo(Codice) ON DELETE CASCADE
    
) ENGINE=InnoDB;

CREATE TABLE `APPUNTAMENTO` (
  `Emailcliente` varchar(30),
  `NomeFiliale` varchar(30),
  `Data` DateTime,
  PRIMARY KEY(`EmailCliente`, `NomeFiliale`, `Data`),
  
  FOREIGN KEY (EmailCliente) REFERENCES Cliente(Email) ON DELETE CASCADE,
  FOREIGN KEY (NomeFiliale) REFERENCES Filiale(Nome)
    
) ENGINE=InnoDB;

#trigger a)
DELIMITER $
CREATE TRIGGER CambiaStatoMutuo
AFTER INSERT ON RATA 
FOR EACH ROW
BEGIN
IF((SELECT SUM (Importo) FROM RATA) >= Mutuo.ImportoTotale) THEN
	UPDATE MUTUO SET Stato = "SALDATO";
END IF;
END $
DELIMITER ;

#trigger b)
DELIMITER $
CREATE TRIGGER IncrementaNumeroClienti
AFTER INSERT ON CLIENTE
FOR EACH ROW
BEGIN
	UPDATE FILIALE SET NumeroClienti=NumeroClienti+1;
END $
DELIMITER ;

#trigger c)
DELIMITER $
CREATE TRIGGER DecrementaNumeroClienti
AFTER DELETE ON CLIENTE
FOR EACH ROW
BEGIN
	UPDATE FILIALE SET NumeroClienti=NumeroClienti-1;
END $
DELIMITER ;


#Popolo le tabelle
INSERT INTO FILIALE (Nome, Via, Citta, NumeroClienti) VALUES ("Margherita","Giardini Margherita", "Bologna", DEFAULT);
INSERT INTO FILIALE (Nome, Via, Citta, NumeroClienti) VALUES ("Corticella1","Via di Corticella 2", "Bologna", DEFAULT);
INSERT INTO FILIALE (Nome, Via, Citta, NumeroClienti) VALUES ("Imola1","Piazza Garibaldi", "Imola", DEFAULT);
INSERT INTO FILIALE (Nome, Via, Citta, NumeroClienti) VALUES ("Saragozza1","Via Saragozza 4", "Bologna", DEFAULT);

INSERT INTO CLIENTE VALUES ("michele.bianchi@email.it","Michele","Bianchi", 1980, "Margherita");
INSERT INTO CLIENTE VALUES ("maria.rossi@email.it","Maria","Rossi", 2000, "Margherita");
INSERT INTO CLIENTE VALUES ("dario.verdi@email.it","Dario","Verdi", 2001, "Margherita");
INSERT INTO CLIENTE VALUES ("michela.neri@email.it","Michela","Neri", 1965, "Corticella1");
INSERT INTO CLIENTE VALUES ("giovanni.viola@email.it","Giovanni","Viola", 1975, "Corticella1");
INSERT INTO CLIENTE VALUES ("sara.indaco@email.it","Sara","Indaco", 1977, "Imola1");
INSERT INTO CLIENTE VALUES ("manuela.arancio@email.it","Manuela","Arancio", 1978, "Saragozza1");

INSERT INTO IMMOBILE VALUES ("I0","Via Murri 3","Bologna",1960,"APPARTAMENTO");
INSERT INTO IMMOBILE VALUES ("I1","Via Zamboni 1","Bologna",1956,"APPARTAMENTO");
INSERT INTO IMMOBILE VALUES ("I2","Via Ugo Bassi","Bologna",1966,"APPARTAMENTO");
INSERT INTO IMMOBILE VALUES ("I3","Via Mazzini","Imola",1968,"CASA_SINGOLA");
INSERT INTO IMMOBILE VALUES ("I4","Via Siepelunga 1","Bologna",1988,"CASA_SINGOLA");

4 Risposte

  • Re: Implementare una vista

    Ma hai scritto nulla tu? Non ho capito
  • Re: Implementare una vista

    oregon ha scritto:


    Ma hai scritto nulla tu? Non ho capito
    Si ho eseguito altre query ma questa non riesco ad effettuarla, ho un pdf con procedure e altre cose da dover eseguire ma che non posso allegare, questo pezzo di codice allegato comunque l' ho scritto tutto io... e poi altri pezzi che non ho condiviso perchè inutili
  • Re: Implementare una vista

    Io dico la view che chiedi non l'ho neanche iniziata a scrivere? La vuoi scritta interamente dal forum? Sai che è vietata la richiesta di soluzioni complete di esercizi?
  • Re: Implementare una vista

    oregon ha scritto:


    Io dico la view che chiedi non l'ho neanche iniziata a scrivere? La vuoi scritta interamente dal forum? Sai che è vietata la richiesta di soluzioni complete di esercizi?
    io fino ad ora ho fatto questo, non sapevo fosse vietato, mi scuso
    
    DELIMITER |
     CREATE VIEW LISTA_FILIALI_CON_MUTUI_ATTIVI(NomeFiliale, Numero)
        AS SELECT CLIENTE.NomeFiliale, COUNT(*)
        FROM CLIENTE,MUTUO
        WHERE (MUTUO.EmailCliente=CLIENTE.Email) AND (MUTUO.Stato="ATTIVO")
        GROUP BY CLIENTE.NomeFiliale;
    |
    DELIMITER;
    
Devi accedere o registrarti per scrivere nel forum
4 risposte