Você está na página 1de 33

Modelo Relacional + SQL

Prof. Daniel Callegari
Material elaborado pela Prof. Karin Becker

Modelo Relacional 

Codd, E.F
³A relational model of data for large shared data banks´. Communications of the ACM, 13(6):377-87, June 1970. 

Objetivos
Independência de dados 
 

ordem indexação caminhos de acesso regras de projeto (normalização)

Reduzir insconsistências 

Modelo Relacional 

Informal
Uma base de dados vista pelos usuários como um conjunto de tabelas (e nada além de tabelas)

COD
C1 C2 C3 C4 

NOME CIDADE
João Pedro Paulo Maria POA SP SP RJ

Formal
Aplicação de princípios matemáticos Relação (subconjunto do produto cartesiano de conjuntos) Álgebra Relacional

RJ SP POA NY Londres .... NOME João Pedro Paulo Maria CIDADE POA SP SP RJ RELAÇÃO C2 C3 C4 TUPLA .... COD C1 João Pedro José Maria X .Modelo Relacional : Formal DOMÍNIO COD C1 C3 C5 C4 C2 NOME CIDADES X .

.. A relação R é um subconjunto do produto cartesiano S1 X S2 X .. R é uma relação nestes n conjuntos se ele é um conjunto de tuplas <v1. X Sn. e vn  Sn. v2. . vn> onde v1  S1... S2... . . v2  S2. ..Definições  Domínio conjunto de valores atômicos  Relação Dados os conjuntos S1. Sn (não necessariamente distintos)..

Banco de Dados Relacional  Esquema Definição das relações  Instâncias (extensão) Conjunto de tuplas que compõem as relacões  Para cada relação define-se. chave alternativa chave estrangeira valores nulos dependentes do UdD . usando a DDL disponível: nome atributos restrições de integridade     chave primária.

Exemplos: CREATE ALTER DROP TRUNCATE COMMENT RENAME  Data Manipulation Language (DML) ± Comandos gerenciam dados dentro dos objetos do esquema.DDL e DML  Data Definition Language (DDL) ± Comandos definem estrutura ou esquema do banco de dados. Exemplos: SELECT INSERT UPDATE DELETE CALL EXPLAIN PLAN LOCK TABLE .

Permitem que comandos sejam agrupados em transações lógicas. COMMIT SAVEPOINT ROLLBACK SET TRANSACTION (isolation level. rollback segment)  .DCL e TCL  Data Control Language (DCL) ± Exemplos: GRANT REVOKE Transaction Control (TCL) ± Comandos usados para gerenciar as mudanças feitas por comandos DML.

Restrições de Integridade do Modelo Relacional  Restrições de Integridade (RI) que se aplicam a todo modelo que se diz conforme ao modelo relacional Integridade de Identidade     Chave primária Chave alternativa Chave estrangeira Valor nulo Integridade Referencial .

Integridade de Identidade : Conceitos  Integridade de Identidade Nenhum atributo que participe de uma chave candidata de uma relação pode assumir valor nulo  Valor nulo (NOT NULL) Tuplas incompletas  Chave Candidata Grupo mínimo de atributos tal que a combinação de valores assumida por este grupo corresponde a no máximo uma tupla  Chave Primária (PRIMARY KEY) Uma entre as chaves candidatas Selecionada pelo projetista por conveniencia de desempenho Uma relação possui uma e somente uma chave primária  Chave Alternativa (UNIQUE) Toda chave candidata que não for chave primária .

.<atr-name> <domain> [NOT NULL]]* [. CREATE [UNIQUE] INDEX <index-name> ON <table-name>(atr-name(s)). UNIQUE (atr-name(s))]*). PRIMARY KEY (atr-name(s))] [.SQL92 CREATE TABLE <table-name> (<atr-name> <domain> [NOT NULL] [.

. rg CHAR(10) NOT NULL. nascimento DATE NOT NULL. dep NUMBER(2). nome VARCHAR(15) NOT NULL. nascimento)).Exemplos CREATE TABLE DEPARTAMENTO (cod NUMBER(2) NOT NULL. CREATE TABLE EMPREGADO (cpf CHAR(8) NOT NULL. PRIMARY KEY (cod)). UNIQUE(rg). ramal CHAR(4). UNIQUE (nome. PRIMARY KEY (cpf). salario MONEY. gerente CHAR(8). nome VARCHAR(60) NOT NULL.

nascimento)). rg CHAR(10) NOT NULL UNIQUE. nascimento)). PRIMARY KEY (cpf). CREATE TABLE EMPREGADO (cpf CHAR(8) NOT NULL PRIMARY KEY. nome VARCHAR(60) NOT NULL.Exemplos CREATE TABLE EMPREGADO (cpf CHAR(8) NOT NULL. UNIQUE (nome. UNIQUE(rg). rg CHAR(10) NOT NULL. . nascimento DATE NOT NULL. nome VARCHAR(60) NOT NULL. UNIQUE (nome. nascimento DATE NOT NULL.

Integridade Referencial  Chave Estrangeira: Forma de implementar relacionamentos/associações no modelo relacional Não necessariamente a chave estrangeira participa da chave primária da relação que a contém (S)  Integridade Referencial: Se uma relação S inclui uma chave estrangeira S-FK equivalendo à chave primária R-PK de uma relação R. então todo valor S-FK em S deve ser :   Igual ao valor de R-PK em alguma tupla de R Nulo .

Integridade Referencial: Trocando em miúdos Departamento Código 4620 4622 Nome Fundamentos da Computação Computação Aplicada S-FK = Depto Primary Key = Código R-PK = Código Foreign Keys: Depto Departamento. Clotet Avelino Rodrigo 4620 4622 S-FK = Superior Depto Superior 1 2 R-PK = Código .Código Superior Empregado.Código Empregado Código 1 2 3 Nome Ir.

Integridade Referencial: Anomalias de Atualização  As atualizações na base de dados podem causar violações da integridade referencial .

Seja v(t. S-FK) v(ts.Integridade Referencial: Anomalias de Atualização  Enunciado : Sejam R e S duas relações. k) uma função. e k um conjunto de um ou mais atributos. onde t é uma tupla. S-FK)= NULL possível somente se S-FK admitir valores nulos .  Inclusão: se uma tupla ts é inserida em S. o sistema precisa assegurar uma das opções abaixo:   existe uma tupla tr em R tal que v(tr. R-PK) = v(ts.   R-PK a chave primária de R S-FK uma chave estrangeira em S que corresponde à R-PK de R. e que designe o valor do(s) atributo(s) k de uma tupla t.

Código Empregado Código 1 2 3 Nome Ir.Código Superior Empregado.Integridade Referencial: Trocando em miúdos Departamento Código 4620 4622 Nome Fundamentos da Computação Computação Aplicada S-FK = Depto Primary Key = Código R-PK = Código Foreign Keys: Depto Departamento. Clotet Avelino Rodrigo 4620 4622 S-FK = Superior Depto Superior 1 2 R-PK = Código .

Integridade Referencial: Anomalias de Atualização  Remoção: se uma tupla tr é removida de R. o sistema precisa computar o conjunto de tuplas tsi de S (i >= 0). Se o conjunto não for vazio. onde é verificada a propriedade v(tr. S-FK). R-PK) = v(tsi . as alternativas são:    a supressão de tr é proibida suprime-se TAMBÉM todas as tuplas tsi do conjunto (EFEITO CASCATA !!) deve-se substituir TAMBÉM o valor de S-FK em cada tupla tsi por NULL (DEPENDE DA DEFINIÇÃO DE S-FK) .

Integridade Referencial: Trocando em miúdos Departamento Código 4620 4622 Nome Fundamentos da Computação Computação Aplicada S-FK = Depto Primary Key = Código R-PK = Código Foreign Keys: Depto Departamento. Clotet Avelino Rodrigo 4620 4622 S-FK = Superior Depto Superior 1 2 R-PK = Código .Código Empregado Código 1 2 3 Nome Ir.Código Superior Empregado.

as alternativas são:    deve-se proibir a modificação altera-se TAMBÉM o valor de S-FK em todas as tuplas tsi do conjunto. S-FK) é verificada. deve-se TAMBÉM substituir o valor de S-FK por NULL em todas tuplas tsi DEPENDE DA DEFINIÇÃO DE S-FK . Se o conjunto não for vazio.Integridade Referencial: Anomalias de Atualização  Alteração da S-FK (relação referenciadora S): Semelhante à inserção de tuplas em S  Alteração da R-PK (relação referenciada R): Deve-se computar o conjunto de tuplas tsi de S. R-PK) = v(tsi . onde a propriedade v(tr.

Código Empregado Código 1 2 3 Nome Ir. Clotet Avelino Rodrigo 4620 4622 S-FK = Superior Depto Superior 1 2 R-PK = Código .Código Superior Empregado.Integridade Referencial: Trocando em miúdos Departamento Código 4620 4622 Nome Fundamentos da Computação Computação Aplicada S-FK = Depto Primary Key = Código R-PK = Código Foreign Keys: Depto Departamento.

adotadas pela corporação .Manutenção de Restrições de Integridade  Restrições de Integridade do Modelo Relacional estruturam-se em termos de estados consistentes da base de dados (consistente) E1 operação (consistente) E2 rejeitar !  compensar ! Os modelos mais expressivos são aqueles que deixam expressar de forma declarativa.I. junto ao esquema. as políticas de manutenção de R.

SQL92  Definição de Chave estrangeira Política de Rejeição (default)  a operação só não é rejeitada se não houver tuplas (chave estrangeira) fazendo referência a uma dada chave primária Políticas Compensatórias (EXPLICITAMENTE DECLARADAS)  CASCADES : propaga a alteração/remoção de tuplas  SET NULL : o valor da chave estrangeira é ajustado para valor nulo  SET DEFAULT: o valor da chave estrangeira é ajustado para o valor default (inicial) .

SQL92  Cláusula Foreign-Key FOREIGN KEY <fkey-atrs> REFERENCES <target-relation>[(<pkey-atrs>)] [ON DELETE <policy>] [ON UPDATE <policy>] <policy>:= CASCADE | SET NULL | SET DEFAULT ESPECIFICADA NA TABELA QUE CONTÉM A CHAVE ESTRANGEIRA !!! POLÍTICAS COMPESATÓRIAS ESPECIFICAM ³CORREÇÕES´ NA TABELA QUE CONTÉM A CHAVE ESTRANGEIRA !!!!! .

dep NUMBER(2). ramal CHAR(4). nome VARCHAR(60) NOT NULL. FOREIGN KEY gerente REFERENCES EMPREGADO). gerente CHAR(8). nome VARCHAR(15) NOT NULL.Exemplo CREATE TABLE DEPARTAMENTO (cod NUMBER(2) NOT NULL. FOREIGN KEY dep REFERENCES DEPARTAMENTO. CREATE TABLE EMPREGADO (cpf CHAR(8) NOT NULL. salario MONEY.  Qual a política? . PRIMARY KEY (cpf). PRIMARY KEY (cod)).

nome VARCHAR(60) NOT NULL. salario MONEY.  Qual a política? .Exemplo  CREATE TABLE EMPREGADO (cpf CHAR(8) NOT NULL. FOREIGN KEY dep REFERENCES DEPARTAMENTO ON DELETE SET NULL ON UPDATE CASCADE FOREIGN KEY gerente REFERENCES EMPREGADO ON DELETE SET NULL. dep NUMBER(2). gerente CHAR(8). PRIMARY KEY (cpf).

DDL : Remoção de Objetos do Esquema     drop table <table name> drop index <index name> drop view <view name> drop constraint <const name> (dentro de comando alter table!) .

DDL : Restrições   Definidas no comando create table ou alter table Tipos: unique primary key not null foreign key check(expressão)      check(sexo in (µf¶. µm¶)) check(idade > 0 and idade <70) check(salario <> 0) check(cod between 1 and 10) check(<nome de procedimento>) .

nomec varchar(60) not null. cpf char(10) not null. mae varchar(60) not null. create table cliente ( codc number(2) primary key. primary key (cod) ). . unique(nomec. saldo number(7. unique (cpf). idade number(2) check (idade between 16 and 90).DDL : Restrições create table conta ( cod number(5) not null.2) not null check(saldo >=0). rg char(10) not null unique. mae) ).

primary key (cod) ). alter table conta add constraint conta_pk primary key(cod). saldo number(7.2) not null check(saldo >=0). . ou create table conta (cod number(5). alter table conta add check(saldo is not null and saldo>=0).DDL : Restrições create table conta( cod number(5) not null.2)). saldo number(7. alter table conta add check(cod is not null).

DDL : Restrições ALTER TABLE <nome tabela> ADD <definição restrição> <definição restrição>::= <padrão>| <nomeada> <nomeada>::= CONSTRAINT <nome><padrão> <padrão>::= unique | check | primary key | foreign key .

DDL : Restrições alter table conta add constraint emp_pk primary key(cod). ou alter table conta add check(saldo is not null and saldo>0). ou alter table conta add primary key(cod). . ---------------------------------------------------------alter table conta add constraint saldo_verif check(saldo is not null and saldo>0).