Tabela PAI :
TABLE CLIENTE
(
ID_CLIENTE INT NOT NULL
NOME_CLIENTE VARCHAR(255) NOT NULL
)
Tabela FILHO:
TABLE RELATORIO
(
ID_RELATORIO INT NOT NULL
DESC_RELATORIO VARCHAR(500) NOT NULL
FK_CLIENTE INT NOT NULL
)
Supondo que as duas tabelas possuem os dados:
TABLE CLIENTE
(1, “JOSÉ”)
TABLE RELATORIO
(1,“O PACIENTE TEM ALERGIA A DIPIRONA”, 1)
Acabamos de fazer uma relação, onde a tabela PAI (Cliente) tem cadastrado sua ID na tabela filho . A tabela FILHO por sua vez relata que : no relatório ID( 1) o paciente FK_ID( 1 ) tem alergia a medicamento.
Até aqui entendeu ?
Agora supondo que necessitamos excluir este relatório, qual seria o processo correto?
- Capturar a FK_ID(1) pesquisando essa ID na tabela PAI (cliente)
Exemplo : SELECT ID_CLIENTE FROM CLIENTE WHERE NOME_CLIENTE = ‘José’.
- Setaremos este resultado (ID_CLIENTE) em “relatorio.setFKcliente()”;
Agora que obtivemos a ID do cliente cujo relatório deverá ser excluído, vamos excluir o relatório com base no FK_CLIENTE. Ficando:
- DELETE*FROM RELATORIO WHERE FK_CLIENTE = 1;
Por que excluímos o relatório com base em sua coluna foreing Key e não em sua ID?
Supondo que Você realizou 2 cadastros de cliente e o primeiro (ID 1) não foi feito relatório algum, mas no segundo cliente ( ID 2 ) foi feito. Sabe oq acontece? Os dados da nossa tabela RELATORIO ficaram assim:
TABLE RELATORIO
(1, “O PACIENTE TEM ALERGIA A DIPIRONA”,2)
Por este motivo deve-se excluir os dados da tabela filho de acordo com a ID da tabela PAI, pois a ID_RELATORIO (1) não será do paciente ID(1) e sim do paciente ID(2) .
No caso de você tentar excluir a tabela PAI (CLIENTE) direto, o que vai acontecer?
Se essa não tiver nenhum cadastro na tabela FILHO (RELATORIO) então será excluída sem problema.
Mas se essa tiver cadastro na tabela FILHO (RELATORIO) o banco de dados acusará um erro.
Este erro faz sentido, pois pensa comigo… Como você excluírá o seu cliente e terá no banco de dados um relatório fazendo referência para este cliente excluído ?
Compreende agora?
Resposta final:
Quero excluir minha tabela PAI, mas ela possui uma tabela filho, o que devo fazer?
Excluir primeiro qualquer informação da tabela FILHO que tenha referência com a tabela PAI para depois sim você excluir a tabela PAI.