Como organizar os dados na hora de salvar no banco (mysql)

4 respostas
Spotik

Bom dia,
Estou fazendo um projeto da faculdade referente a uma locadora de carros.
Existe a possibilidade de se alugar mais de um carro em uma única locação, então dessa forma eu divida as tabelas em

LOCAÇÃO
ITEM DE LOCAÇÃO
VEICULO

As tabelas estão +/- assim (não defini os tipos corretamente pois estava utilizando apenas para testes)

//CLIENTE PJ

CREATE  TABLE `locadora`.`clientepf` (  

`codigo` INT NOT NULL AUTO_INCREMENT ,
`nome` VARCHAR(45) NOT NULL ,
`email` VARCHAR(45) NOT NULL ,
`cpf` VARCHAR(45) NOT NULL , 
`rg` VARCHAR(45) NOT NULL , 
`cidade` VARCHAR(45) NOT NULL ,
`telefoneRes` VARCHAR(45) NOT NULL ,
`telefoneCom` VARCHAR(45) NULL , 
`celular` VARCHAR(45) NULL , 
`endereco` VARCHAR(45) NOT NULL , 
`complemento` VARCHAR(45) NULL ,  
`bairro` VARCHAR(45) NOT NULL ,  
`cep` VARCHAR(45) NOT NULL , 
`estado` VARCHAR(45) NOT NULL ,  
`habilitacao` VARCHAR(45) NOT NULL , 
`registro` VARCHAR(45) NOT NULL , 
`validade` Date NOT NULL , 
`passaporte` VARCHAR(45) NULL ,  
`dataNasc` date NOT NULL ,  
`estadoEmissor` VARCHAR(45) NOT NULL ,
`sexo` VARCHAR(45) NOT NULL ,
`estrangeiro` VARCHAR(45) NOT NULL ,

PRIMARY KEY (`codigo`) ,  
UNIQUE INDEX `codigo_UNIQUE` (`codigo` ASC) 
)ENGINE = InnoDB;
//ITEM LOCAÇÃO
CREATE  TABLE `locadora`.`itemPedido` (
`codigo` INT NOT NULL AUTO_INCREMENT ,
`idVeiculo` INT NOT NULL ,
`idPedido` INT NOT NULL ,
PRIMARY KEY (`codigo`) ,
INDEX `idPedido` (`codigo` ASC) ,
CONSTRAINT `idPedido`
FOREIGN KEY (`codigo` )
REFERENCES `locadora`.`locacao`(`codigo` )
CONSTRAINT `idVeiculo`
FOREIGN KEY (`codigo` )
REFERENCES `locadora`.`veiculo`(`codigo` )
);
//VEICULO
CREATE  TABLE `locadora`.`veiculo` (

`codigo` INT NOT NULL AUTO_INCREMENT ,
`fabricante` VARCHAR(45) NOT NULL ,
`placa` VARCHAR(45) NOT NULL ,
`cidade` VARCHAR(45) NOT NULL ,
`km` INT(10) NOT NULL ,
`modelo` VARCHAR(45) NOT NULL ,
`chassi` VARCHAR(45) NOT NULL ,
`portas` VARCHAR(45) NOT NULL ,
`estado` VARCHAR(45) NOT NULL ,
`grupo` VARCHAR(45) NOT NULL ,
`ano` INT(4) NOT NULL ,

PRIMARY KEY (`codigo`) ,
UNIQUE INDEX `codigo_UNIQUE` (`codigo` ASC)
)
//LOCAÇÃO
CREATE  TABLE `locadora`.`locacao` (
`codigo` INT NOT NULL,
`dataDevolucao` DATE NOT NULL ,
`dataRetirada` DATE NOT NULL ,
`horaRetirada` VARCHAR(45) NOT NULL ,
`horaDevolucao` VARCHAR(45) NOT NULL , 
`navegadorGps` VARCHAR(45) NOT NULL ,
`cadeiraBebe` VARCHAR(45) NOT NULL ,
`motorista` VARCHAR(45) NOT NULL , 
`taxa` VARCHAR(45) NOT NULL ,  
`clienteLocacao` VARCHAR(45) NOT NULL , 
PRIMARY KEY (`codigo`) ,  
INDEX `clienteLocacao` (`codigo` ASC) ,
CONSTRAINT `clienteLocacao`
FOREIGN KEY (`codigo` )  
REFERENCES `locadora`.`clientepf` (`codigo` )
ON DELETE CASCADE 
ON UPDATE CASCADE)

Eu entendo que na locação podem existeir mais de 1 item de locação(veiculo) porém eu não sei como isso será feito quando eu der o comando "salvar locação". O que eu tenho que setar aonde no banco.

Não sei se deu pra entender bem minha dúvida =/

4 Respostas

drsmachado

Você terá a tabela de locação, a de veículos e a associativa entre elas (item_pedido).
item_pedido é composta, entre outras coisas, pela fk de veículo e de locacao, certo?
Assim sendo, primeiro será preciso inserir na tabela de veículo (ter ao menos 1 veículo para locar), depois em locação (não se pode disponibilizar uma locação sem registrá-la) e então os veículos que serão locados.

Spotik

Pelo que eu entendi eu insiro um “veiculo” no “item_locacao”, e depois insiro esse “item_locacao” na “locação”…

Eu não entendi como aplicar isso na pratica… considerando que eu jah tenho veiculos cadastrados…

drsmachado

Spotik:
Pelo que eu entendi eu insiro um “veiculo” no “item_locacao”, e depois insiro esse “item_locacao” na “locação”…

Eu não entendi como aplicar isso na pratica… considerando que eu jah tenho veiculos cadastrados…


Entendeu errado
Você terá uma tabela contendo os veículos que estão disponíveis para locação, certo?
Essa tabela possui uma PK, que vou chamar id_veiculo.
Você possui uma tabela de locacao, que também possui uma PK chamada id_locacao.
Quando você vai lá no sistema, clica em “Gerar Locação”, o sistema cria uma nova locação, popula a id_locacao com um valor e os demais dados do cliente.
Aí o cliente escolhe um carro qualquer, vamos supor, um bugatti veyron.
O sistema já fez o select, trouxe todos os veículos e você só marca o checkbox do bugatti indicando que o mesmo está naquela locação.
Aí o sistema começa a popular a tabela item_locacao, informando a PK id_locacao como FK fk_id_locacao e a PK id_veiculo como a FK fk_id_veiculo.
Se houver mais carros, o processo se repete.
Perceba que primeiro você populou veículo, depois locação e por último relacionou os dois.

Entendeu?

Spotik

Acho que ficou mais claro agora…
a sequencia seria +/-
um INSERT na ‘locacao’ criando assim uma nova locação com os dados do cliente (nesse caso poderia ser uma PK do cliente como um Fk_id_cliente na locação)
depois um INSERT no ‘item_locacao’ com a PK id_locacao como FK fk_id_locacao e a PK idveiculo como a FK fk_id_veiculo.
Ai se for mais de um veiculo eu só repito o processo assima.

Ai por exemplo se eu precisar fazer uma busca de locações feitas por aquele cliente eu efetuo a busca na locação onde o fk_id_cliente bate com o pk_id_cliente da tabela cliente…

Criado 17 de outubro de 2011
Ultima resposta 17 de out. de 2011
Respostas 4
Participantes 2