Baixa de estoque em relação a valor de produto negativo

Boas colegas, tenho um problema relativo ao projecto que estou a desenvolver, o projecto está relacionado a gestão de stock de um armazém. A questão é a seguinte ao requerer um produto ele diminui a quantidade em stock, até ai tudo bem mas quando o produto chega a quantidade zero ele começa a ficar com valor negativo. Como poderei corrigir isso, para que não permita requerer produtos em que a quantidade é zero. Estou a usar o mysql e a programar em java

Tabela onde onde a trigger é disparada para diminuir o estoque:

| producto | CREATE TABLE `producto` (
  `idProducto` int(11) NOT NULL AUTO_INCREMENT,
  `artigo` varchar(5) DEFAULT NULL,
  `data` datetime DEFAULT NULL,
  `tipoProducto` varchar(50) NOT NULL,
  `descricao` mediumtext NOT NULL,
  `quantidade` int(11) NOT NULL,
  `validade` varchar(15) DEFAULT NULL,
  PRIMARY KEY (`idProducto`),
  UNIQUE KEY `artigo` (`artigo`)
)

Tabela onde criei a trigger sempre que efectuar uma requisição

| requisicao | CREATE TABLE `requisicao` (
  `idRequisicao` int(11) NOT NULL AUTO_INCREMENT,
  `idDepartamento` int(4) NOT NULL,
  `idfuncionario` int(11) NOT NULL,
  `idProducto` int(11) NOT NULL,
  `data` datetime NOT NULL,
  `quantidade` int(11) NOT NULL,
  PRIMARY KEY (`idRequisicao`),
  KEY `idDepartamento` (`idDepartamento`),
  KEY `idFuncionario` (`idfuncionario`),
  KEY `idProducto` (`idProducto`),
  CONSTRAINT `requisicao_ibfk_1` FOREIGN KEY (`idDepartamento`) REFERENCES `departamento` (`iddepartamento`),
  CONSTRAINT `requisicao_ibfk_2` FOREIGN KEY (`idfuncionario`) REFERENCES `funcionario` (`idfuncionario`),
  CONSTRAINT `requisicao_ibfk_3` FOREIGN KEY (`idProducto`) REFERENCES `producto` (`idproducto`)
) ENGINE=InnoDB AUTO_INCREMENT=31 DEFAULT CHARSET=utf8 |

Você não pode verificar (na aplicação ou no banco) se a operação deixará o saldo negativo antes de executá-la? Pois assim, o usuário saberá que a operação não é possível antes mesmo de tentar executá-la (assim que seleciona um produto, o saldo já é exibido, por exemplo).

De todo modo, diretamente no banco, acredito que você consiga fazer uma trigger no evento before insert, que verifica se a quantidade a ser inserida irá deixar o saldo negativo. Se sim, a trigger pode disparar uma exceção, o que causa rollback na transação (o registro não será gravado) e você pode capturar o evento e avisar o usuário.

Obs: para facilitar sua vida, considere ter uma procedure ou view que te retorne o saldo de um produto. Assim, na trigger, você pode usá-la, ao invés de fazer um select sum().

Abraço.