Jump to content
Fórum Script Brasil
  • 0

executar ações em 2 tabelas ao mesmo tempo


joanita
 Share

Question

Queria fazer o seguinte:

Sempre que inserisse dados no banco, os dados fossem gravados em 2 tabelas ao mesmo tempo (tipo backup) para poder usar apenas uma (tabela suites) onde faria todas as ações do crud mysqli, e outra tabela para armazenar os dados gerais onde só seria mexida caso algum dado fosse editado, de resto serviria apenas como backup para posterior consulta de estatisticas ao final do ano?

Link to comment
Share on other sites

8 answers to this question

Recommended Posts

  • 0

Antes de tudo, pense bem se você **realmente** precisa desses dados em tabelas diferentes. Duplicar dados não costuma ser algo normal e pode dar MUITA dor de cabeça no futuro

O ideal seria uma rotina diária que faz o backup, não uma rotina que insere nas duas tabelas.

Até daria pra usar uma trigger no banco de dados para isso, mas não vale a pena. O melhor é usar um sistema de backup do banco

Link to comment
Share on other sites

  • 0

antes de mais obrigado a todos pelas dicas... sem a vossa ajuda nunca teria chegado sequer onde cheguei ate aqui...

bom, a minha ideia é usar o script para adicionar/editar/remover/apagar ao longo do ano (tal como em qualquer casa de turismo), mas ao mesmo tempo queria poder ter um registo no final do ano que me mostrasse por ex: (total de reservas efetuadas, total de valores, etc... ao longo do ano (incluindo as reservas que foram eliminadas etc)... um total geral de tudo o que se passou... qual a melhor forma de o fazer?

Link to comment
Share on other sites

  • 0

Nesse caso, aconselho ter uma tabela principal, que só armazena dados fixos de cada registro (mesmo que seja só o ID dele). Em outra tabela você armazena cada informação desse registro, relacionando-os com os registros na tabela principal.

Assim pode ter um histórico completo de todas as modificações, sem duplicar dados.

 

Link to comment
Share on other sites

  • 0

Beraldo

a minha tabela atualmente esta assim (ainda falta incluir os campos para os valores das epocas alta/baixa nas suites):

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

--
-- Estrutura da tabela `suites`
--

CREATE TABLE IF NOT EXISTS `suites` (
  `id`

smallint(6) NOT NULL AUTO_INCREMENT,
  `nome` text CHARACTER SET utf8 NOT NULL,
  `telefone` decimal(9,0) NOT NULL,
  `email` varchar(50)

CHARACTER SET utf8 NOT NULL,
  `suite` varchar(50) CHARACTER SET utf8 NOT NULL,
  `tipo_reserva` text CHARACTER SET utf8 NOT NULL,
  `checkin`

date NOT NULL,
  `checkout` date NOT NULL,
  `late_checkout` varchar(50) CHARACTER SET utf8 NOT NULL,
  `pagamento` decimal(4,0) NOT NULL,
  `hora_chegada` time NOT NULL,
 

`camas_extra` varchar(30) CHARACTER SET utf8 NOT NULL,
  `berco` varchar(30) CHARACTER SET utf8 NOT NULL,
  `pequeno_almoco` varchar(30)

CHARACTER SET utf8 NOT NULL,
  `jantar` varchar(30) CHARACTER SET utf8 NOT NULL,
  `data_jantar` date NOT NULL,
  `animais` decimal(1,0) NOT

NULL,
  `atividades` varchar(30) CHARACTER SET utf8 NOT NULL,
  `transporte` varchar(30) CHARACTER SET utf8 NOT NULL,
  `pedido_especial`

varchar(250) CHARACTER SET utf8 NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=44 ;

--
-- Extraindo dados

da tabela `suites`
--

INSERT INTO `suites` (`id`, `nome`, `telefone`, `email`, `suite`, `tipo_reserva`, `checkin`, `checkout`, `late_checkout`,

`pagamento`, `hora_chegada`, `camas_extra`, `berco`, `pequeno_almoco`, `jantar`, `data_jantar`, `animais`, `atividades`, `transporte`,

`pedido_especial`) VALUES
(35, 'joaquim', '443243433', '', '', '', '0000-00-00', '0000-00-00', '0000-00-00', '0', '00:00:00', '', '', '', '',

'0000-00-00', '0', '', '', ''),
(2, 'sandra', '474747744', '[email protected]', 'Azul Céu', 'Booking', '2016-01-13', '2016-01-14',

'0000-00-00', '20', '00:00:00', '---', '---', '---', '---', '2016-01-20', '0', '---', '---', '');

/*!40101 SET

[email protected]_CHARACTER_SET_CLIENT */;
/*!40101 SET [email protected]_CHARACTER_SET_RESULTS */;
/*!40101 SET

[email protected]_COLLATION_CONNECTION */;

 

Link to comment
Share on other sites

  • 0

Se você realmente precisa de outra tabela para manter o histórico, sugiro separar mais ou menos assim:

 

Tabela "suites"

- id

- outros campos fixos (que nunca serão editados)

 

Tabela "suite_detalhes"

- suite_id -> id da suíte na tabela "suites"

- dados da reserva da suíte

- data_hora -> data e hora da criação ou alteração

 

Estes links sobre Relacionamento de Tabelas devem ajudar:

http://rberaldo.com.br/usando-campos-multivalorados/

 

 

Link to comment
Share on other sites

  • 0

mnas era importante que alguns desses dados fossem tambem alterados na tabela anual, imagina que fizeram uma reserva e eu registei na tabela... mais tarde ligam-me a alterar o numero de pessoas dessa mesma reserva, eu terei que alterar... e era importante ser alterado nas 2 tabelas porque isso vai influenciar os preços da reserva e depois na estatistica anual vai dar-me o preço inserido da primeira vez e não o preço que realmente foi cobrado, percebes?

Link to comment
Share on other sites

  • 0

Com a estrutura que te mostrei, não há duplicação de dados e nem há "tabela anual". É uma única estrutura que armazena todo o histórico de modificações. Dessa forma a tabela "suite_detalhes" terá vários registros para o mesmo ID de suíte. Os dados do registro mais recente é referente à última alteração realizada.

 

Por exemplo, para a suíte 1775:

 

Tabela "suites_detalhes"

suite_id | ocupantes | telefone  | data_hora
1775     |    2      | 3222-2222 | 2016-01-10 10:00:00
1775     |    3      | 3222-2222 | 2016-01-14 10:00:00

Nesse caso, no dia 10 foi feita a reserva. No dia 14 foi solicitada uma alteração no número de ocupantes. Os demais dados ficam iguais (mudando o horário também, é claro)

Assim, o registro mais recente é sempre o atual e, da mesma tabela é possível gerar o histórico de alterações. É melhor que atualizar duas tabelas

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Forum Statistics

    • Total Topics
      149.6k
    • Total Posts
      646.2k
×
×
  • Create New...