Chaves Estrangeiras
No MariaDB Server 3.23.44 e posterior, tabelas InnoDB
suportam verificação de restrição de chaves estrangeiras, incluindo CASCADE
, ON DELETE
, e ON UPDATE
. Leia "Restrições FOREIGN KEY
".
Para outros tipos de tabela, o MariaDB Server atualmente apenas analisa a sintaxe de FOREIGN KEY
no comando CREATE TABLE
, mas não usa/armazena esta informação. Em um futuro próximo esta implementação será estendida para que assim a informação seja armazenada num arquivo de especificação de tabela e possa ser recuperado por mysqldump
e ODBC. Em um estágio posterior, restrições de chaves estrangeiras serão implementadas para tabelas MyISAM
.
Note que as chaves estrangeiras no SQL não são usadas para ligar tabelas, mas são usadas para verificar a integridade referencial. Se você deseja obter resultados de múltiplas tabelas de uma instrução SELECT
, você pode fazer isto ligando tabelas:
SELECT * FROM table1,table2 WHERE table1.id = table2.id;
See "Sintaxe JOIN
". Leia "Utilizando Chaves Estrangeiras".
Quando usada como uma restrição, FOREIGN KEY
s não precisa ser usado se a aplicação insere duas linhas em tabelas MyISAM
na ordem apropriada.
Para tabelas MyISAM
, você pode contornar a falta de ON DELETE
adicionando a instrução DELETE
apropriada a uma aplicação quando você deletar registros de uma tabela que tem uma chave estrangeira. Na prática isto é mais rápido e muito mais portável que utilizar chaves estrangeiras.
No MariaDB Server 4.0 você pode utilizar deleções multi-tabela para apagar linha de muitas tabelas com um comando. Leia "Sintaxe DELETE
".
A sintaxe FOREIGN KEY
sem ON DELETE ...
é usada geralmente por aplicacões ODBC para produzir cláusulas WHERE
automáticas.
Note que chaves estrangeiras são mal usadas com frequência, o que pode causar graves problemas. Mesmo quando usado apropriadamente, o suporte a chaves estrangeiras não é uma solução mágica para o problema de integridade referêncial, embora possa ajudar.
Algumas vantagens das chaves estrangeiras:
- Assumindo o projeto apropriado das relações, as restrições de chaves estrangeiras tornarão mais difícil para um programador introduzir uma inconsistência no banco de dados.
- Usar atualizações e deleções em cascata pode simplificar o código do cliente.
- Regras de chaves estrangeiras projetados apropriadamente ajudam ao documentar a relação entre as tabelas.
Desvantagens:
- Erros, que são facéis de se ter ao projetar a relação das chaves, podem causar graves problemas¯por exemplo, regras circulares ou a combinação errada de uma deleção em cascata.
- Verificação adicional no banco de dados afeta o desempenho, por esta razão algumas das principais aplicações comerciais codificam sua lógica no nível da aplicação.
- Não é incomum para um DBA fazer uma topologia complexa de relações que torna muito difícl, e em alguns casos impossível, fazer backup ou restaurar tabelas individuais.