Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

🛡️ RESTRIÇÕES DE INTEGRIDADE EM SQL

As restrições (Constraints) garantem que os dados inseridos no banco sigam as regras de negócio e mantenham a consistência. 🛡️🧩


Objetivo: Dominar as restrições de integridade (NOT NULL, UNIQUE, PRIMARY KEY, FOREIGN KEY, CHECK) para blindar o banco de dados contra inconsistências lógicas.


📗 PASSO 1: Valores NULL e DEFAULT

Por padrão, a SQL permite valores nulos (exceto PKs). 🛡️

  • 🚫 NOT NULL: Torna o campo obrigatório.
  • ⚙️ DEFAULT: Define um valor padrão automático.
CREATE TABLE CONTATO (
    ID INT PRIMARY KEY,
    NOME VARCHAR(30) NOT NULL,
    SOBRENOME VARCHAR(30) NOT NULL DEFAULT 'SILVA',
    NASCIMENTO DATE,
    ATIVO BOOLEAN DEFAULT TRUE,
    PESO DECIMAL(5,2)
);

📗 PASSO 2: Chaves e Identificadores

🥇 Chave Primária (PRIMARY KEY)

Identifica unicamente cada registro. Pode ser simples ou composta (M:N).

CREATE TABLE PERFIL_USUARIO (
    USER_ID INT,
    PERFIL_ID INT,
    PRIMARY KEY (USER_ID, PERFIL_ID) -- CHAVE COMPOSTA
);

🆔 Chave Única (UNIQUE)

Impede duplicidade em colunas que não são PK (ex: CPF, E-mail).

CREATE TABLE USUARIO (
    ID INT PRIMARY KEY,
    CPF CHAR(11) UNIQUE -- VALOR ÚNICO
);

📗 PASSO 3: Chave Estrangeira (FOREIGN KEY)

Estabelece o vínculo entre tabelas com Ações Referenciais:

  • RESTRICT: Impede a exclusão do pai se houver filhos.
  • CASCADE: Exclui os filhos automaticamente (Cuidado!).
  • SET NULL: Zera a referência no filho.
-- Criando a tabela de dependentes (Relacionamento 1:N)
CREATE TABLE TELEFONE (
    ID INT PRIMARY KEY,
    NUMERO VARCHAR(15) NOT NULL,
    CONTATO_ID INT,
    FOREIGN KEY (CONTATO_ID) REFERENCES CONTATO(ID) ON DELETE CASCADE
);

📗 PASSO 4: Restrição de Verificação (CHECK)

Valida regras de negócio diretamente no motor do banco.

CREATE TABLE PRODUTO (
    ID INT PRIMARY KEY,
    PRECO DECIMAL(10,2) CHECK (PRECO > 0), -- PREÇO POSITIVO
    ESTOQUE INT CHECK (ESTOQUE >= 0)       -- ESTOQUE NÃO NEGATIVO
);

📗 PASSO 5: Melhores Práticas (Naming Constraints)

Nomear restrições facilita a leitura de erros e manutenção:

CREATE TABLE AGENDA.EVENTO (
    ID INT PRIMARY KEY,
    PRIORIDADE INT,
    CONSTRAINT CK_PRIORIDADE CHECK (PRIORIDADE BETWEEN 1 AND 5)
);

💡 Dica do Especialista: Se você não nomear sua constraint, o SGBD criará um nome aleatório (ex: SYS_C00123), o que torna o debug muito mais difícil. 🚀🛡️