Post on 17-Apr-2015
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
Reduzir insconsistências regras de projeto (normalização)
Modelo Relacional Informal
Uma base de dados vista pelos usuários como um conjunto de tabelas (e nada além de tabelas)
Formal Aplicação de princípios matemáticos Relação (subconjunto do produto cartesiano de
conjuntos) Álgebra Relacional
COD NOME CIDADE C1 João POA C2 Pedro SP C3 Paulo SP C4 Maria RJ
Modelo Relacional : Formal
COD NOME CIDADE
C1 João POA
C2 Pedro SP
C3 Paulo SP
C4 Maria RJ
COD CIDADESNOME
C1C2
C4C3
C5 ...
João PedroJoséMaria ...
RJ SPPOALondres ...
NY
DOMÍNIO
TUPLARELAÇÃO
X X
Definições
Domínio conjunto de valores atômicos
Relação Dados os conjuntos S1, S2, .., Sn (não
necessariamente distintos), R é uma relação nestes n conjuntos se ele é um conjunto de tuplas <v1, v2, ..., vn> onde v1 S1, v2 S2, ... e vn Sn.
A relação R é um subconjunto do produto cartesiano
S1 X S2 X ... X Sn.
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, usando a DDL
disponível: nome atributos restrições de integridade
chave primária, chave alternativa chave estrangeira valores nulos dependentes do UdD
DDL e DML Data Definition Language (DDL) – Comandos definem estrutura ou
esquema do banco de dados. Exemplos: CREATE ALTER DROP TRUNCATE COMMENT RENAME
Data Manipulation Language (DML) – Comandos gerenciam dados dentro dos objetos do esquema. Exemplos: SELECT INSERT UPDATE DELETE CALL EXPLAIN PLAN LOCK TABLE
DCL e TCL Data Control Language (DCL) – Exemplos:
GRANT REVOKE
Transaction Control (TCL) – Comandos usados para gerenciar as mudanças feitas por comandos DML. Permitem que comandos sejam agrupados em transações lógicas. COMMIT SAVEPOINT ROLLBACK SET TRANSACTION (isolation level, rollback segment)
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
SQL92
CREATE TABLE <table-name>
(<atr-name> <domain> [NOT NULL]
[,<atr-name> <domain> [NOT NULL]]*
[, PRIMARY KEY (atr-name(s))]
[, UNIQUE (atr-name(s))]*);
CREATE [UNIQUE] INDEX <index-name>
ON <table-name>(atr-name(s));
ExemplosCREATE TABLE DEPARTAMENTO
(cod NUMBER(2) NOT NULL, nome VARCHAR(15) NOT NULL, ramal CHAR(4),PRIMARY KEY (cod));
CREATE TABLE EMPREGADO(cpf CHAR(8) NOT NULL,rg CHAR(10) NOT NULL,nome VARCHAR(60) NOT NULL,nascimento DATE NOT NULL,salario MONEY,dep NUMBER(2),gerente CHAR(8),PRIMARY KEY (cpf), UNIQUE(rg),UNIQUE (nome, nascimento));
Exemplos
CREATE TABLE EMPREGADO
(cpf CHAR(8) NOT NULL,
rg CHAR(10) NOT NULL,
nome VARCHAR(60) NOT NULL,
nascimento DATE NOT NULL,
PRIMARY KEY (cpf),
UNIQUE(rg),
UNIQUE (nome, nascimento));
CREATE TABLE EMPREGADO
(cpf CHAR(8) NOT NULL PRIMARY KEY,
rg CHAR(10) NOT NULL UNIQUE,
nome VARCHAR(60) NOT NULL,
nascimento DATE NOT NULL,
UNIQUE (nome, nascimento));
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 Nome
4620 Fundamentos da Computação
4622 Computação Aplicada
Empregado
Código Nome Depto Superior
1 Ir. Clotet
2 Avelino 4620 1
3 Rodrigo 4622 2
Primary Key = Código
Foreign Keys:Depto Departamento.CódigoSuperior Empregado.Código
S-FK = DeptoR-PK = Código
R-PK = Código S-FK = Superior
Integridade Referencial: Anomalias de Atualização
As atualizações na base de dados podem causar violações da integridade referencial
Integridade Referencial: Anomalias de Atualização
Enunciado : Sejam R e S duas relações.
R-PK a chave primária de R S-FK uma chave estrangeira em S que corresponde à R-PK de
R. Seja v(t, k) uma função, onde t é uma tupla, e k um
conjunto de um ou mais atributos, e que designe o valor do(s) atributo(s) k de uma tupla t.
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, S-FK) v(ts, S-FK)= NULL
possível somente se S-FK admitir valores nulos
Integridade Referencial: Trocando em miúdos
Departamento
Código Nome
4620 Fundamentos da Computação
4622 Computação Aplicada
Empregado
Código Nome Depto Superior
1 Ir. Clotet
2 Avelino 4620 1
3 Rodrigo 4622 2
Primary Key = Código
Foreign Keys:Depto Departamento.CódigoSuperior Empregado.Código
S-FK = DeptoR-PK = Código
R-PK = Código S-FK = Superior
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), onde é verificada a propriedade v(tr, R-PK) = v(tsi , S-FK).
Se o conjunto não for vazio, 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 Nome
4620 Fundamentos da Computação
4622 Computação Aplicada
Empregado
Código Nome Depto Superior
1 Ir. Clotet
2 Avelino 4620 1
3 Rodrigo 4622 2
Primary Key = Código
Foreign Keys:Depto Departamento.CódigoSuperior Empregado.Código
S-FK = DeptoR-PK = Código
R-PK = Código S-FK = Superior
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,
onde a propriedade v(tr, R-PK) = v(tsi , S-FK) é verificada. Se o conjunto não for vazio, 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; deve-se TAMBÉM substituir o valor de S-FK por NULL em
todas tuplas tsi DEPENDE DA DEFINIÇÃO DE S-FK
Integridade Referencial: Trocando em miúdos
Departamento
Código Nome
4620 Fundamentos da Computação
4622 Computação Aplicada
Empregado
Código Nome Depto Superior
1 Ir. Clotet
2 Avelino 4620 1
3 Rodrigo 4622 2
Primary Key = Código
Foreign Keys:Depto Departamento.CódigoSuperior Empregado.Código
S-FK = DeptoR-PK = Código
R-PK = Código S-FK = Superior
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
Os modelos mais expressivos são aqueles que deixam expressar de forma declarativa, junto ao esquema, as políticas de manutenção de R.I. adotadas pela corporação
E1(consistente)
E2(consistente)
operação
rejeitar ! compensar !
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-KeyFOREIGN 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 !!!!!
ExemploCREATE TABLE DEPARTAMENTO
(cod NUMBER(2) NOT NULL,
nome VARCHAR(15) NOT NULL,
ramal CHAR(4),
PRIMARY KEY (cod));
CREATE TABLE EMPREGADO
(cpf CHAR(8) NOT NULL,
nome VARCHAR(60) NOT NULL,
salario MONEY,
dep NUMBER(2),
gerente CHAR(8),
PRIMARY KEY (cpf),
FOREIGN KEY dep REFERENCES DEPARTAMENTO,
FOREIGN KEY gerente REFERENCES EMPREGADO);
Qual a política?
Exemplo CREATE TABLE EMPREGADO
(cpf CHAR(8) NOT NULL,
nome VARCHAR(60) NOT NULL,
salario MONEY,
dep NUMBER(2),
gerente CHAR(8),
PRIMARY KEY (cpf),
FOREIGN KEY dep REFERENCES DEPARTAMENTO
ON DELETE SET NULL
ON UPDATE CASCADE
FOREIGN KEY gerente REFERENCES EMPREGADO
ON DELETE SET NULL;
Qual a política?
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>)
DDL : Restriçõescreate table conta(
cod number(5) not null, saldo number(7,2) not null check(saldo >=0), primary key (cod)
);
create table cliente( codc number(2) primary key,
nomec varchar(60) not null, rg char(10) not null unique, cpf char(10) not null, idade number(2) check (idade between 16 and 90), mae varchar(60) not null, unique (cpf), unique(nomec, mae)
);
DDL : Restriçõescreate table conta(
cod number(5) not null,saldo number(7,2) not null check(saldo >=0),primary key (cod)
);ou
create table conta(cod number(5),saldo number(7,2));
alter table contaadd check(cod is not null);
alter table contaadd check(saldo is not null and saldo>=0);
alter table contaadd constraint conta_pk primary key(cod);
DDL : RestriçõesALTER 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çõesalter table conta
add constraint emp_pk primary key(cod);
ou
alter table contaadd primary key(cod);
----------------------------------------------------------alter table conta
add constraint saldo_verifcheck(saldo is not null and saldo>0);
ou
alter table contaadd check(saldo is not null and saldo>0);