-- https://www.phpmyadmin.net/
--
-- Tempo de geração: 12/06/2026 às 20:18
-- Versão do servidor: 10.4.32-MariaDB
-- Versão do PHP: 8.2.12

START TRANSACTION;



--
-- Banco de dados: `trabalhoana`
--

DELIMITER $$
--
-- Procedimentos
--
CREATE DEFINER=`root`@`localhost` PROCEDURE `verificaativocoletorana` (IN `p_idcoletora` INT, OUT `p_ativo` BOOLEAN)   BEGIN

SELECT ativo
INTO p_ativo
FROM coletorana
WHERE idcoletorana = p_idcoletora;

END$$

CREATE DEFINER=`root`@`localhost` PROCEDURE `verificaativomacana` (IN `p_idmac` VARCHAR(17), OUT `p_ativo` BOOLEAN)   BEGIN

SELECT ativo
INTO p_ativo
FROM macana
WHERE idmacana = p_idmac;

END$$

CREATE DEFINER=`root`@`localhost` PROCEDURE `verificaativosensorana` (IN `p_idsensor` INT, OUT `p_ativo` BOOLEAN)   BEGIN

SELECT ativo
INTO p_ativo
FROM sensorana
WHERE idsensorana = p_idsensor;

END$$

CREATE DEFINER=`root`@`localhost` PROCEDURE `verificalimitecoletorana` (IN `p_idcoletora` INT, OUT `p_contador` INT, OUT `p_limite` INT)   BEGIN

SELECT contador, limite
INTO p_contador, p_limite
FROM coletorana
WHERE idcoletorana = p_idcoletora;

END$$

CREATE DEFINER=`root`@`localhost` PROCEDURE `verificalimitemacana` (IN `p_idmac` VARCHAR(17), OUT `p_contador` INT, OUT `p_limite` INT)   BEGIN

SELECT contador, limite
INTO p_contador, p_limite
FROM macana
WHERE idmacana = p_idmac;

END$$

CREATE DEFINER=`root`@`localhost` PROCEDURE `verificalimitesensorana` (IN `p_idsensor` INT, OUT `p_contador` INT, OUT `p_limite` INT)   BEGIN

SELECT contador, limite
INTO p_contador, p_limite
FROM sensorana
WHERE idsensorana = p_idsensor;

END$$

DELIMITER ;

-- --------------------------------------------------------

--
-- Estrutura para tabela `coletorana`
--

CREATE TABLE `coletorana` (
  `idcoletorana` int(10) UNSIGNED NOT NULL,
  `nome` varchar(45) DEFAULT NULL,
  `contador` int(10) UNSIGNED DEFAULT 0,
  `ativo` tinyint(1) DEFAULT 1,
  `limite` int(10) UNSIGNED DEFAULT 100
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

--
-- Despejando dados para a tabela `coletorana`
--

INSERT INTO `coletorana` (`idcoletorana`, `nome`, `contador`, `ativo`, `limite`) VALUES
(1, 'Coletor Teste', 9, 1, 10);

-- --------------------------------------------------------

--
-- Estrutura para tabela `leituraana`
--

CREATE TABLE `leituraana` (
  `idleituraana` int(10) UNSIGNED NOT NULL,
  `coletorana_idcoletorAna` int(10) UNSIGNED NOT NULL,
  `macana_idmacAna` varchar(17) NOT NULL,
  `sensorana_idsensorAna` int(10) UNSIGNED NOT NULL,
  `dataleitura` date DEFAULT NULL,
  `horaleitura` time DEFAULT NULL,
  `valor` int(10) UNSIGNED DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

--
-- Acionadores `leituraana`
--
DELIMITER $$
CREATE TRIGGER `TgDeleteLeituraana` AFTER DELETE ON `leituraana` FOR EACH ROW BEGIN

UPDATE macana
SET contador = contador - 1
WHERE idmacana = OLD.macana_idmacAna;

UPDATE coletorana
SET contador = contador - 1
WHERE idcoletorana = OLD.coletorana_idcoletorAna;

UPDATE sensorana
SET contador = contador - 1
WHERE idsensorana = OLD.sensorana_idsensorAna;

END
$$
DELIMITER ;
DELIMITER $$
CREATE TRIGGER `TgInsertLeituraana` AFTER INSERT ON `leituraana` FOR EACH ROW BEGIN

UPDATE macana
SET contador = contador + 1
WHERE idmacana = NEW.macana_idmacAna;

UPDATE coletorana
SET contador = contador + 1
WHERE idcoletorana = NEW.coletorana_idcoletorAna;

UPDATE sensorana
SET contador = contador + 1
WHERE idsensorana = NEW.sensorana_idsensorAna;

END
$$
DELIMITER ;
DELIMITER $$
CREATE TRIGGER `trg_valida_coletorana` BEFORE INSERT ON `leituraana` FOR EACH ROW BEGIN
    DECLARE v_ativo TINYINT;
    DECLARE v_contador INT;
    DECLARE v_limite INT;

    SELECT ativo INTO v_ativo
    FROM coletorana
    WHERE idcoletorana = NEW.coletorana_idcoletorAna;

    IF v_ativo = 0 THEN
        SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Coletor inativo';
    END IF;

    SELECT contador, limite INTO v_contador, v_limite
    FROM coletorana
    WHERE idcoletorana = NEW.coletorana_idcoletorAna;

    IF v_contador >= v_limite THEN
        SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Coletor atingiu o limite';
    END IF;
END
$$
DELIMITER ;
DELIMITER $$
CREATE TRIGGER `trg_valida_macana` BEFORE INSERT ON `leituraana` FOR EACH ROW BEGIN
    DECLARE v_ativo TINYINT;
    DECLARE v_contador INT;
    DECLARE v_limite INT;

    SELECT ativo INTO v_ativo
    FROM macana
    WHERE idmacana = NEW.macana_idmacAna;

    IF v_ativo = 0 THEN
        SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Mac inativo';
    END IF;

    SELECT contador, limite INTO v_contador, v_limite
    FROM macana
    WHERE idmacana = NEW.macana_idmacAna;

    IF v_contador >= v_limite THEN
        SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Mac atingiu o limite';
    END IF;
END
$$
DELIMITER ;
DELIMITER $$
CREATE TRIGGER `trg_valida_sensorana` BEFORE INSERT ON `leituraana` FOR EACH ROW BEGIN
    DECLARE v_ativo TINYINT;
    DECLARE v_contador INT;
    DECLARE v_limite INT;

    SELECT ativo INTO v_ativo
    FROM sensorana
    WHERE idsensorana = NEW.sensorana_idsensorAna;

    IF v_ativo = 0 THEN
        SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Sensor inativo';
    END IF;

    SELECT contador, limite INTO v_contador, v_limite
    FROM sensorana
    WHERE idsensorana = NEW.sensorana_idsensorAna;

    IF v_contador >= v_limite THEN
        SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Sensor atingiu o limite';
    END IF;
END
$$
DELIMITER ;

-- --------------------------------------------------------

--
-- Estrutura para tabela `macana`
--

CREATE TABLE `macana` (
  `idmacana` varchar(17) NOT NULL,
  `nome` varchar(45) DEFAULT NULL,
  `contador` int(10) UNSIGNED DEFAULT 0,
  `ativo` tinyint(1) DEFAULT 1,
  `limite` int(10) UNSIGNED DEFAULT 100
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

-- --------------------------------------------------------

--
-- Estrutura para tabela `sensorana`
--

CREATE TABLE `sensorana` (
  `idsensorana` int(10) UNSIGNED NOT NULL,
  `nome` varchar(45) DEFAULT NULL,
  `ativo` tinyint(1) DEFAULT 1,
  `limite` int(10) UNSIGNED DEFAULT 100,
  `contador` int(10) UNSIGNED DEFAULT 0,
  `unidade` varchar(10) DEFAULT NULL,
  `sigla` varchar(3) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

--
-- Despejando dados para a tabela `sensorana`
--

INSERT INTO `sensorana` (`idsensorana`, `nome`, `ativo`, `limite`, `contador`, `unidade`, `sigla`) VALUES
(1, 'Sensor Teste', 1, 10, 0, 'Celsius', 'C');

--
-- Índices para tabelas despejadas
--

--
-- Índices de tabela `coletorana`
--
ALTER TABLE `coletorana`
  ADD PRIMARY KEY (`idcoletorana`);

--
-- Índices de tabela `leituraana`
--
ALTER TABLE `leituraana`
  ADD PRIMARY KEY (`idleituraana`),
  ADD KEY `leituraAluno_FKIndex1` (`coletorana_idcoletorAna`),
  ADD KEY `leituraAluno_FKIndex2` (`macana_idmacAna`),
  ADD KEY `leituraAluno_FKIndex3` (`sensorana_idsensorAna`);

--
-- Índices de tabela `macana`
--
ALTER TABLE `macana`
  ADD PRIMARY KEY (`idmacana`);

--
-- Índices de tabela `sensorana`
--
ALTER TABLE `sensorana`
  ADD PRIMARY KEY (`idsensorana`);

--
-- AUTO_INCREMENT para tabelas despejadas
--

--
-- AUTO_INCREMENT de tabela `coletorana`
--
ALTER TABLE `coletorana`
  MODIFY `idcoletorana` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=2;

--
-- AUTO_INCREMENT de tabela `leituraana`
--
ALTER TABLE `leituraana`
  MODIFY `idleituraana` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=2;

--
-- AUTO_INCREMENT de tabela `sensorana`
--
ALTER TABLE `sensorana`
  MODIFY `idsensorana` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=3;

--
-- Restrições para tabelas despejadas
--

--
-- Restrições para tabelas `leituraana`
--
ALTER TABLE `leituraana`
  ADD CONSTRAINT `leituraana_ibfk_1` FOREIGN KEY (`coletorana_idcoletorAna`) REFERENCES `coletorana` (`idcoletorana`) ON DELETE NO ACTION ON UPDATE NO ACTION,
  ADD CONSTRAINT `leituraana_ibfk_2` FOREIGN KEY (`macana_idmacAna`) REFERENCES `macana` (`idmacana`) ON DELETE NO ACTION ON UPDATE NO ACTION,
  ADD CONSTRAINT `leituraana_ibfk_3` FOREIGN KEY (`sensorana_idsensorAna`) REFERENCES `sensorana` (`idsensorana`) ON DELETE NO ACTION ON UPDATE NO ACTION;
COMMIT;

