Trabalho de Banco de Dados
Bom dia!
Meu professor de BD, passou um trabalho para fechar notas e estou tendo algumas dúvidas e como o tempo é curto resolvi recorrer a vocês. Gostaria de saber até que ponto podem me ajudar.
Projeto de Implementação SGBD
Descrição do Problema
A rede de hotéis Bom Sono necessita de uma aplicação de banco de dados para gerenciar suas atividades financeiras. O gerente forneceu a seguinte descrição
A rede BomSono possui hotéis em diversas cidades. Cada hotel possui apartamentos de diferentes tipos. Existem apartamentos com um ou duas camas de casal, casal com uma cama de solteiro, casal com duas camas de solteiro e apartamentos com 1,2,3 e 4 camas. Alguns destes quartos são adaptados para pessoas portadoras de necessidade especiais. Os apartamentos podem ou não ter TV e/ou frigobar e cada tipo de apartamento tem um valor de diária fixo.
As reservas são feitas com antecedência. O cliente deve-se cadastrar no site informando o nome, endereço, nacionalidade, e-mail, telefone de contato e uma senha. Para reserva deve-se escolher um tipo de apartamento, informar o número de pessoas e as datas previstas para entrada e saída. Um cliente pode realizar várias reservas e cada reserva tem um código de identificação.
Quando um cliente chega ao hotel e faz o check-in, uma conta é aberta é aberta para aquele período de hospedagem e todo consumo realizado fica associada a esta hospedagem. Uma nota fiscal com o valor total será gerada no momento do check-out. O pagamento pode ser feito em cheque, cartão de crédito ou de débito.
Cada diária da direito apenas o café da manhã. Despesas de consumo do frigobar são anotadas diariamente, pela camareira que arruma o quarto. Por questões de segurança e necessário registrar diariamente qual camareira arrumou cada quarto. Além das camareiras o hotel tem funcionários atendentes de recepção de serviço de quarto, serviço geral e gerentes. É necessário guardar os dados de cada funcionário.
O restaurante é terceirizado e por isso, as refeições e demais consumos realizados no restaurante são lançados na conta do hospede por meio de uma nota completa de consumo, que deve estar assinada pelo hospede. Consumos do restaurante entregues no quarto tem o acréscimo de 10%.
O hotel ainda oferece serviços de lavandeiria, e existe uma tabela de preços disponíveis no quarto (Ex: 1- Lavar e passar terno, 2- Lavar e passar vestido, 3- Camisa social, etc.). Eventuais serviços de lavanderia também são contabilizados na conta do hospede.
O cliente pode entrar no site e cancelar sua reserva, sem custo se o cancelamento for feito com dois dias de antecedência. Reservas não canceladas no prazo e/ou no-show geram uma cobrança de uma diária. O banco de dados deve manter o histórico de todos os dados necessários ao controle da estádia dos hóspedes.
Descrição do Trabalho:
Os trabalhos devem ser feitos em grupos de 3 e 4 pessoas.
1ª Etapa: Elaborar o esquema conceitual diagrama EER. Para um banco de dados a ser utilizados para gerenciar as informações do hotel.
2ª Etapa: Projetar o banco de dados do sistema para o SGBD MySQLe gerar o esquema lógico.
3ª Etapa: Criar uma base de dados e elaborar as seguintes consultas:
a) Obter dados dos clientes;
b) Consultar as reservas de um determinado cliente.
c) Obter os dados de todos os hóspedes, conforme a ficha do Ministério do Turismo
d) Consultar os consumos e valores de diárias de um determinado hóspede.
e) Gerar nota fiscal completa no ato do check-out.
f) Obter os relatórios financeiros, por hotel, por cliente. Além de relatórios consolidados por semana e por mês.
g) Obter relatório de cancelamentos.
h) Fazer uso de funções, gatilhos e procedimentos na especificação do banco de dados.
i) Inserir dados no BD.
Meu professor de BD, passou um trabalho para fechar notas e estou tendo algumas dúvidas e como o tempo é curto resolvi recorrer a vocês. Gostaria de saber até que ponto podem me ajudar.
Projeto de Implementação SGBD
Descrição do Problema
A rede de hotéis Bom Sono necessita de uma aplicação de banco de dados para gerenciar suas atividades financeiras. O gerente forneceu a seguinte descrição
A rede BomSono possui hotéis em diversas cidades. Cada hotel possui apartamentos de diferentes tipos. Existem apartamentos com um ou duas camas de casal, casal com uma cama de solteiro, casal com duas camas de solteiro e apartamentos com 1,2,3 e 4 camas. Alguns destes quartos são adaptados para pessoas portadoras de necessidade especiais. Os apartamentos podem ou não ter TV e/ou frigobar e cada tipo de apartamento tem um valor de diária fixo.
As reservas são feitas com antecedência. O cliente deve-se cadastrar no site informando o nome, endereço, nacionalidade, e-mail, telefone de contato e uma senha. Para reserva deve-se escolher um tipo de apartamento, informar o número de pessoas e as datas previstas para entrada e saída. Um cliente pode realizar várias reservas e cada reserva tem um código de identificação.
Quando um cliente chega ao hotel e faz o check-in, uma conta é aberta é aberta para aquele período de hospedagem e todo consumo realizado fica associada a esta hospedagem. Uma nota fiscal com o valor total será gerada no momento do check-out. O pagamento pode ser feito em cheque, cartão de crédito ou de débito.
Cada diária da direito apenas o café da manhã. Despesas de consumo do frigobar são anotadas diariamente, pela camareira que arruma o quarto. Por questões de segurança e necessário registrar diariamente qual camareira arrumou cada quarto. Além das camareiras o hotel tem funcionários atendentes de recepção de serviço de quarto, serviço geral e gerentes. É necessário guardar os dados de cada funcionário.
O restaurante é terceirizado e por isso, as refeições e demais consumos realizados no restaurante são lançados na conta do hospede por meio de uma nota completa de consumo, que deve estar assinada pelo hospede. Consumos do restaurante entregues no quarto tem o acréscimo de 10%.
O hotel ainda oferece serviços de lavandeiria, e existe uma tabela de preços disponíveis no quarto (Ex: 1- Lavar e passar terno, 2- Lavar e passar vestido, 3- Camisa social, etc.). Eventuais serviços de lavanderia também são contabilizados na conta do hospede.
O cliente pode entrar no site e cancelar sua reserva, sem custo se o cancelamento for feito com dois dias de antecedência. Reservas não canceladas no prazo e/ou no-show geram uma cobrança de uma diária. O banco de dados deve manter o histórico de todos os dados necessários ao controle da estádia dos hóspedes.
Descrição do Trabalho:
Os trabalhos devem ser feitos em grupos de 3 e 4 pessoas.
1ª Etapa: Elaborar o esquema conceitual diagrama EER. Para um banco de dados a ser utilizados para gerenciar as informações do hotel.
2ª Etapa: Projetar o banco de dados do sistema para o SGBD MySQLe gerar o esquema lógico.
3ª Etapa: Criar uma base de dados e elaborar as seguintes consultas:
a) Obter dados dos clientes;
b) Consultar as reservas de um determinado cliente.
c) Obter os dados de todos os hóspedes, conforme a ficha do Ministério do Turismo
d) Consultar os consumos e valores de diárias de um determinado hóspede.
e) Gerar nota fiscal completa no ato do check-out.
f) Obter os relatórios financeiros, por hotel, por cliente. Além de relatórios consolidados por semana e por mês.
g) Obter relatório de cancelamentos.
h) Fazer uso de funções, gatilhos e procedimentos na especificação do banco de dados.
i) Inserir dados no BD.
Jardel Martins
Curtidas 0
Melhor post
Jothaz
23/02/2016
Por ter ficado um pouco extenso, me perdi nas entidades e seus atributos com seus relacionamentos.
Posta o que você já fez e descreva suas dificuldades, pois sua resposta acima é muito vaga.
Assim fica mais fácil ajudá-lo!
GOSTEI 2
Mais Respostas
Jose Fernando
23/02/2016
Beleza, você passou descrição do trabalho, qual sua duvida?
GOSTEI 0
Jardel Martins
23/02/2016
Por ter ficado um pouco extenso, me perdi nas entidades e seus atributos com seus relacionamentos.
GOSTEI 0
Jose Fernando
23/02/2016
Posta o que você fez e o que está em dificuldade em fazer, mas iniciado.
GOSTEI 0
Jardel Martins
23/02/2016
[img:descricao=Acredito q se for desse jeito, ficará enorme]http://arquivo.devmedia.com.br/forum/imagem/453162-20160223-132837.jpg[/img]
GOSTEI 0
Rodrigo Nogueira
23/02/2016
Olá Jardel,
Que ferramente esta utilizando para criar o seu modelo?
Que ferramente esta utilizando para criar o seu modelo?
GOSTEI 1
Jardel Martins
23/02/2016
Ai, foi no word mesmo, mas eu utilizo o DIA
GOSTEI 0
Jose Fernando
23/02/2016
use o datamodeler e o DBDesigner.
GOSTEI 1
Rodrigo Nogueira
23/02/2016
Agora que li em cima, realmente diagramas EER são chatos de elaborar e tem poucas ferraentas.
Olhando o seu modelo, como o EER é mais conceitual e não é prático, eu acredito que não seja necessário ter uma entidade chamada hotel_cidade, pois esta já é representada por Hotel - localiza - Cidade, da mesma forma que precisa ter uma relação N:N de hotel e reserva, sem ligação com hotel_cidade (que não existirá mais)
Olhando o seu modelo, como o EER é mais conceitual e não é prático, eu acredito que não seja necessário ter uma entidade chamada hotel_cidade, pois esta já é representada por Hotel - localiza - Cidade, da mesma forma que precisa ter uma relação N:N de hotel e reserva, sem ligação com hotel_cidade (que não existirá mais)
GOSTEI 1
Jose Fernando
23/02/2016
Concordo, mas é melhor que usar programas de desenho.
GOSTEI 0
Rodrigo Nogueira
23/02/2016
Concordo, mas é melhor que usar programas de desenho.
Sim, mas ele quer criar o modelo EER conceitua, não estou certo de que essas ferramentas tem a opção de criar este diagrama
GOSTEI 1
Jardel Martins
23/02/2016
Hotel -> Cidade, não seria N:N?
se N:N não gera automaticamente uma nova tabela?
se N:N não gera automaticamente uma nova tabela?
GOSTEI 0
Rodrigo Nogueira
23/02/2016
Sim, mas este automaticamente em um modelo conceitual EER, não precisa existir a representação desta tabela entende?
O fato da relação 'localiza' ser N:N deixa implícito que terá uma nova tabela
O fato da relação 'localiza' ser N:N deixa implícito que terá uma nova tabela
GOSTEI 1
Jardel Martins
23/02/2016
Como teriam muitos N:N no conceitual diminuiriam bastante as tabelas? seria isso? poderia esboçar como ficaria por favor?!!
GOSTEI 0
Marcos P
23/02/2016
Jardel,
Uma dúvida : por quê o relacionamento Hotel x Cidade é N : N ?
Hotel, nesse caso é a unidade do hotel que você está modelando e não os diferentes hotéis que existem pela cidade... certo ?
Se for isso, o relacionamento é Hotel 1 x N Cidade, ou seja... Uma cidade tem várias unidades do hotel, mas uma dada unidade está sempre em uma ( e apenas uma ) cidade.
É isso ou entendi errado ?
Uma dúvida : por quê o relacionamento Hotel x Cidade é N : N ?
Hotel, nesse caso é a unidade do hotel que você está modelando e não os diferentes hotéis que existem pela cidade... certo ?
Se for isso, o relacionamento é Hotel 1 x N Cidade, ou seja... Uma cidade tem várias unidades do hotel, mas uma dada unidade está sempre em uma ( e apenas uma ) cidade.
É isso ou entendi errado ?
GOSTEI 1
Jardel Martins
23/02/2016
Rapaz isso é um dilema:
Pq inicialmente pensei do seu jeito e depois pensei:
Uma cidade pode ter vários hotéis,
e um mesmo hotel (mesmo cnpj) em várias cidades
Pq inicialmente pensei do seu jeito e depois pensei:
Uma cidade pode ter vários hotéis,
e um mesmo hotel (mesmo cnpj) em várias cidades
GOSTEI 0
Marcos P
23/02/2016
Não confunda uma rede de hotéis com uma unidade de uma rede de hotéis...
Se você está desenvolvendo um sistema para uma rede de hotéis, ou seja, seu cliente é uma rede de hotéis... você deve tratar Hotel como Unidade.
Afinal, os hóspedes, funcionários, reservas, consumos... se aplicam sempre a uma unidade ( podendo ser consolidados, em tempo de consulta, para a rede toda ! ).
Mesmo que seu sistema seja "multi-rede", continua valendo a regra de Hotel 1 : N Cidade. O que deveria ser incorporado nesse caso, é a rede a qual a unidade pertence ( Rede 1 : N Hotel ).
Modelar é criar definições e impor limites... crie os seus !
Se você está desenvolvendo um sistema para uma rede de hotéis, ou seja, seu cliente é uma rede de hotéis... você deve tratar Hotel como Unidade.
Afinal, os hóspedes, funcionários, reservas, consumos... se aplicam sempre a uma unidade ( podendo ser consolidados, em tempo de consulta, para a rede toda ! ).
Mesmo que seu sistema seja "multi-rede", continua valendo a regra de Hotel 1 : N Cidade. O que deveria ser incorporado nesse caso, é a rede a qual a unidade pertence ( Rede 1 : N Hotel ).
Modelar é criar definições e impor limites... crie os seus !
GOSTEI 1
Jardel Martins
23/02/2016
Acredito que eu tenha entendido
GOSTEI 0
Marcos P
23/02/2016
Modelar é criar definições e impor limites... crie os seus !
Boa sorte !
GOSTEI 1
David Sylvestre
23/02/2016
Rapaz isso é um dilema:
Pq inicialmente pensei do seu jeito e depois pensei:
Uma cidade pode ter vários hotéis,
e um mesmo hotel (mesmo cnpj) em várias cidades
Pq inicialmente pensei do seu jeito e depois pensei:
Uma cidade pode ter vários hotéis,
e um mesmo hotel (mesmo cnpj) em várias cidades
Jardel, mude seu ponto de visão ao desenvolver, tente se aproximar mais do cliente (professor) e entenda qual a real necessidade do sistema tirando essas duvidas.
É melhor entender a regra real que o cliente vive do que supor, desenvolver e ver que nao atende.
GOSTEI 0
Jardel Martins
23/02/2016
Gnt pra acabar me ajudem, não consegui fazer as questoes seguintes:
f) Obter os relatórios financeiros, por hotel, por cliente. Além de relatórios consolidados por semana e por mês.
g) Obter relatório de cancelamentos.
segue o banco em anexo
f) Obter os relatórios financeiros, por hotel, por cliente. Além de relatórios consolidados por semana e por mês.
g) Obter relatório de cancelamentos.
segue o banco em anexo
-- MySQL Workbench Synchronization -- Generated: 2016-02-28 14:29 -- Model: New Model -- Version: 1.0 -- Project: Name of the project -- Author: Jardel_Martins SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0; SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0; SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES'; CREATE TABLE IF NOT EXISTS `hotel_bomsono`.`tab_cidade` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `nome` VARCHAR(100) NOT NULL, `cep` VARCHAR(25) NOT NULL, `uf` VARCHAR(45) NOT NULL, PRIMARY KEY (`id`)) ENGINE = InnoDB DEFAULT CHARACTER SET = latin1; CREATE TABLE IF NOT EXISTS `hotel_bomsono`.`cad_cliente` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `nome` VARCHAR(100) NOT NULL, `cpf` VARCHAR(15) NOT NULL, `endereco` VARCHAR(45) NOT NULL, `nacionalidade` VARCHAR(45) NOT NULL, `email` VARCHAR(85) NOT NULL, `telefone` VARCHAR(45) NOT NULL, `senha` VARCHAR(45) NOT NULL, PRIMARY KEY (`id`)) ENGINE = InnoDB DEFAULT CHARACTER SET = latin1; CREATE TABLE IF NOT EXISTS `hotel_bomsono`.`funcionarios` ( `id` INT(8) ZEROFILL NOT NULL, `nome` VARCHAR(125) NOT NULL, `cpf` VARCHAR(15) NULL DEFAULT NULL, `funcao` VARCHAR(120) NULL DEFAULT NULL, `salario` DECIMAL(8,2) NULL DEFAULT NULL, PRIMARY KEY (`id`)) ENGINE = InnoDB DEFAULT CHARACTER SET = latin1; CREATE TABLE IF NOT EXISTS `hotel_bomsono`.`cad_hotel` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `cnpj` VARCHAR(25) NOT NULL, `cidade_id` INT(11) NOT NULL, `nome` VARCHAR(100) NOT NULL, INDEX `fk_hotel_cidade1_idx` (`cidade_id` ASC), UNIQUE INDEX `cnpj_Hotel_UNIQUE` (`cnpj` ASC), PRIMARY KEY (`id`), CONSTRAINT `fk_hotel_cidade1` FOREIGN KEY (`cidade_id`) REFERENCES `hotel_bomsono`.`tab_cidade` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION) ENGINE = InnoDB DEFAULT CHARACTER SET = latin1; CREATE TABLE IF NOT EXISTS `hotel_bomsono`.`nota_fiscal` ( `id` INT(11) NOT NULL, `cliente_id` INT(11) NOT NULL, `data_emissao` DATE NOT NULL, `chave` VARCHAR(45) NOT NULL, `numero` INT(11) NULL DEFAULT NULL, `serie` INT(11) NULL DEFAULT NULL, `valor_total` DECIMAL(12,2) NOT NULL DEFAULT '0.00', PRIMARY KEY (`id`), INDEX `fk_nota_fiscal_cad_cliente1_idx` (`cliente_id` ASC), CONSTRAINT `fk_nota_fiscal_cad_cliente1` FOREIGN KEY (`cliente_id`) REFERENCES `hotel_bomsono`.`cad_cliente` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION) ENGINE = InnoDB DEFAULT CHARACTER SET = latin1; CREATE TABLE IF NOT EXISTS `hotel_bomsono`.`cad_reserva` ( `codigo` INT(11) ZEROFILL NOT NULL AUTO_INCREMENT, `cliente_id` INT(11) NOT NULL, `apartamentos_id` INT(11) NOT NULL, `num_pessoa` INT(11) NOT NULL, `data_entrada` DATE NOT NULL, `data_saida` DATE NOT NULL, `cancelamento` ENUM('true', 'false') NOT NULL DEFAULT 'false', PRIMARY KEY (`codigo`), INDEX `fk_cad_reserva_cad_apartamento1_idx` (`apartamentos_id` ASC), INDEX `fk_cad_reserva_cad_cliente1_idx` (`cliente_id` ASC), CONSTRAINT `fk_cad_reserva_cad_apartamento1` FOREIGN KEY (`apartamentos_id`) REFERENCES `hotel_bomsono`.`cad_apartamento` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION, CONSTRAINT `fk_cad_reserva_cad_cliente1` FOREIGN KEY (`cliente_id`) REFERENCES `hotel_bomsono`.`cad_cliente` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION) ENGINE = InnoDB DEFAULT CHARACTER SET = latin1; CREATE TABLE IF NOT EXISTS `hotel_bomsono`.`cad_apartamento` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `hotel_id` INT(11) NOT NULL, `cama_casal` INT(2) ZEROFILL NOT NULL, `cama_solteiro` INT(2) ZEROFILL NOT NULL, `necessidade_especial` ENUM('SIM', 'NAO') NOT NULL DEFAULT 'NAO', `tv` ENUM('SIM', 'NAO') NOT NULL DEFAULT 'NAO', `frigobar` ENUM('SIM', 'NAO') NOT NULL DEFAULT 'NAO', `valor_diaria` DECIMAL(8,2) NOT NULL, INDEX `fk_cad_apartamento_cad_hotel1_idx` (`hotel_id` ASC), PRIMARY KEY (`id`), CONSTRAINT `fk_cad_apartamento_cad_hotel1` FOREIGN KEY (`hotel_id`) REFERENCES `hotel_bomsono`.`cad_hotel` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION) ENGINE = InnoDB DEFAULT CHARACTER SET = latin1; CREATE TABLE IF NOT EXISTS `hotel_bomsono`.`hot_checkin` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `reserva_codigo` INT(11) ZEROFILL NOT NULL, `data_entrada` DATE NOT NULL, PRIMARY KEY (`id`), INDEX `fk_hot_checkin_cad_reserva1_idx` (`reserva_codigo` ASC), CONSTRAINT `fk_hot_checkin_cad_reserva1` FOREIGN KEY (`reserva_codigo`) REFERENCES `hotel_bomsono`.`cad_reserva` (`codigo`) ON DELETE NO ACTION ON UPDATE NO ACTION) ENGINE = InnoDB DEFAULT CHARACTER SET = latin1; CREATE TABLE IF NOT EXISTS `hotel_bomsono`.`hot_conta` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `checkin_id` INT(11) NOT NULL, `valor_conta` DECIMAL(8,2) NOT NULL, PRIMARY KEY (`id`), INDEX `fk_hot_conta_hot_checkin1_idx` (`checkin_id` ASC), CONSTRAINT `fk_hot_conta_hot_checkin1` FOREIGN KEY (`checkin_id`) REFERENCES `hotel_bomsono`.`hot_checkin` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION) ENGINE = InnoDB DEFAULT CHARACTER SET = latin1; CREATE TABLE IF NOT EXISTS `hotel_bomsono`.`cad_servico` ( `codigo` INT(8) ZEROFILL NOT NULL, `descricao` VARCHAR(120) NOT NULL, `valor_unitario` DECIMAL(8,2) NOT NULL, `tipo_servico` VARCHAR(45) NULL DEFAULT NULL, PRIMARY KEY (`codigo`)) ENGINE = InnoDB DEFAULT CHARACTER SET = latin1; CREATE TABLE IF NOT EXISTS `hotel_bomsono`.`cad_limpeza_apartamento` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `apartamentos_id` INT(11) NOT NULL, `funcionarios_id` INT(8) ZEROFILL NOT NULL, PRIMARY KEY (`id`), INDEX `fk_cad_limpeza_apartamento_cad_apartamento1_idx` (`apartamentos_id` ASC), INDEX `fk_cad_limpeza_apartamento_funcionarios1_idx` (`funcionarios_id` ASC), CONSTRAINT `fk_cad_limpeza_apartamento_cad_apartamento1` FOREIGN KEY (`apartamentos_id`) REFERENCES `hotel_bomsono`.`cad_apartamento` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION, CONSTRAINT `fk_cad_limpeza_apartamento_funcionarios1` FOREIGN KEY (`funcionarios_id`) REFERENCES `hotel_bomsono`.`funcionarios` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION) ENGINE = InnoDB DEFAULT CHARACTER SET = latin1; CREATE TABLE IF NOT EXISTS `hotel_bomsono`.`cad_conta_restaurante` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `valor_consumido` DECIMAL(12,2) NOT NULL, `conta_id` INT(11) NOT NULL, PRIMARY KEY (`id`), INDEX `fk_cad_conta_restaurante_hot_conta1_idx` (`conta_id` ASC), CONSTRAINT `fk_cad_conta_restaurante_hot_conta1` FOREIGN KEY (`conta_id`) REFERENCES `hotel_bomsono`.`hot_conta` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION) ENGINE = InnoDB DEFAULT CHARACTER SET = latin1; CREATE TABLE IF NOT EXISTS `hotel_bomsono`.`consumo_restaurante` ( `conta_restaurante_id` INT(11) NOT NULL, `codigo_produto` INT(8) ZEROFILL NOT NULL, `quantidade` DECIMAL(8,2) NOT NULL, `entrega_domicilio` ENUM('SIM', 'NAO') NOT NULL DEFAULT 'NAO', `recibo_assinado` ENUM('SIM', 'NAO') NOT NULL DEFAULT 'SIM', INDEX `fk_consumo_restaurante_cad_conta_restaurante1_idx` (`conta_restaurante_id` ASC), PRIMARY KEY (`codigo_produto`), CONSTRAINT `fk_consumo_restaurante_cad_conta_restaurante1` FOREIGN KEY (`conta_restaurante_id`) REFERENCES `hotel_bomsono`.`cad_conta_restaurante` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION, CONSTRAINT `fk_consumo_restaurante_cad_produtos_restaurante1` FOREIGN KEY (`codigo_produto`) REFERENCES `hotel_bomsono`.`cad_produtos_restaurante` (`codigo`) ON DELETE NO ACTION ON UPDATE NO ACTION) ENGINE = InnoDB DEFAULT CHARACTER SET = latin1; CREATE TABLE IF NOT EXISTS `hotel_bomsono`.`cad_produtos_restaurante` ( `codigo` INT(8) ZEROFILL NOT NULL, `descricao` VARCHAR(120) NOT NULL, `valor_unitario` DECIMAL(8,2) NOT NULL, PRIMARY KEY (`codigo`)) ENGINE = InnoDB DEFAULT CHARACTER SET = latin1; CREATE TABLE IF NOT EXISTS `hotel_bomsono`.`consumo_servico` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `codigo_servico` INT(8) ZEROFILL NOT NULL, `conta_id` INT(11) NOT NULL, `quantidade` VARCHAR(45) NOT NULL, `valor_servico` DECIMAL(12,2) NOT NULL, PRIMARY KEY (`id`), INDEX `fk_consumo_servico_hot_conta1_idx` (`conta_id` ASC), INDEX `fk_consumo_servico_cad_servico1_idx` (`codigo_servico` ASC), CONSTRAINT `fk_consumo_servico_hot_conta1` FOREIGN KEY (`conta_id`) REFERENCES `hotel_bomsono`.`hot_conta` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION, CONSTRAINT `fk_consumo_servico_cad_servico1` FOREIGN KEY (`codigo_servico`) REFERENCES `hotel_bomsono`.`cad_servico` (`codigo`) ON DELETE NO ACTION ON UPDATE NO ACTION) ENGINE = InnoDB DEFAULT CHARACTER SET = latin1; CREATE TABLE IF NOT EXISTS `hotel_bomsono`.`hot_check_out` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `checkin_id` INT(11) NOT NULL, `data_saida` DATE NOT NULL, `valor_total` DECIMAL(12,2) NOT NULL, `tipo_pagamento` ENUM('cheque', 'debito', 'credito') NOT NULL, `nota_fiscal_id` INT(11) NOT NULL, PRIMARY KEY (`id`), INDEX `fk_hot_check_out_hot_checkin1_idx` (`checkin_id` ASC), INDEX `fk_hot_check_out_nota_fiscal1_idx` (`nota_fiscal_id` ASC), CONSTRAINT `fk_hot_check_out_hot_checkin1` FOREIGN KEY (`checkin_id`) REFERENCES `hotel_bomsono`.`hot_checkin` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION, CONSTRAINT `fk_hot_check_out_nota_fiscal1` FOREIGN KEY (`nota_fiscal_id`) REFERENCES `hotel_bomsono`.`nota_fiscal` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION) ENGINE = InnoDB DEFAULT CHARACTER SET = latin1; SET SQL_MODE=@OLD_SQL_MODE; SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS; SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS; -- INSERTS DADOS INSERT INTO `hotel_bomsono`.`tab_cidade` (`id`, `nome`, `cep`, `uf`) VALUES ('1', 'Almenara', '399000-000', 'MG'); INSERT INTO `hotel_bomsono`.`tab_cidade` (`id`, `nome`, `cep`, `uf`) VALUES ('2', 'Medina', '391299-000', 'MG'); INSERT INTO `hotel_bomsono`.`tab_cidade` (`id`, `nome`, `cep`, `uf`) VALUES ('3', 'Porto Seguro', '381291-992', 'BA'); INSERT INTO `hotel_bomsono`.`cad_hotel` (`cnpj`, `cidade_id`, `nome`) VALUES ('38.354.344/0001-71', '1', 'HOTEL BOM SONO SEDE'); INSERT INTO `hotel_bomsono`.`cad_hotel` (`cnpj`, `cidade_id`, `nome`) VALUES ('69.866.311/0001-34', '2', 'HOTEL BOM SONO I'); INSERT INTO `hotel_bomsono`.`cad_hotel` (`cnpj`, `cidade_id`, `nome`) VALUES ('03.852.142/0001-75', '3', 'HOTEL BOM SONO BA'); INSERT INTO `hotel_bomsono`.`cad_apartamento` (`hotel_id`, `cama_casal`, `cama_solteiro`, `tv`, `frigobar`, `valor_diaria`) VALUES ('1', '2', '1', 'SIM', 'SIM', '120'); INSERT INTO `hotel_bomsono`.`cad_apartamento` (`hotel_id`, `cama_casal`, `cama_solteiro`, `tv`, `frigobar`, `valor_diaria`) VALUES ('1', '1', '0', 'SIM', 'SIM', '100'); INSERT INTO `hotel_bomsono`.`cad_apartamento` (`hotel_id`, `cama_casal`, `cama_solteiro`, `necessidade_especial`, `tv`, `frigobar`, `valor_diaria`) VALUES ('1', '0', '4', 'SIM', 'SIM', 'NAO', '130'); INSERT INTO `hotel_bomsono`.`cad_apartamento` (`hotel_id`, `cama_casal`, `cama_solteiro`, `valor_diaria`) VALUES ('2', '1', '2', '110'); INSERT INTO `hotel_bomsono`.`cad_apartamento` (`hotel_id`, `cama_casal`, `cama_solteiro`, `necessidade_especial`, `tv`, `frigobar`, `valor_diaria`) VALUES ('2', '2', '0', 'SIM', 'NAO', 'SIM', '140'); call sp_InsereCliente("Thiago Alves", "121.562.506-50", "brasileiro","Rua 41","thiago@mg.com.br","(44)1241-2412","tezinha"); call sp_InsereDadosReserva(1,1,2,'2016-08-24','2016-08-26'); INSERT INTO `hotel_bomsono`.`hotel_check_in` (`reserva_codigo`, `data_entrada`) VALUES ('00000000001', '2016-08-24'); -- tg_CriarReserva DELIMITER $$ CREATE TRIGGER tg_CriarReserva AFTER INSERT ON dados_reserva FOR EACH ROW BEGIN INSERT INTO cad_reserva (dados_id, apartamento_id, num_pessoa, data_entrada, data_saida) VALUES (NEW.id, NEW.apartamento_id, NEW.num_pessoa, NEW.data_entrada,NEW.data_saida); END$$ DELIMITER ; USE `hotel_bomsono`; DROP procedure IF EXISTS `sp_InsereCliente`; DELIMITER $$ USE `hotel_bomsono`$$ CREATE PROCEDURE `sp_InsereCliente` (in vNome varchar(120), in vCpf varchar(15), in vNacionalidade varchar(120), in vEndereco varchar(120), in vEmail varchar(120), in vTelefone varchar(18), in vSenha varchar(16)) BEGIN IF ((vNome != '') && (vCpf != '')) THEN INSERT INTO cad_cliente (nome, cpf, nacionalidade , endereco, email, telefone, senha) VALUES (vNome, vCpf, vNacionalidade, vEndereco, vEmail, vTelefone, vSenha); ELSE SELECT 'NOME e CPF devem ser fornecidos para o cadastro!' AS Msg; END IF; END$$ DELIMITER ; call sp_InsereCliente("Thiago Alves", "121.562.506-50", "brasileiro","Rua 41","thiago@mg.com.br","(44)1241-2412","tezinha"); USE `hotel_bomsono`; DROP procedure IF EXISTS `sp_InsereDadosReserva`; DELIMITER $$ USE `hotel_bomsono`$$ CREATE PROCEDURE `sp_InsereDadosReserva` (in vCliente_id INT, in vApartamento_id INT, in vNum_pessoa INT, in vData_entrada DATE, in vData_saida DATE) BEGIN IF ((vCliente_id != '') && (vApartamento_id != '')) THEN INSERT INTO dados_reserva (cliente_id, apartamento_id, num_pessoa , data_entrada, data_saida) VALUES (vCliente_id, vApartamento_id, vNum_pessoa, vData_entrada, vData_saida); SELECT ' realizado com sucesso!' AS Msg; ELSE SELECT 'Cliente e Apartamento devem ser fornecidos para o cadastro!' AS Msg; END IF; END$$ DELIMITER ; call sp_InsereDadosReserva(1,1,2,'2016-08-24','2016-08-26'); -- tg_AbrirConta DELIMITER $$ CREATE TRIGGER tg_AbrirConta AFTER INSERT ON hotel_check_in FOR EACH ROW BEGIN INSERT INTO hotel_conta (checkin_id, valor_conta) VALUES (NEW.id, 0); END$$ DELIMITER ; --tg_AtualizaConsumoRestaurante DELIMITER $$ CREATE TRIGGER tg_AtualizaConsumoRestaurante AFTER INSERT ON consumo_restaurante FOR EACH ROW BEGIN declare valor_total decimal(8,2); IF (NEW.entrega_domicilio = "SIM") THEN SET valor_total = (NEW.valor_unitario * NEW.quantidade) * 1.10; ELSE SET valor_total = (NEW.valor_unitario * NEW.quantidade); END IF; UPDATE hotel_conta SET valor_consumido = valor_total WHERE reserva_codigo = NEW.reserva_codigo AND NEW.recibo_assinado = "SIM"; END$$ DELIMITER ; --tg_AtualizaConsumoServico DELIMITER $$ CREATE TRIGGER tg_AtualizaConsumoServico AFTER INSERT ON consumo_servico FOR EACH ROW BEGIN declare valor_total decimal(8,2); SET valor_total = (NEW.valor_unitario * NEW.quantidade) * 1.10; UPDATE hotel_conta SET valor_consumido = valor_consumido + valor_total WHERE reserva_codigo = NEW.reserva_codigo; END$$ DELIMITER ; MARTINS CONSTR
GOSTEI 0