Integridade referencial: diferenças entre revisões

Conteúdo apagado Conteúdo adicionado
Aleph Bot (discussão | contribs)
m BOT - Possível teste de Vacamaldita, revertendo para a edição 35146953 de Addbot.
Linha 4:
 
== Exemplo ==
Em um banco de dados há uma tabela onde há uma relação com os nomes dos estados brasileiros, exemplo:
Com uma tabela de países e a tabela de cidades, estão na tabela de países os países A e B cadastrados, e na tabela de cidades as cidades de AA (no país A) e BB (no país B). Se tentarmos excluir o país A, essa operação não deve ser permitida, pois há cidades relacionadas o país A e que têm essa referência como [[chave estrangeira]].
{| class="wikitable"
|-
! UF !! NOME_ESTADO
|-
| RS || Rio Grande do Sul
|-
| SC || Santa Catarina
|-
| ... || ...
|}
 
Em outra tabela há uma relação com o nome dos munícipios brasileiros e o estado a que pertecem. exemplo:
A integridade referencial garante a não corrupção dos dados, de modo a não haver como existir um registro "filho" sem um registro "pai".
{| class="wikitable"
|-
! CIDADE !! UF
|-
| Porto Alegre || RS
|-
| Florianópolis || SC
|-
| ... || ...
|}
 
Se nesta segunda tabela for declarada uma relação com a primeira através da coluna "UF", e tentarmos excluir o registro correspondente ao estado "Rio Grande do Sul"; essa operação não deve ser permitida, pois há registros na tabela cidades (no caso "Porto Alegre") que dependem da existência do registro que se pretente excluir, pois estão relacionadas o estado "RS". Essa referência à tabela ESTADO, existente na tabela CIDADE através da coluna UF tem o nome de [[chave estrangeira]].
No MySQL, por exemplo, temos 4 opções para a integridade referencial: Cascade, Set Null, Restrict e No Action.
 
A integridade referencial visa garantir a não corrupção dos dados, de modo a não haver como existir um registro "filho" sem um registro "pai". A tentativa de exclusão (ou alteração da chave primária - no caso, a coluna "UF") de um registo "pai" que possui registros "filhos" a ele vinculados é chamada de violação de chave estrangeira.
 
Quando uma tentativa de violação de chave estrangeira ocorre, o SGDBR deve tratá-la de acordo com uma regra pré-definida, chamada restrição "constraint". Ao se criar uma chave estrangeira, há que se definir as regras de restrição (constraint rules) para as operações de insert e update.
 
Cada SGDB possui maneiras específicas de nomear suas regras e tratar as excessões. Usualmente há três ações possíveis quando uma chave estrangeira é violada: propagar a ação (cascade), restringir a ação (no action/restrict) ou remover/substiuir o vínculo (set null/set default).
 
A primeira opção, replica a ação executada no registro pai para o registro filho. Assim a regra para tratamento de violações de chave estrangeira para uma relação entre tabelas pai e filho foi definida para a propagação da ação, se o registro pai for excluído o(s) filho(s) é (são) excluído(s) junto. Se for uma alteração, o novo valor da gravado na tabela pai é atualizado na tabela filha.
 
Aplicando este tipo de restrições no exemplo acima, caso o governo determinasse que a sigla do estado "Rio Grande do Sul" fosse alterada para "RGS", a alteração da tabela pai (ESTADO) implicaria automaticamente na alteração de todos os registros equivalentes na tabela filha (CIDADE). Assim, todas as cidades para as quais a coluna UF estivesse definida como "RS" automaticamente teriam seus registros atualizados para a nova UF "RGS", mantendo a integridade da relação.
 
Caso a ação fosse de excluir o estado "Rio Grande do Sul", todos os registros da tabela CIDADE com a coluna UF gravada como "RS" seriam automaticamente excluídos.
 
A segunda opção implica e impedir a ação quando não se deseja que ela seja propagada. Deste modo, uma tentativa de mudar "RS" para "RGS" somente teria sucesso se não houvesse nenhum registro na tabela CIDADE com a coluna UF preenchida com "RS". Do mesmo modo, tentar excluir o registro do estado do "Rio Grande do Sul" somente seria possível se nenhuma cidade estivesse ele relacionada. Qualquer tentativa de exclusão ou alteração na tabela ESTADO em que houvesse na tabela CIDADE referência ao registro a que se quer excluir seria barrada e não executada automaticamente pelo SGDBR (através de um rollback)
 
A última opção implica em renunciar deliberadamente à integridade referencial e admitir registros órfãos em tabelas filhas. Geralmente tem aplicação prática apenas em situações de manutenção ou intervenção administrativas.
 
[[Categoria:SGBDs]]