LABORATÓRIO DE BANCO DE DADOS Integridade Referencial DEFINIÇÃO DA ESTRUTURA DE TABELAS A definição de uma tabela , por meio da DDL, sub-linguagem da SQL, é realizada por meio do comando CREATE TABLE. Por meio deste comando defini-se o nome da tabela, seus respectivos campos suas restrições e seus elos com outras tabelas do banco de dados. Sintaxe da DDL para definição de tabelas: CREATE TABLE nome_tabela ( CampoA domínio de dado , CampoB domínio de dado, CampoC domínio de dado, ... Restrição1, ... Restriçãon) Na definição de cada tabela podemos determinar as regras para garantir a integridade REGRAS DE INTEGRIDADE A inserção de regras de integridade tem por objetivo e garantir que mudança – inserções, alterações e exclusões, não venham a gerar a perda da consistência dos dados. 1) Restrição de Domínio Limitam o domínio para cada coluna da tabela a ser gerada. Caso 1: definição do tipo de dado para os campos da tabela Notação: Nome_campo TIPO_DOMÍNIO Ex: Nome varchar(35), Salario decimal(10,2), Matricula integer Obs:: O tipo de dado é uma restrição de domínio obrigatória em qualquer SGBD Os tipos de dados podem variar de SGBD Caso 2: Obrigatoriedade de um valor para o campo da tabela Notação Nome_campo tipo_domínio NOT NULL Ex: Nome Char(35) not null, Salario decimal(10,2) not null, Matricula integer not null, Caso 3: valor único para um determinado campo da tabela Notação Nome_campo tipo_domínio UNIQUE Ex: Nota de Aula – Banco de Dados Prof. Sidney Vieira Matricula integer unique not null, 1 Caso 3: valor limitado para um determinado campo da tabela. Neste caso devemos primeiro criar um domínio especifico e depois utilizado na definição de um campo da tabela Notação: CREATE DOMAIN c nome_dominio tipo_de_dado check (value in (valor1, valor2,valor3, ..., valorn) ) Obs: As aspas são utilizadas quando o tipo de dados for não numérico Ex: CREATE DOMAIN Tipo_salario decimal(10,2) check (value in ( 350, 500, 800,1000)) …. Matricula integer unique not null, 2) Integridade de Identidade A definição da integridade de identidade é realizada por meio da chave primária. Ela não pode conter valor nulo, zero, carácter em branco e qualquer outra situação que caracterize a inexistência do conteúdo deste campo. Notação: Primary Key(nome_campo) Ex: Matricula integer unique not null, Nome varchar(35) not null, Salario Tipo_salário, Primary Key (matricula), 3) Integridade Referencial A integridade referencial garante que a referência feita em uma tupla ( linha) de uma tabela, a outra tupla em outra tabela(ou na mesma), não perca sua consistente. Ela é feita por meio da chave estrangeira. Notação: Foreign Key(nome_campo) references nome_tabela( nome_campo) Ex: Matricula integer unique not null, Nome varchar(35) not null, Salario Tipo_salário, Cod_departamento integer, Primary Key (matricula), FOREING KEY ( cod_departamento) REFERENCES Departamento(cod_dept), Onde: cod_dept é a chave primário da tabela departamento 3.1 Variações para a Integridade Referencial Define o que será feito quando ocorrer uma exclusão ou alteração do valor na tagela a qual é feita a referencia. FOREIGN KEY (nome_campo) REFERENCES nome_tabela(nome_campo) [ ONDELETE | UPDATE ] [ SET NULL | CASTADE | NO ACTION] NO ACTION – não permite a exclusão da linha caso exista uma referencia dela na tabela CASCADE – apaga todas as linhas que possuírem o campo referenciado com o valor com o mesmo valor do campo que está sendo excluído na outra tabela SET NULL – Coloca o valor nulo no campo em todos os campos que possuem o valor que está sendo excluído na outra tabela. Nota de Aula – Banco de Dados Prof. Sidney Vieira 2 Exemplo: funcionario Departamento CREATE TABLE funcionario ( Matricula int not null primary key, nome varchar(50), ... cod_departa varchar(2), FOREIGN KEY ( cod_departa) REFERENCES Departamento(cod_dept) ONDELETE CASCADE) ) CREATE TABLE departamento ( cod_dept varchar(2) not null primary key, nome var char(40), ... ) Quando uma linha da tabela departamento for de For excluida todas a linhas da tabela funcionario que apontam para o referido departamento por meio do campo cod_departa serão excluidos Exemplo: CREATE TABLE funcionario ( Matricula int NOT NULL, Nome varchar(20), CPF varchar(13) unique, Salario decimal(5,2), Endereço vachar(50), cod_departa char(2), PRIMARY KEY (matricula), FOREING KEY ( cod_departamento) REFERENCES departamento (cod_dept) ONDELETE CASCADE ) 4) Constraint A definição de CONSTRAINT como elemento de uma tabela permite nomear as restrições realizadas para garantir a integridade do banco de dados. Isto facilita posteriormente a remoção da restrição sem que o campo com os seus respectivos valores de dados sejam excluídos. Nota de Aula – Banco de Dados Prof. Sidney Vieira 3 CREATE TABLE funcionario ( Matricula char(5) NOT NULL, Nome varchar(20), CPF varchar(13), Salario decimal(5,2), Endereço varchar(50), codigo_depart char(2), CONSTRAINT checksalario check salario > 350,00 CONSTRAINT PK_matri PRIMARY KEY (matricula), CONSTRAINT UC_cpf unique(cpf), CONSTRAINT FK_depto FOREIGN KEY ( cod_departamento) REFERENCES departamento (cod_dept) ONDELETE CASCADE ) Uma restrição pode ser deletada a qualquer momento do banco de dados. Se não mais proceder a regra do valor do CPF ser único basta deletar a restrição uc_cpf, que o campo cpf passa a poder ter valores repetidos. Nota de Aula – Banco de Dados Prof. Sidney Vieira 4