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

START TRANSACTION;



--
-- Banco de dados: `bancodebus_proj4`
--

DELIMITER $$
--
-- Procedimentos
--
CREATE DEFINER=`root`@`localhost` PROCEDURE `verificaativodebus` (IN `$idmac` VARCHAR(17), OUT `$ativo` BOOLEAN)   BEGIN

SELECT ativo INTO $ativo

FROM mac WHERE idmac=$idmac;

END$$

CREATE DEFINER=`root`@`localhost` PROCEDURE `verificalimitealunodebus` (IN `$idaluno` INT, OUT `$limitealuno` INT, OUT `$contadoraluno` INT)   begin
select limite into $limitealuno
from aluno
where idaluno =$idaluno;

select contador into $contadoraluno
from aluno
where idaluno =$idaluno;

end$$

CREATE DEFINER=`root`@`localhost` PROCEDURE `verificalimitemacdebus` (IN `$idmac` VARCHAR(17), OUT `$limitemac` INT, OUT `$contadormac` INT)   BEGIN
SELECT limite into $limitemac
FROM mac 
WHERE idmac = $idmac;

SELECT contador into $contadormac
FROM mac 
WHERE idmac = $idmac;

END$$

CREATE DEFINER=`root`@`localhost` PROCEDURE `verificalimitesensordebus` (IN `$idsensor` INT, OUT `$limitesensor` INT, OUT `$contadorsensor` INT)   begin
select limite into $limitesensor
from sensor
where idsensor=$idsensor;
select contador into $contadorsensor
from sensor
where idsensor=$idsensor;
end$$

DELIMITER ;

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

--
-- Estrutura para tabela `aluno`
--

CREATE TABLE `aluno` (
  `idaluno` 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 `aluno`
--

INSERT INTO `aluno` (`idaluno`, `nome`, `contador`, `ativo`, `limite`) VALUES
(1, 'Davi Debus', 3, 1, 100);

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

--
-- Estrutura para tabela `leituradebus`
--

CREATE TABLE `leituradebus` (
  `idleituradebus` int(10) UNSIGNED NOT NULL,
  `aluno_idaluno` int(10) UNSIGNED NOT NULL,
  `sensor_idsensor` int(10) UNSIGNED NOT NULL,
  `mac_idmac` varchar(17) 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;

--
-- Despejando dados para a tabela `leituradebus`
--

INSERT INTO `leituradebus` (`idleituradebus`, `aluno_idaluno`, `sensor_idsensor`, `mac_idmac`, `dataleitura`, `horaleitura`, `valor`) VALUES
(2, 1, 1, '01', '2026-06-01', '30:12:21', 100),
(3, 1, 1, '01', '2026-06-01', '30:12:21', 4),
(4, 1, 1, '01', '2026-06-01', '30:12:21', 4);

--
-- Acionadores `leituradebus`
--
DELIMITER $$
CREATE TRIGGER `tgdeleteleituradebus` AFTER DELETE ON `leituradebus` FOR EACH ROW begin 
update aluno
SET contador=contador-1
WHERE idaluno=old.aluno_idaluno; 

UPDATE mac
SET contador=contador-1
WHERE idmac=old.mac_idmac; 

UPDATE sensor
SET contador=contador-1
WHERE idsensor=old.sensor_idsensor; 

end
$$
DELIMITER ;
DELIMITER $$
CREATE TRIGGER `tginsertleituradebus` AFTER INSERT ON `leituradebus` FOR EACH ROW BEGIN
UPDATE aluno 
SET contador=contador+1
WHERE idaluno= new.aluno_idaluno;
 
UPDATE mac 
SET contador= contador+1
WHERE idmac=new.mac_idmac; 

UPDATE sensor 
SET contador=contador+1
WHERE idsensor=new.sensor_idsensor;

end
$$
DELIMITER ;
DELIMITER $$
CREATE TRIGGER `tglimitealunodebus` BEFORE INSERT ON `leituradebus` FOR EACH ROW begin
CALL
verificalimitealunodebus(new.aluno_idaluno,@$limite,@$contador);
IF @$contador>=@$limite
THEN SIGNAL SQLSTATE '45000'
set message_text='limite de gravações atingido';
end if;
end
$$
DELIMITER ;
DELIMITER $$
CREATE TRIGGER `tglimitemacdebus` BEFORE INSERT ON `leituradebus` FOR EACH ROW begin
CALL
verificalimitemacdebus(new.mac_idmac,@$limite,@$contador);
IF @$contador>=@$limite
THEN SIGNAL SQLSTATE '45000'
set message_text='limite de gravações atingido';
end if;
end
$$
DELIMITER ;
DELIMITER $$
CREATE TRIGGER `tglimitesensordebus` BEFORE INSERT ON `leituradebus` FOR EACH ROW begin
CALL
verificalimitesensordebus(new.sensor_idsensor,@$limite,@$contador);
IF @$contador>=@$limite
THEN SIGNAL SQLSTATE '45000'
set message_text='limite de gravações atingido';
end if;
end
$$
DELIMITER ;
DELIMITER $$
CREATE TRIGGER `tgverificaativodebus` BEFORE INSERT ON `leituradebus` FOR EACH ROW BEGIN
CALL verificaativodebus(new.mac_idmac,@$ativo);
if @$ativo=0 then SIGNAL SQLSTATE'45000'
set MESSAGE_TEXT='esta placa está inativa';
end if;
END
$$
DELIMITER ;

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

--
-- Estrutura para tabela `mac`
--

CREATE TABLE `mac` (
  `idmac` 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;

--
-- Despejando dados para a tabela `mac`
--

INSERT INTO `mac` (`idmac`, `nome`, `contador`, `ativo`, `limite`) VALUES
('01', 'mac01', 3, 1, 100);

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

--
-- Estrutura para tabela `sensor`
--

CREATE TABLE `sensor` (
  `idsensor` 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 `sensor`
--

INSERT INTO `sensor` (`idsensor`, `nome`, `ativo`, `limite`, `contador`, `unidade`, `sigla`) VALUES
(1, 'sensor1', 1, 100, 1, 'sen', 'sen');

--
-- Índices para tabelas despejadas
--

--
-- Índices de tabela `aluno`
--
ALTER TABLE `aluno`
  ADD PRIMARY KEY (`idaluno`);

--
-- Índices de tabela `leituradebus`
--
ALTER TABLE `leituradebus`
  ADD PRIMARY KEY (`idleituradebus`),
  ADD KEY `leitura_FKIndex1` (`mac_idmac`),
  ADD KEY `leitura_FKIndex2` (`sensor_idsensor`),
  ADD KEY `leitura_FKIndex3` (`aluno_idaluno`);

--
-- Índices de tabela `mac`
--
ALTER TABLE `mac`
  ADD PRIMARY KEY (`idmac`);

--
-- Índices de tabela `sensor`
--
ALTER TABLE `sensor`
  ADD PRIMARY KEY (`idsensor`);

--
-- AUTO_INCREMENT para tabelas despejadas
--

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

--
-- AUTO_INCREMENT de tabela `leituradebus`
--
ALTER TABLE `leituradebus`
  MODIFY `idleituradebus` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=5;

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

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

--
-- Restrições para tabelas `leituradebus`
--
ALTER TABLE `leituradebus`
  ADD CONSTRAINT `leituradebus_ibfk_1` FOREIGN KEY (`mac_idmac`) REFERENCES `mac` (`idmac`) ON DELETE NO ACTION ON UPDATE NO ACTION,
  ADD CONSTRAINT `leituradebus_ibfk_2` FOREIGN KEY (`sensor_idsensor`) REFERENCES `sensor` (`idsensor`) ON DELETE NO ACTION ON UPDATE NO ACTION,
  ADD CONSTRAINT `leituradebus_ibfk_3` FOREIGN KEY (`aluno_idaluno`) REFERENCES `aluno` (`idaluno`) ON DELETE NO ACTION ON UPDATE NO ACTION;
COMMIT;

