Noções básicas de restrições no PostgreSQL.
CREATE TABLE alunos (
nome text,CHECK (email ~* '^.+@.+\..+$'),
email text integer CHECK (nota <= 10 AND nota >= 0),
nota date,
data_matricula date,
data_nascimento CHECK (data_matricula > data_nascimento)
);
insert into alunos values ('jose','jose@consudata.com.br',5,'2020-01-19','1974-08-31');
insert into alunos values ('jose','jose@consudata.com.br',8,'1973-03-09','1974-08-31');
insert into alunos values ('joao','jose@consudata.com.br',5,'2020-03-19','1979-04-25');
CREATE TABLE alunos (
nome text,CONSTRAINT email_correto CHECK (email ~* '^.+@.+\..+$'),
email text integer CONSTRAINT nota_possivel CHECK (nota < 10 AND nota >= 0),
nota date,
data_matricula date,
data_nascimento CHECK (data_matricula > data_nascimento)
);
CREATE TABLE alunos (
nome text,NOT NULL CHECK (email ~* '^.+@.+\..+$'),
email text integer CHECK (nota < 10 AND nota >= 0),
nota date,
data_matricula date,
data_nascimento CHECK (data_matricula > data_nascimento)
);
CREATE TABLE alunos (
nome text,CHECK (email ~* '^.+@.+\..+$' AND email IS NOT NULL),
email text integer CHECK (nota < 10 AND nota >= 0),
nota date,
data_matricula date,
data_nascimento CHECK (data_matricula > data_nascimento)
);
CREATE TABLE alunos (
nome text,NOT NULL UNIQUE CHECK (email ~* '^.+@.+\..+$'),
email text integer CHECK (nota < 10 AND nota >= 0),
nota date,
data_matricula date,
data_nascimento CHECK (data_matricula > data_nascimento)
);
O PostgreSQL irá criar um index btree para colunas únicas. É importante notar que como NULL não é comparável, se houver duas linhas com valores NULL na mesma coluna, haverá risco de duplicações.
CREATE TABLE alunos (
integer PRIMARY KEY,
aluno_id
nome text,NOT NULL CHECK (email ~* '^.+@.+\..+$'),
email text integer CHECK (nota < 10 AND nota >= 0),
nota date,
data_matricula date,
data_nascimento CHECK (data_matricula > data_nascimento)
);
CREATE TABLE alunos (
integer NOT NULL UNIQUE,
aluno_id
nome text,NOT NULL CHECK (email ~* '^.+@.+\..+$'),
email text integer CHECK (nota < 10 AND nota >= 0),
nota date,
data_matricula date,
data_nascimento CHECK (data_matricula > data_nascimento)
);
CREATE TABLE foo (
integer,
a integer,
b integer,
c PRIMARY KEY (a, c)
);
Pode haver apenas uma chave primária por tabela. Chaves primárias são importantes não só para documentação, como também para indexação, para uso em aplicações e para ser usada como referências a outras tabelas.
CREATE TABLE presenca (
integer PRIMARY KEY,
falta_id integer REFERENCES alunos (aluno_id),
aluno_id
presenca text );
CREATE TABLE presenca (
integer PRIMARY KEY,
falta_id integer REFERENCES alunos,
aluno_id
presenca text );
CREATE TABLE produto (
integer PRIMARY KEY,
produto_no
nome text,numeric
preco
);
CREATE TABLE pedidos (
integer PRIMARY KEY,
pedido_id
endereco_envio text,...
);
CREATE TABLE pedidos_intens (
integer REFERENCES produtos ON DELETE RESTRICT,
produto_no integer REFERENCES pedidos ON DELETE CASCADE,
pedido_id integer,
quantidade PRIMARY KEY (produto_no, pedido_id)
);