a palavra chave NOT onde se desejar.Dica: Na maioria dos projetos de banco de dados, a maioria das colunas deve ser especificada como nao-nula. Restricoes de unicidadeA restricao de unicidade garante que os dados contidos na coluna, ou no grupo de colunas, e unico em relacao a todas as outras linhas da tabela. A sintaxe eCREATE TABLE produtos ( cod_prod integer UNIQUE, nome text, preco numeric);quando escrita como restricao de coluna, eCREATE TABLE produtos ( cod_prod integer, nome text, preco numeric, UNIQUE (cod_prod));quando escrita como restricao de tabela.Se uma restricao de unicidade fizer referencia a um grupo de colunas, as colunas deverao ser listadas separadas por virgula:CREATE TABLE exemplo ( a integer, b integer, c integer, UNIQUE (a, c));Isto especifica que a combinacao dos valores das colunas indicadas deve ser unico para toda a tabela, embora nao seja necessario que cada uma das colunas seja unica (o que geralmente nao e).Tambem e possivel atribuir nomes as restricoes de unicidade:CREATE TABLE produtos ( cod_prod integer CONSTRAINT unq_cod_prod UNIQUE, nome text, preco numeric);De um modo geral, uma restricao de unicidade e violada quando existem duas ou mais linhas na tabela onde os valores de todas as colunas incluidas na restricao sao iguais. Entretanto, os valores nulos nao sao considerados iguais nesta comparacao. Isto significa que, mesmo na presenca da restricao de unicidade, e possivel armazenar um numero ilimitado de linhas que contenham o valor nulo em pelo menos uma das colunas da restricao. Este comportamento esta em conformidade com o padrao SQL, mas ja ouvimos dizer que outros bancos de dados SQL nao seguem esta regra. Portanto, seja cauteloso ao desenvolver aplicativos onde se pretenda haver portabilidade. Chaves primariasTecnicamente a restricao de chave primaria e simplesmente a combinacao da restricao de unicidade com a restricao de nao-nulo. Portanto, as duas definicoes de tabela abaixo aceitam os mesmos dados:CREATE TABLE produtos ( cod_prod integer UNIQUE NOT NULL, nome text, preco numeric);CREATE TABLE produtos ( cod_prod integer PRIMARY KEY, nome text, preco numeric);As chaves primarias tambem podem restringir mais de uma coluna; a sintaxe e semelhante a da restricao de unicidade:CREATE TABLE exemplo ( a integer, b integer, c integer, PRIMARY KEY (a, c));A chave primaria indica que a coluna, ou grupo de colunas, pode ser utilizada como identificador unico das linhas da tabela (Isto e uma consequencia direta da definicao da chave primaria. Deve ser observado que a restricao de unicidade nao fornece, por si so, um identificador unico, porque nao exclui os valores nulos). A chave primaria e util tanto para fins de documentacao quanto para os aplicativos cliente. Por exemplo, um aplicativo contendo uma Interface de Usuario Grafica (GUI), que permite modificar os valores das linhas, provavelmente necessita conhecer a chave primaria da tabela para poder identificar as linhas de forma unica.Uma tabela pode ter no maximo uma chave primaria (embora possa ter muitas restricoes de unicidade e de nao-nulo). A teoria de banco de dados relacional dita que toda tabela deve ter uma chave primaria. Esta regra nao e imposta pelo PostgreSQL, mas normalmente e melhor segui-la. Chaves EstrangeirasA restricao de chave