Regras de Integridade
Restrições de Integridade Integridade refere-se a precisão ou correção de dados em um banco de dados; Restrição refere-se a impor uma condição para qualquer atualização. Antes de prosseguirmos devemos enfatizar que na escolha de um SGBD deva selecionar de fato um que forneça suporte declarativo, ou seja, mais de 90% das declarações de um banco de dados típicos consistiriam em restrições.
Tipos de Restrições Declarativa Diz respeito ao uso de constraints e rules Procedural Diz respeito ao uso de Stored Procedures e Triggers
Aspectos de Restrições Integridade de Domínio Referente aos dados que são permitidos nas colunas (campos) da tabela Integridade de Entidade Refere-se a unicidade de registros na tabela; Integridade Referencial Usada para manter a consistência entre as tuplas (registros); A tupla em uma relação, que faz referência a outra relação, deve referir a uma tupla existente nessa relação.
Implementando Integridade Declarativa com Constraint Constraint é uma regra aplicada a um determinado atributo, responsável pela restrição dos valores a serem armazenados. Uma constraint pode ser especificada nas definições de um atributo (modelo lógico) ou nas definições de coluna (modelo físico).
Criação da Tabela CREATE [ [ GLOBAL LOCAL ] { TEMPORARY TEMP } ] TABLE nome_tabela ( [ { nome_coluna tipo_dado [ DEFAULT expressão_padrão ] [ restrição_coluna [... ] ] restrição_tabela LIKE tabela_pai [ { INCLUDING EXCLUDING } DEFAULTS ] } [,... ] ] ) [ INHERITS ( tabela_pai [,... ] ) ] [ WITH OIDS WITHOUT OIDS ] [ ON COMMIT { PRESERVE ROWS DELETE ROWS DROP } ] [ TABLESPACE tablespace ]
Temporary or temp Criação da Tabela Parâmetros Quando especificado, são criados tabelas temporárias; São excluídas automaticamente no final da sessão ou no final da transação.
DEFAULT default_expr Criação da Tabela Parâmetros Atribui um valor padrão para a coluna. CREATE TABLE produtos ( prod_cod integer, prod_descricao text, prod_preco numeric DEFAULT 9.99 );
WITH OIDS WITHOUT OIDS Criação da Tabela Parâmetros Especifica se a tabela terá ou não objetos identificadores (OIDs) nomeados. O que é OID? Identificadores de Objetos Quando devemos utilizar e para que? O seqüenciamento do OID não é finito Campo inteiro de 32 bits Reinicia toda vez que seu valor máximo é atingido.
Criação da Tabela Parâmetros CONSTRAINT constraint_name Nome opcional para constraint de coluna ou de tabela. Quando não incluída, o sistema gera automaticamente. UNIQUE (column constraint) UNIQUE ( column_name [,... ] ) (table constraint) Especifica que um grupo de uma ou mais colunas de uma tabela possa conter um valor único.
Exemplo CREATE TABLE produtos ( prod_cod integer UNIQUE, prod_nome text, prod_preco numeric );
Exemplo CREATE TABLE produtos ( prod_cod integer, prod_nome text, prod_preco numeric, UNIQUE (prod_cod ) );
Exemplo CREATE TABLE exemplo ( a integer, b integer, c integer, UNIQUE (a, c) );
Exemplo CREATE TABLE produtos ( ); cod_prod integer CONSTRAINT unq_cod_prod UNIQUE, nome text, preco numeric
CHECK (expression) Criação da Tabela Parâmetros Especifica uma expressão que apresenta um resultado booleano que deve ser satisfeito para a inserção ou alteração de dados.
Exemplo CREATE TABLE produtos ( ); prod_no integer, prod_descricao text, prod_preco numeric CHECK (prod_preco > 0)
Exemplo CREATE TABLE produtos ( ); prod_no integer, prod_descricao text, prod_preco numeric CONSTRAINT preco_positivo CHECK (preco > 0)
Exemplo CREATE TABLE produtos ( prod_no integer, prod_descricao text, prod_desconto numeric CHECK (prod_desconto > 0 AND prod_desconto < 0.10), prod_preco numeric CONSTRAINT preco_positivo CHECK (preco > 0), check (prod_preco > prod_desconto) );
Constraint Not Null CREATE TABLE produtos ( ); Criação da Tabela Parâmetros prod_no integer NOT NULL CHECK (cod_prod > 0), prod_nome text NOT NULL, prod_preco numeric NOT NULL Obs importante: nulos não são checados. UNIQUE não aceita valores repetidos, mas aceita vários nulos (já que estes não são checados). Cuidado com NULLs.
Criação da Tabela Parâmetros PRIMARY KEY (column constraint) PRIMARY KEY ( column_name [,... ] ) (table constraint) Especifica que uma ou várias colunas de uma tabela contém somente valores únicos e não nulos. Identifica um conjunto de colunas como PK, providenciando o metadados sobre o projeto ou esquema de BD.
Exemplo CREATE TABLE produtos ( prod_no integer UNIQUE NOT NULL, prod_nome text, prod_preco numeric ); CREATE TABLE produtos ( prod_no integer PRIMARY KEY, prod_nome text, prod_preco numeric );
Exemplo Composta por mais de um campo. CREATE TABLE exemplo ( a integer, b integer, c integer, PRIMARY KEY (a, c) );
Criação da Tabela Parâmetros REFERENCES reftable [ ( refcolumn ) ] [ MATCH matchtype ] [ ON DELETE action ] [ ON UPDATE action ] (column constraint) FOREIGN KEY ( column [,... ] ) REFERENCES reftable [ ( refcolumn [,... ] ) ] [ MATCH matchtype ] [ ON DELETE action ] [ ON UPDATE action ] (table constraint) Cláusula que especifica um constraint de chave estrangeura (FK) FK não podem ser definidas entre tabelas temporárias Os valores inseridos nas tabelas referenciadas são os matched Match full default Não permite que o valor da FK possa ser nula Match partial Permite que o valor da FK possa ser nula Match simple
Exemplo Tabela principal CREATE TABLE produtos ( prod_no integer PRIMARY KEY, prod_nome text, prod_preco numeric ); Tabela referenciada CREATE TABLE pedidos ( ped_no integer PRIMARY KEY, prod_no integer, ped_quantidade integer, CONSTRAINT pedidos_fk FOREIGN KEY (prod_no ) REFERENCES produtos2 (prod_no ) );
Praticando Baseados no DER, crie todas as tabelas e constraints que for necessário; Ainda com base nesta relação defina condições para os atributos: Notas não pode ser superior a 10; Alunos na tabela nota tem se originar da tabela Aluno
Praticando
Referencias Quando utilizar OIDs se torna uma má idéia disponível em http://www.alexandrejose.com.br/?p=46. acessado em 27/05/2008. PostgreSQL 8.1.11 Documentation. Disponível em http://www.postgresql.org/docs/8.1/interact ive/sql-createtable.html acessado em 27/05/2008.