Olá GUJ’s…
Estou criando um DAO chamado ServicoPrestadoDAO, e me surgiu uma dúvida. Na base de dados a tabela ServicoPrestado tem um relacionamento com a tabela empresa à partir do CNPJ. Por isso criei o FK usando o ALTER TABLE. A minha dúvida inicial é a seguinte:
Quando eu for criar um novo serviço prestado e passar um cnpj de uma empresa que não existe no meu banco será lançado uma exceção? Ou seja, o banco de dados deve barrar a entrada deste registro ou não? Será que eu terei que implementar esta consistência no próprio código do DAO?
Bom, eu fiz alguns testes, e parece que vou ter que fazer esta consistência no DAO mesmo, mas acho q o banco deveria cuidar disso, e não meu DAO. Fica muito deselegante e vai poluir muito meu código. Será que estou fazendo algo errado, o MySQL não suporte isso ou nenhum banco suporta?
O Script SQL segue abaixo:
DROP TABLE IF EXISTS `sabesbd`.`empresa`;
CREATE TABLE `empresa` (
`cnpj` varchar(14) NOT NULL default '',
`nome` varchar(30) NOT NULL default '',
`endereco` varchar(80) default NULL,
`complemento` varchar(20) default NULL,
`cidade` varchar(25) default NULL,
`estado` varchar(20) default NULL,
`bairro` varchar(20) default NULL,
`cep` varchar(9) default NULL,
`telefone` varchar(14) default NULL,
PRIMARY KEY (`cnpj`),
UNIQUE KEY `Unique` (`nome`)
) TYPE=InnoDB COMMENT='Tabela para armazenas empresas';
DROP TABLE IF EXISTS `sabesbd`.`servicoprestado`;
CREATE TABLE `servicoprestado` (
`idPK` bigint(20) unsigned NOT NULL auto_increment,
`cnpj_clienteFK` varchar(14) NOT NULL default '',
`titulo` varchar(25) NOT NULL default '',
`descricao` varchar(25) default NULL,
`dataInicio` DATETIME,
`dataTermino` DATETIME,
`comentario` VARCHAR(255),
`estado` VARCHAR(20),
`cidade` VARCHAR(25),
`bairro` VARCHAR(25),
PRIMARY KEY (`idPK`)
) TYPE=InnoDB;
ALTER TABLE `sabesbd`.`servicoprestado` ADD CONSTRAINT
`FK_servicoprestado_1` FOREIGN KEY `FK_servicoprestado_1` (`cnpj_clienteFK`)
REFERENCES `empresa` (`cnpj`)
ON DELETE RESTRICT
ON UPDATE RESTRICT;
Desde já agradeço!
Thiago Senna
