Fala pessoal, Salve, Salveeee! 🙂
Vamos de mais uma artigo, ainda na linha de conceitos envolvidos no tópico sobre modelo relacional de dados.
Neste artigo irei abordar conceitos sobre Restrições de Integridade!
Recomendo, antes da leitura deste artigo, visitar o artigo sobre Modelo Relacional: Conhecendo as Regras de Codd !
No artigo referenciado acima, falei sobre o modelo relacional proposto por Codd, como as estruturas em forma de tabela são construídas para receber seus dados, porém se faz necessário garantir que os dados atendam às necessidades dos requisitos dos clientes. Para isso, abordei no referido artigo alguns recursos, como por exemplo, o uso de tipos de dados e domínios.
Através das regras de integridade, que chamamos de Restrições de Integridade, é possível minimizar inconsistências que possam ocorrer nos dados que fazem parte do banco de dados, garantindo assim a sua consistência.
O grande “lance” existente nos SGBDs é justamente oferecer recursos para que possamos minimizar tais problemas e isso é feito pelas restrições de integridade, através do uso de parâmetros ou até mesmo regras estabelecidas previamente no banco de dados.
Há quem defenda que “basta colocar regras na aplicação para proteger a integridade dos dados no SGBD”, porém posso garantir que isso por si só não é o suficiente.
Isso porque as formas de entrada pelo SGBD não se dão apenas pelas aplicações externas operacionalizadas pelos usuários finais, mas podem ocorrer por via de programadores/analistas digitando códigos em SQL direto em uma console específica para isso, ou seja, ele já está em uma camada mais abaixo, indo direto ao banco de dados e neste momento e cenário, precisamos dar garantia de que algo ruim não aconteça aos dados no banco de dados.
As restrições de integridade dos dados podem ser construídas no SGBD de duas formas: Declarativa e Procedural:
- Na forma declarativa, as restrições de integridade são parametrizadas durante a criação das estruturas das tabelas, utilizando a linguagem SQL, na categoria DDL (Data Definition Language ), fazendo uso de chaves primárias (PK), impedindo valores não nulos, utilizando tipos e domínios de dados e aplicando regras de integridade referencial.
- Na forma procedural (também chamadas de restrições semânticas), é possível fazer uso de recursos como gatilhos (triggers), procedimentos armazenados (stored procedures), bem como de afirmações (assertions) . Geralmente a forma procedural é implementada por programadores ou analistas especializados na linguagem e no SGBD, com auxílio das regras de negócio passadas pelos clientes.
É possível usar as duas formas ao mesmo tempo, mas isso vai depender de cada projeto de banco de dados.
Agora vamos conhecer as restrições de integridade que são cobradas nas provas de concursos públicos, vamos lá!
- Restrições de Integridade de Domínio: As restrições de domínio especificam que, dentro de cada tupla, o valor de cada atributo Y deve ser um valor indivisível do domínio dom(Y), ou seja, se um atributo tiver que receber valores dentro de um intervalo pré-estabelecido para um domínio, ele só receberá valores dentro deste intervalo, caso contrário uma mensagem de erro aparecerá para o usuário para que ele possa ajustar os dados antes da entrada no banco de dados.
- Restrições de Integridade de Chave: Por exemplo, o uso de chave primária(PK), ela representa um identificador único para cada tupla da tabela, ou seja, ele não pode se repetir. Mas, além da chave primária, existem a chaves candidatas, onde surge a possibilidade de se usar outro atributo como chave, mas por algum motivo, apenas um foi definido por ser a chave a primária. Agora, imagine que você queira garantir que este outro atributo, que não é chave primária, não seja repetido em alguma tabela, por uma regra de negócio estabelecida. Neste caso você pode se valer de uma cláusula em SQL, chamada UNIQUE, para garantir que este atributo não seja repetido na mesma tabela em tuplas diferentes.
- Restrições de Integridade de NULL (vazio): Existem casos onde um determinado atributo pode ser não obrigatório, ou seja, ele possui um tipo e domínio estabelecidos, mas não é obrigatório, e para garantir que não haja uma variação de vazios (espaço em branco ou simplesmente nada ou alguns espaços aleatórios), utiliza-se o NULL como sendo uma informação única e válida para preenchimento do atributo quando ele não for informado. Para que isso seja possível, no momento da criação da estrutura da tabela, será utilizado o parâmetro NULL ou NOT NULL. NULL significa que o atributo pode não ser preenchido com algum valor, já NOT NULL significa o contrário, ou seja, é obrigatório o seu preenchimento com algum valor, obedecendo o tipo e domínio estabelecido.
- Restrições de Integridade de Entidade: Essa forma de restrição afirma que nenhum valor de chave primária (PK) pode ser NULL, pois o seu valor é utilizado para identificar tuplas individuais em uma relação (tabela). Isso significa, que caso exista um valor NULL para uma chave primária, não será possível identificar uma tupla e por consequência, não poderíamos utilizar estas tuplas para referenciá-las em outras relações(tabelas), pois não conseguiríamos distingui-las.
- Restrições de Integridade Referencial: É utilizada entre duas relações e usada para manter a consistência entre tuplas nas duas relações. Esta restrição afirma que uma tupla em uma relação que referencia outra relação, precisa se referir a uma tupla existente nessa relação(daí a importância da chave primária não ser nula). Esta restrição, de forma resumida, garante o vínculo ou relacionamento entre duas tabelas (relações) a partir do uso das chaves primárias ou chave alternativa definida com UNIQUE, onde essa chave primária, que pertence a uma tabela(relação) específica, será referenciada em outra tabela(relação) como sendo chave estrangeira(FK). Quando o atributo referente a chave estrangeira em uma tabela não está preenchido com o valor da chave primária da outra tabela, ele então será preenchido com o valor NULL, para fins de garantir a integridade.
Bem pessoal, vou ficando por aqui, sei que o artigo ficou extenso, mas a intenção foi de contribuir da melhor forma sobre este tópico!
Até o próximo artigo e bons estudos! 😉
==================================
Prof. Luis Octavio Lima
Participe da conversa