English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Restrições PostgreSQL

Restrições do PostgreSQL são usadas para especificar regras de dados na tabela.

Se houver um comportamento de dados que viola a restrição, o comportamento será interrompido pela restrição.

Restrições podem ser especificadas no momento da criação da tabela (através da declaração CREATE TABLE) ou após a criação da tabela (através da declaração ALTER TABLE).

Restrições garantem a precisão e a confiabilidade dos dados no banco de dados.

Restrições podem ser de nível de coluna ou de tabela. Restrições de nível de coluna se aplicam apenas à coluna, enquanto restrições de nível de tabela são aplicadas à tabela inteira.

Aqui estão algumas restrições comuns no PostgreSQL.

  • NOT NULLIndica que uma coluna não pode armazenar valores NULL.

  • UNIQUEGarante que os valores de uma coluna sejam únicos.

  • PRIMARY Key: Combinação de NOT NULL e UNIQUE. Garante que uma coluna (ou combinação de duas ou mais colunas) tenha um identificador único, o que ajuda a encontrar mais rapidamente um registro específico na tabela.

  • FOREIGN Key: Garante a integridade referencial dos valores entre duas tabelas. Uma tabela pode referenciar valores de outra tabela.

  • CHECK: Garante que os valores da coluna estejam em conformidade com as condições especificadas.

  • EXCLUSION: Restrição exclusiva, garante que, se qualquer duas linhas de colunas ou expressões especificadas forem comparadas usando um operador específico, pelo menos um dos operadores de comparação retornará falso ou valor vazio.

Restrição NOT NULL

Por padrão, uma coluna pode salvar valores NULL. Se você não deseja que uma coluna tenha valores NULL, é necessário definir essa restrição na coluna, especificando que valores NULL não são permitidos na coluna.

NULL é diferente de não ter dados, ele representa dados desconhecidos.

Exemplo

A seguir, é criado um novo tabela chamado COMPANY1adicionou 5 um campo, onde três ID, NAME, AGE são configurados para não aceitar valores nulos:

CREATE TABLE COMPANY1(
   ID INT PRIMARY KEY NOT NULL,
   NAME           TEXT    NOT NULL,
   AGE            INT     NOT NULL,
   ADDRESS CHAR(50),
   SALARY         REAL
);

Restrição UNIQUE

A restrição UNIQUE pode ser configurada para que a coluna seja única, evitando que valores repetidos apareçam na mesma coluna.

Exemplo

A seguir, é criado um novo tabela chamado COMPANY3adicionou 5 um campo, onde AGE é configurado como UNIQUE, portanto, você não pode adicionar dois registros com a mesma idade:

CREATE TABLE COMPANY3(
   ID INT PRIMARY KEY NOT NULL,
   NAME           TEXT    NOT NULL,
   AGE  INT  NOT NULL UNIQUE,
   ADDRESS CHAR(50),
   SALARY  REAL  DEFAULT 50000.00
);

PRIMARY KEY

Ao projetar um banco de dados, PRIMARY KEY é muito importante.

A PRIMARY KEY é conhecida como chave primária, que é o identificador único de cada registro na tabela de dados.

Pode haver várias colunas configuradas como UNIQUE, mas uma tabela pode ter apenas uma coluna configurada como PRIMARY KEY.

Podemos usar a chave primária para referenciar linhas na tabela, também podemos configurar a chave primária como chave estrangeira em outra tabela para criar relações entre tabelas.

A chave primária é a combinação de restrição de não nulo e restrição de único.

Uma tabela pode ter apenas uma chave primária, que pode ser composta por um ou mais campos. Quando vários campos são usados como chave primária, eles são chamados de chave primária composta.

Se uma tabela definir um chave primária em qualquer campo, não podem haver dois registros com o mesmo valor nesses campos.

Exemplo

Vamos criar COMAPNY4 Tabela, onde o ID é a chave primária:

CREATE TABLE COMPANY4(
   ID INT PRIMARY KEY NOT NULL,
   NAME           TEXT    NOT NULL,
   AGE            INT     NOT NULL,
   ADDRESS CHAR(50),
   SALARY         REAL
);

Restrição de chave estrangeira

A restrição de chave estrangeira especifica que os valores em uma coluna (ou um grupo de colunas) devem coincidir com os valores que aparecem em uma linha específica de outra tabela.

Normalmente, uma chave estrangeira em uma tabela aponta para uma chave única em outra tabela (restrição de chave única), mantendo a integridade de referência entre duas tabelas relacionadas.

Exemplo

A seguir, um exemplo de criação de uma tabela COMPANY6 tabela, e adicionou5um campo:

CREATE TABLE COMPANY6(
   ID INT PRIMARY KEY NOT NULL,
   NAME           TEXT    NOT NULL,
   AGE            INT     NOT NULL,
   ADDRESS CHAR(50),
   SALARY         REAL
);

Por exemplo, vamos criar uma tabela DEPARTMENT1 tabela, e adicionamos 3 um campo, EMP_ID é uma chave estrangeira, referenciando COMPANY6 do ID:

CREATE TABLE DEPARTMENT1(
   ID INT PRIMARY KEY      NOT NULL,
   DEPT           CHAR(50) NOT NULL,
   EMP_ID         INT      references COMPANY6(ID)
);

Restrição de verificação

A restrição de verificação garante que todos os valores na coluna satisfaçam uma condição específica, ou seja, uma verificação deve ser feita na entrada de um registro. Se o valor da condição for false, o registro viola a restrição e não pode ser inserido na tabela.

Exemplo

Por exemplo, vamos criar uma nova tabela COMPANY5Foram adicionados cinco colunas. Aqui, adicionamos CHECK para a coluna SALARY, para que o salário não possa ser zero:

CREATE TABLE COMPANY5(
   ID INT PRIMARY KEY NOT NULL,
   NAME           TEXT    NOT NULL,
   AGE            INT     NOT NULL,
   ADDRESS CHAR(50),
   SALARY         REAL    CHECK(SALARY > 0)
);

Restrição de exclusão

A restrição de exclusão garante que se usar o operador especificado para comparar duas linhas em uma coluna ou expressão especificada, pelo menos um dos operadores de comparação retornará false ou null.

Exemplo

A seguir, um exemplo de criação de uma tabela COMPANY7 Tabela, adicionar 5 um campo e usou restrições EXCLUDE.

CREATE TABLE COMPANY7(
   ID INT PRIMARY KEY NOT NULL,
   NAME TEXT,
   AGE INT,
   ADDRESS CHAR(50),
   SALARY REAL,
   EXCLUDE USING gist
   (NAME WITH =,  -- Se o NAME for o mesmo e o AGE for diferente, não é permitido inserir; caso contrário, é permitido inserir.
   AGE WITH <>)   -- Se o resultado da comparação for true para toda a expressão da tabela, não é permitido inserir; caso contrário, é permitido.
);

Aqui, USING gist é um tipo de índice usado para construir e executar índices.

Você precisa executar o comando CREATE EXTENSION btree_gist para cada banco de dados, o que instalará a extensão btree_gist, que define restrições EXCLUDE para tipos de dados escalares puros.

Como já forçamos que a idade seja a mesma, vamos verificar isso inserindo um registro na tabela:

INSERT INTO COMPANY7 VALUES(1, 'Paul', 32, 'California', 20000.00 );
INSERT INTO COMPANY7 VALUES(2, 'Paul', 32, 'Texas', 20000.00 );  
-- Este dado tem o mesmo NAME que o primeiro e o mesmo AGE que o primeiro, portanto, cumpre os critérios de inserção
INSERT INTO COMPANY7 VALUES(3, 'Allen', 42, 'California', 20000.00 );
-- Este dado é idêntico ao acima em NAME, mas diferente em AGE, portanto, não é permitido inserir

Os dois primeiros foram adicionados sem problemas COMPANY7 na tabela, mas o terceiro causará um erro:

ERRO: valor duplicado de chave viola a restrição única "company7_pkey"
DETALHES: Chave (id)=(3) já existe.

Excluir restrição

Para excluir uma restrição, é necessário saber o nome da restrição; se já souber o nome, excluir a restrição é simples. Se não souber o nome, é necessário encontrar o nome gerado pelo sistema, que pode ser encontrado usando \d table_name.

A sintaxe genérica é a seguinte:

ALTER TABLE table_name DROP CONSTRAINT some_name;