Restrições do Modelo Relacional
Como você já deve ter percebido, o Modelo Relacional de banco de dados é baseado em tuplas de diferentes relações que podem estar relacionadas entre si. Como o banco de dados representa um minimundo, ou seja, um determinado contexto ou negócio que possui um conjunto de regras, o banco de dados precisa registrar essas restrições (constraints) para garantir que o banco tenha estados válidos.
Restrição de integridade da entidade: a chave primária não pode receber o valor NULL
. Isso acontece porque, se a chave primária é o atributo (ou o conjunto de atributos) que identifica univocamente uma tupla, possibilitar o valor NULL
implicaria na violação desta propriedade.
Restrição de integridade referencial: em uma relação , sempre que um atributo for uma chave estrangeira de uma relação , o valor do atributo deve ser um valor da chave primária válida e existente em .
Caso especial: embora uma relação não possa ter chave primária com valor
NULL
, há casos em que uma relação pode ter um atributo chave estrangeira de (em ) com valorNULL
. Isso significa que aquela tupla de não está relacionada a nenhuma tupla de .
Restrições de integridade semântica
As restrições que vimos anteriormente podem ser incorporadas nos bancos de dados relacionais sem grande complexidade, já que fazem parte da DDL (Data Definition Language) - ou, em português, LDD (Linguagem de Definição de Dados). Há, no entanto, outras restrições importantes para o adequado tratamento das regras de negócio de um minimundo, que são as restrições de integridade semântica.
Como exemplo de uma restrição de integridade semântica, temos:
Em um semestre letivo, um estudante de Engenharia de Computação poderá cursar, no máximo, 36 créditos;
Note que, neste caso, o tratamento da restrição não é tão simples como os casos anteriores. Para esses casos, podemos adotar duas abordagens:
- Tratar no programa de aplicação: nesta abordagem, transferimos a responsabilidade para o aplicativo (software que estamos desenvolvendo) efetuar o tratamento dessas restrições;
- Tratar no banco de dados: neste caso, usamos uma linguagem de especificação de restrição de uso geral para criarmos alguns mecanismos, como triggers (gatilhos) e assertions (afirmações). Para isso, em SQL, temos os comandos
CREATE TRIGGER
eCREATE ASSERTION
.
Elmasri e Navathe (2011), entretanto, pontuam que esses tipos de restrições tendem a ser tratados usualmente nos programas de aplicação, já que as linguagens de especificação de restrição tendem a ser mais difíceis de se compreender e, consequentemente, mais complexas de serem utilizadas.
Os autores mencionam ainda que tais restrições são chamadas de restrições de estado, pois determinam o estado válido de um banco de dados. Há, ainda, um outro tipo de restrição, chamado de restrição de transição, que lida com mudanças no estado de um banco de dados. Veja um exemplo:
O índice de integralização curricular de um estudante só pode aumentar.
Assim como as anteriores, tais restrições podem ser tratadas por programas de aplicação ou, ainda, por gatilhos.