RESTRIÇÕES (CONSTRAINTS) – O QUE PRECISO SABER ?
Elas são restrições que o sistema gerenciador de banco de dados (SGBD) disponibiliza como um meio de manter a integridade dos dados dentro do BD. Podem ser criadas no momento de criação das tabelas ou após a criação das mesmas.
Por motivos de organização, uma prática legal a se fazer é nomear as constraints criadas.
Vamos falar um pouco sobre os tipos que podemos usar e estaremos criando uma tabela de teste (FUNCIONARIO) e vamos incrementando para usarmos os tipos.
1 – NOT NULL
Através desse tipo de constraint conseguimos fazer o gerenciamento do preenchimento de campos obrigatórios
dentro do banco de dados.
Por exemplo, temos a seguinte tabela :
CREATE TABLE FUNCIONARIO ( NOME VARCHAR2(50) NOT NULL );
No exemplo o campo NOME é de preenchimento obrigatório.
2 – PRIMARY KEY
Uma PRIMARY KEY é uma forma de identificação única que podemos ter em uma tabela, ela pode ser somente em um campo ou concatenada(dois ou mais campos). Esse tipo cria um índice único,
pois uma tabela pode conter somente uma contraint desse tipo.
Vamos exemplificar:
CREATE TABLE FUNCIONARIO ( ID NUMBER(8) CONSTRAINT PK_FUNCIONARIO PRIMARY KEY, -- nessa linha estou dizendo que o campo ID será uma PRIMARY KEY, e a constraint terá o nome de PK_PESSOA. NOME VARCHAR2(50) NOT NULL );
3 – UNIQUE KEY
Essa restrição faz com que uma coluna ou um conjunto de colunas tenham um valor único.
CREATE TABLE FUNCIONARIO ( ID NUMBER(8)
CONSTRAINT PK_FUNCIONARIO PRIMARY KEY,
NOME VARCHAR2(50) NOT NULL,
EMAIL VARCHAR2(50) CONSTRAINT UN_EMAIL_FUNC UNIQUE KEY -- nenhum funcionário cadastrado poderá ter o mesmo email. );
4 – FOREIGN KEY
Uma coluna ou conjunto de colunas que fazem referência a outra tabela, a constraint desse tipo firma restrições referenciais.
CREATE TABLE FUNCIONARIO ( ID NUMBER(8) CONSTRAINT PK_FUNCIONARIO PRIMARY KEY, NOME VARCHAR2(50) NOT NULL, EMAIL VARCHAR2(50) CONSTRAINT UN_EMAIL_FUNC UNIQUE KEY, ID_DEPART NUMBER(8), CONSTRAINT FK_DEPART FOREIGN KEY (ID_DEPART) REFERENCES DEPARTAMENTO(ID_DEPART) --Adicionamos uma constraint que faz referência a uma outra tabela(DEPARTAMENTO). );
5 – CHECK
Possibilita que restrições lógicas possam ser validadas antes da manipulação dos dados. Um bom exemplo que podemos usar seria com o campo sexo, que deve aceitar somente as letras M e F.
CREATE TABLE FUNCIONARIO ( ID NUMBER(8) CONSTRAINT PK_FUNCIONARIO PRIMARY KEY, NOME VARCHAR2(50) NOT NULL, EMAIL VARCHAR2(50) CONSTRAINT UN_EMAIL_FUNC UNIQUE KEY, ID_DEPART NUMBER(8), SEXO VARCHAR2(1) CONSTRAINT CK_SEXO CHECK (SEXO IN ('M','F')), CONSTRAINT FK_DEPART FOREIGN KEY (ID_DEPART) REFERENCES DEPARTAMENTO(ID_DEPART) --Adicionamos uma constraint que faz referência a uma outra tabela(DEPARTAMENTO). );
Bom, já vimos os tipos e como cria-las no momento da criação da tabela, porém podemos também cria-las após a criação da tabela. Vamos exemplificar criando a CHECK que fizemos nos exemplos acima:
ALTER TABLE FUNCIONARIO ADD CONSTRAINT CK_SEXO CHECK (SEXO IN ('M','F'));
Podemos também habilitar e desabilitar as constraints:
ALTER TABLE FUNCIONARIO ENABLE CK_SEXO; --Habilitando ALTER TABLE FUNCIONARIO DISABLE CK_SEXO; --Desabilitando
Fontes