Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como testar tabelas vinculadas a chaves estrangeiras?


Como mencionado nos comentários, você deve descartar quaisquer tabelas com restrições FK para outras tabelas, primeiro, então você pode descartar as tabelas que estão sendo vinculadas.

Exemplo:
User
  id: 1
  name: Mike

Address 
  id: 1
  user_id: 1 (FK constraint to User.id table.column)
  address_1: 555 Main Street

Essa configuração é uma relação 1:1 (mais sobre normalização de dados ), onde uma linha de usuário pode fazer referência a uma linha de endereço e, como a linha de endereço depende da existência da linha de usuário, se você tentar remover a linha de usuário, verá os erros mencionados.

Mas se você descartar a tabela Address primeiro, tudo funcionará conforme o esperado porque a tabela User não é FK para nenhuma outra tabela.

Garantir a integridade referencial dentro do seu esquema garante que você não acabe com linhas órfãs, que permeiam todo o seu aplicativo orientado a dados.

Você também pode emitir os seguintes comandos:
SET foreign_key_checks = 0;
# Do Stuff
SET foreign_key_checks = 1;

Mas eu desaconselho fortemente isso, pois você pode quebrar a integridade referencial de seus dados e acabar em uma verdadeira bagunça. Eu vi alguém fazer isso em um ambiente corporativo e levou semanas para limpá-lo. No entanto, se você estiver fazendo isso ESTRITAMENTE para fins de teste; como escrever testes de unidade, ou apenas aprender, e você não quiser descartar as tabelas todas as vezes, você pode fazer isso:
# Because we remove the foreign key check, we can truncate in any order
SET foreign_key_checks = 0;
TRUNCATE TABLE user;
TRUNCATE TABLE address;
SET foreign_key_checks = 1;

O design de esquema adequado usando restrições de chave estrangeira ajuda a construir uma boa base para qualquer aplicativo orientado a dados. Levará tempo para entender quando usar e como construir restrições de chave estrangeira, mas com o tempo você começará a entender. Uma boa maneira de começar é baixar um projeto de código aberto como magento , wordpress , ou vbulletin e dê uma olhada em seus esquemas. Você pode até mesmo introspectar esses esquemas usando o MySQL workbench e veja seus Diagramas de Entidade-Relacionamento (ERDs), que demonstrarão visualmente links entre tabelas.