A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

VII- Álgebra Relacional

Apresentações semelhantes


Apresentação em tema: "VII- Álgebra Relacional"— Transcrição da apresentação:

1 VII- Álgebra Relacional
Um pequeno conjunto de operadores que nos permite manipular relações. Os operadores são: 1. União, interseção, e diferença. Como os operadores da teoria dos conjuntos. Restrição: os esquemas de relação devem ser os mesmos. 2. Seleção: Somente certas linhas de uma relação. 3. Projeção: Somente certas colunas. 4. Produto e Junção: Juntando duas relações de uma maneira útil.

2 Algebra Relacional Poder de expressão limitado (subconjunto de todas as consultas possíveis) Pode ser otimizada (isto é, as operações para uma consulta podem ser colocadas em uma ordem ótima, visando diminuir os custos do processamento da consulta) Mesmo limitada, é rica o bastante para expressar muitas consultas úteis Notação:  SELEÇÃO  THETA-JUNÇÃO π PROJEÇÃO JUNÇÃO NATURAL X PRODUTO CARTESIANO U UNION – DIFERENÇA  INTERSEÇÃO

3 Esquema Relacional Depósito(filial, conta, cliente, saldo)
Cliente(cliente, rua, cidade) Empréstimo(filial, no-empres, cliente, valor) Filial(filial, ativo, cidade) Empres Filial No-empres Cliente Valor T Subúrbio Fred T Subúrbio Saul T Subúrbio Saul T Centro Ana

4 SELECÃO  (R) grau((R)) = grau(R)
0  card((R))  card(R) (R) (R)  é uma condição de seleção: termos da forma: atributo op valor[atributo] op é um de < = >  ≠ ≥ exemplo de termo: filial = ‘Subúrbio’ termos são conectados por , ,  filial = ‘Subúrbio’  valor > 1000 (Emprestimo) Subúrbio 234 Saul 1200 Subúrbio 235 Saul 1500

5 PROJEÇÃO π i1,...,im (R) 0  card (π A (R))  card (R)
grau (π A (R)) = m  grau(R) = n (R) 1  ij  n atributos produz um conjunto de m-tuplas a1,...,am tal que n-tupla b1,...,bn em R em que aj = bij para j = 1,...,m π filial, cliente (Emprestimo) Subúrbio Fred Subúrbio Saul Centro Ana

6 Produto R = R1  R2 combina cada tupla t1 de R1 com cada tupla t2 de R2 e coloca em R a tupla t1t2.

7 Produto Cartesiano () grau(R) = k1 grau(R  S) = k1 + k2
grau(S) = k2 card(R  S) = card(R)  card(S) R  S é o conjunto de todas as possíveis (k1 + k2)-tuplas cujos primeiros k1 atributos são uma tupla em R últimos k2 atributes são uma tupla em S R S R  S A B C D D E F A B C D D' E F

8 Theta-Junção R = R1 C R2 é equivalente a R = C(R1  R2).

9  grau(R) = r grau(S) = s grau (R S) = r + s
0  card(R S) card(R)  card(S) (R  S) R S = R.A<S.D    pode ser < > = ≠  Se igual (=), então é umEQUIJOIN R(A B C) S(C D E) T(A BC C’DE)

10 União (R  S) grau(R) = grau(S) = grau(R  S)
max(card(R),card(S)) card(R  S)card(R) + card(S) Conjunto de tuplas em R ou S ou ambas R R  S S R  S Encontrar os clientes da filial `Centro´ πCliente ( Filial = “Centro" ( Empréstimo  Depósito) )

11 Diferença(R S) grau(R) = grau(S) = grau(R – S) 0 card(R – S)card(R) R – S R tuplas em R não em S Depositantes da agência `Centro´ que não pediram empréstimo πcliente ( filial = ‘Centro’ (Deposito – Emprestimo) Deposito < Centro, 36, Patricia, 500 > Deposito < Centro, 71, Saul, 1000 > Emprestimo < Centro, 72, Patrícia, > πcliente (filial = ‘Centro’ (Depósito )) - πcliente (filial = ‘Centro’ (Empréstimo)) (π (D)  π (E)) funciona?

12 Combinando as Operações
Álgebra = Argumentos + Maneiras de se construir expressões algébricas. Para a álgebra relacional: Argumentos = variáveis-relações + constantes (instâncias finitas de relações). Expressões: operadores + parênteses Consulta = expressão de álgebra relacional.

13 Notação Linear p/ Expressões
Inventar novos nomes para relações intermediárias, e atribuir a elas valores que são expressões algébricas. Inventar nomes convenientes para os atributos das relações intermediárias Exemplo Encontre os bares que estão ou na Avenida Oceânica ou vendem Bud por menos de 3,00. Vende(bar, cerveja, preço) Bar(nome, end) R1(nome) := nome( end = `Av. Oceânica´ (Bar)) R2(nome) := bar( cerveja = `Bud´ AND preço < 3,00 (Vende)) R3(nome) := R1  R2

14 Semântica de Bags Uma relação (em SQL, ao menos) é realmente um bag ou multiset, em vez de um conjunto Pode conter a mesma tupla mais de uma vez, embora não haja uma ordem específica. Exemplo: {1,2,1,3} é um bag e não um conjunto. Selecão, projecão, e junção trabalham para bags tão bem como para sets. Trabalham tupla-a-tupla, e não eliminam duplicatas.

15 União de Bags Interseção de bags Diferença de bags
Soma as vezes em que um elemento aparece nos dois bags. Exemplo: {1,2,1}  {1,2,3,3} = {1,1,1,2,2,3,3}. Interseção de bags Toma o mínimo de ocorrências em cada bag. Exemplo: {1,2,2,1}  {1,2,2,3,3} = {1,2,2}. Diferença de bags Subtrai o número de ocorrências nos dois bags. Exemplo: {1,2,1} – {1,2,3,3} = {1}.

16 Leis para Bags Diferem de Leis para Conjuntos
Algumas leis familiares continuam valendo para bags. Exemplos: união e interseção são ainda comutativas e associativas. Mas outras leis que valem para conjuntos não valem para bags. Exemplo R  (S  T)  (R  S)  (R  T) vale para conjuntos. Sejam R, S, e T cada um o bag {1}. Lado esquerdo: S  T = {1,1}; R  (S  T) = {1}. Lado direito: R  S = R  T = {1}; (R  S)  (R  T) = {1}  {1} = {1,1}  {1}.

17 Álgebra Relacional Estendida (“Não Clássica")
Trata com bags. Operator  de eliminação de duplicatas. Projeção estendida. Operador  de classificação. Operador  de agrupamento e agregação. Operador o de junção externa.

18 Eliminação de Duplicatas
(R) = relação com uma cópia de cada tupla que aparece uma ou mais vezes em R. Exemplo R = A B 1 2 3 4 (R) =

19 Classificação L(R) = lista de tuplas de R, ordenada segundo os atributos na lista L. Note que o resultado não é nem bag e nem conjunto. É lista ou array. Conseqüência:  não pode ser seguido por quaisquer outros operadores relacionais. Exemplo R = A B 1 3 3 4 5 2 B(R) = [(5,2), (1,3), (3,4)].

20 Projeção Estendida Exemplo
Permite que as colunas na projeção sejam funções de uma ou mais colunas da relação-argumento. Exemplo R = A B 1 2 3 4 A+B,A,A(R) = A+B A1 A2 3 1 1 7 3 3

21 Operadores de Agregação
Não há operadores relacionais; em vez disso eles sumarizam os valores de uma ou mais colunas de alguma forma. Os 5 operadores-padrão de agregação: Sum, Average, Count, Min, e Max.

22 Operadores de Agrupamento
L(R), onde L é uma lista de elementos que são ou Atributos individuais (grupos) ou Da forma (X), em que  é um operador de agregação e X o atributo ao qual ele é aplicado É calculado assim: Agrupar R segundo os grupos definidos na lista L. Dentro de cada grupo, calcular (X), para cada (X) na lista L. O resultado é a relação cujas colunas consistem de cada elemento da lista L sendo uma linha para cada grupo.

23 Exemplo Seja R = bar cerveja preço Alemão Bud 2,00 Alemão Skol 2,75
Moraes Bud 2,50 Moraes Brahma 3,00 Tricolor Skol 3,25 Rubronegro Brahma 3,00 Calcular cerveja,AVG(preço)(R). 1. Agrupar pelo(s) atributo(s) de agrupamento, cerveja neste caso:

24 2. Calcular a média de preço dentro dos grupos:
cerveja AVG(preço) Bud 2.25 Skol 3.00 Brahma 3.00

25 Junção Externa A junção normal pode “perder” informação, isto é, as tuplas que não casam com as condições de junção. O valor null  pode ser usado para fazer aparecer as tuplas não casadas. Isto é feito pelo operação junção externa o ("outerjoin") Variações: theta-junção externa, junções externas esquerda e direita.

26 Exemplo R = A B 1 2 3 4 S = B C 4 5 6 7 R o S = A B C
1 2 3 4 S = B C 4 5 6 7 R o S = A B C junção natural 1 2  junção externa direita  junção externa esquerda

27 VIII- A Linguagem SQL Uma maquilagem na álgebra relacional, para torná-la mais palatável ao programador Forma Principal: SELECT atributos desejados FROM variáveis do tipo tupla varrendo relações WHERE condições sobre as variáveis-tupla;

28 Esquema-Exemplo Esquema relacional: Cerveja(nome, fab)
Bar(nome, end, alvará) Boêmio(nome, end, telefone, cervejafav) Gosta_de(boêmio, cerveja) Vende(bar, cerveja, preço) Frequenta(boêmio, bar)

29 Exemplo Que cervejas são fabricadas por Anheuser-Busch?
Cerveja(nome, fab) SELECT nome FROM Cerveja WHERE fab = 'Anheuser-Busch'; Nota: aspas simples para cadeias de caracteres. nome Bud Bud Lite Michelob

30 Semântica Formal de Consultas SQL a uma Relação Simples
Comece com a relação na cláusula FROM. Aplique , usando a condição como a cláusula WHERE (bag) . Aplique , usando os atributos como a cláusula SELECT (projeção estendida, bag) . Semântica Operacional Equivalente Imagine uma variável tupla varrendo todas as tuplas da relação. Para cada tupla: Verifique se ela satisfaz a cláusula WHERE. Exiba os (alguns) valores em termos de um SELECT.

31 Listar todos os Atributos
Cerveja(nome, fab) SELECT * FROM Cerveja WHERE fab = 'Anheuser-Busch'; nome fab Bud Anheuser-Busch Bud Lite Anheuser-Busch Michelob Anheuser-Busch

32 Renomeando Colunas cerveja Cerveja(nome, fab) SELECT nome AS cerveja
FROM Cerveja WHERE fab = 'Anheuser-Busch'; cerveja Bud Bud Lite Michelob

33 Colunas como Expressões
Vende(bar, cerveja, preço) SELECT bar, cerveja, preço*120 AS preço_em_Yen FROM Vende; bar cerveja preço_em_Yen Tricolor Bud 300 Rubronegro Miller 360 … … … Note: sem a cláusula WHERE (OK).

34 Dica: insira constantes na cláusula SELECT, se isto fizer sentido.
Gosta(boêmio, cerveja) SELECT boêmio, ‘gosta de Bud' AS que_gosta_de_Bud FROM Gosta WHERE cerveja = 'Bud'; boêmio que_gosta_de_Bud Salete gosta de Bud Fred gosta de Bud … …

35 Padrões Exemplo % significa qualquer cadeia de caracteres.
_ significa qualquer caractere. “Atributo LIKE padrão” é uma condição que é verdadeira se o valor do atributo (uma cadeia de caracteres) casar com o padrão. Também NOT LIKE para negação. Exemplo Encontre os boêmios cujo código de telefone tem 72-. Boêmio(nome, end, fone) SELECT nome FROM Boêmio WHERE fone LIKE '%72-_ _ _ _ _ _ _’; Os padrões devem vir entre aspas, como para cadeias de caracteres.

36 Nulls Em lugar de um valor de um componente de uma tupla. A interpretação não é exatamente “valor faltando.” Podia ser também “valor não apropriado.” Lógica de Nulls Terceiro valor booleano DESCONHECIDO. Uma consulta somente produz valores se a condição da cláusula WHERE for VERDADE (DESCONHECIDO não é suficiente).

37 Exemplo bar cerveja preço Rubronegro Brahma NULL
SELECT bar FROM Vende WHERE preço < 2,00 OR preço >= 2,00; DESCONHECIDO DESCONHECIDO DESCONHECIDO O bar Tricolor não é selecionado, mesmo se a cláusula WHERE é uma tautologia.

38 Algumas Leis não Funcionam
Lógica dos 3 Valores verdade = 1; falso = 0, e desconhecido = 1/2. Então: AND = min. OR = max. NOT(x) = 1 – x. Algumas Leis não Funcionam Exemplo: p OR NOT p = verdade Para a lógica dos 3-valores: se p = desc., então lado esquerdo = max(1/2,(1–1/2)) = 1/2 ≠ 1. Como a álgebra para bags, a lógica dos 3 valores tem a sua própria lógica.

39 Teste de NULL A condição atributo = NULL é avaliada sempre como DESCONHECIDO, mesmo se o valor do atributo é NULL! Use atributo IS NULL ou atributo IS NOT NULL se você quiser testar para NULL.

40 Consultas a mais de uma Relação
Lista das relações na cláusula FROM. A notação relação-ponto-atributo remove a ambigüidade se duas relações têm atributos com o mesmo nome. Exemplo Encontre as cervejas que os freqüentadores do bar Tricolor gostam. Gosta(boêmio, cerveja) Freqüenta(boêmio, bar) SELECT cerveja FROM Freqüenta, Gosta WHERE bar = ‘Tricolor AND Freqüenta.boêmio = Gosta.boêmio;

41 Semântica Formal de Consultas a mais de uma Relação
Comece com o produto das relações na cláusula FROM. Considere uma variável-tupla para cada relação da cláusula FROM. Imagine essas variáveis-tupla cada uma apontando para uma tupla de sua relação, em todas as combinações. Se para uma dessas combinações o valor da cláusula WHERE é verdade, então exiba os valores dos atributos do SELECT para a combinação.

42

43 Variáveis-Tupla Explícitas
Algumas vezes necessitamos fazer referência a `cópias´ de uma relação. Use variáveis-tupla como sinônimos de relações. Exemplo Encontre pares de cerveja do mesmo fabricante. Cerveja(nome, fab) SELECT c1.nome, c2.nome FROM Cerveja c1, Cerveja c2 WHERE c1.fab = c2.fab AND c1.nome < c2.nome; SQL permite AS entre uma relação e sua variável-tupla; Oracle não. Note que c1.nome < c2.nome é necessária para evitar produzir (Bud, Bud), ou ((Bud, Brahma), (Brahma, Bud)).

44 Subconsultas O resultado de um Select-From-Where pode ser usado na cláusula Where de uma outra consulta. Caso mais simples: a subconsulta retorna uma única tupla, de grau um Encontre os bares que servem Boêmia com o preço da Brahma no bar Tricolor. Vende(bar, cerveja, preço) SELECT bar FROM Venda WHERE cerveja = ‘Boêmia' AND preço = (SELECT preço FROM Vende WHERE bar = `Tricolor´ AND cerveja = `Brahma´; Note a regra de escopo: um atributo refere-se à subconsulta mais próxima, que produz um valor do mesmo. Parentetização das subconsultas é essencial.

45 O Operador IN “Tupla IN relação” é verdade sss a tupla está na relação. Exemplo Encontre o nome e o fabricante das cervejas que Fred gosta. Cerveja(nome, fab) Gosta(boêmio, cerveja) SELECT * FROM Cerveja WHERE nome IN (SELECT cerveja FROM Gosta WHERE boêmio = 'Fred’); Também: NOT IN.

46 EXISTS “[NOT]EXISTS(relação)” é verdade sss a relação [é] não é vazia. Exemplo Encontre os fabricantes que fornecem unicamente uma marca de cerveja. Cerveja(nome, fab) SELECT nome FROM Cerveja c1 WHERE NOT EXISTS (SELECT * FROM Cerveja WHERE fab = c1.fab AND nome <> c1.nome); Note a regra de escopo: para se referir a Cerveja na subconsulta, c1 é passada como parâmetro. Desta forma, a subconsulta é uma subconsulta correlacionada.

47 Quantificadores Exemplo Em Classe
ANY e ALL comportam-se como quantificadores existencial ("ao menos um") e universal, respectivamente. Em linguagem comum, “any” e “all” parecem sinônimos, i.e., “Eu sou mais gordo que qualquer um de vocês” vs. “Eu sou mais gordo que todos vocês” Mas em SQL: Exemplo Encontre a(s) cerveja(s) vendida(s) pelo mais alto preço. Vende(bar, cerveja, preço) SELECT cerveja FROM Vende WHERE preço >= ALL( SELECT preço FROM Vende); Em Classe Encontre a(s) cerveja(s) que não é(são) vendida(s) pelo mais alto preço.

48 União, Interseção, Diferença
“(subconsulta) UNION (subconsulta)” produz a união das duas relações. Similaridade para INTERSECT, EXCEPT = interseção e diferença de conjuntos. Mas: em Oracle diferença de conjuntos é MINUS, não EXCEPT. Exemplo Encontre os boêmios e cervejas tais que o boêmio gosta da cerveja e freqüenta o bar que a serve. Gosta(boêmio, cerveja) Vende(bar, cerveja, preço) Freqüenta(boêmio, bar) (SELECT * FROM Gosta) INTERSECT (SELECT boêmio, cerveja FROM Vende, Freqüenta WHERE Freqüenta.bar = Vende.bar);

49 Forçando a Semântica de Set/Bag
O default para select-from-where é bag; o default para união, interseção, e diferença é conjunto. Por que? Salva tempo quando não se compara as tuplas geradas. Entretanto, é preciso comparar para união, interseção e diferença. Para forçar conjunto em select-from-where usa-se DISTINCT depois do SELECT. Leve em conta o custo.

50 Exemplo Encontre os diferentes preços das cervejas.
Vende(bar, cerveja preço) SELECT DISTINCT preço FROM Vende; Força a semântica de bag com ALL depois de UNION, etc.

51 Expressões Baseadas em Junção
Há várias maneiras possíveis. Podem ser usadas ou “stand-alone” (em lugar de um select-from-where) ou para definir uma relação na cláusula FROM. R NATURAL JOIN S R JOIN S ON condition i.e., condition: R.B=S.B R CROSS JOIN S R OUTER JOIN S Outerjoin pode ser modificada por: NATURAL na frente. 2. ON condition no fim. 3. LEFT, RIGHT, ou FULL (default) antes de OUTER. LEFT = preenche (com NULL) tuplas de R somente; RIGHT = preenche tuplas de S somente.

52 Agregações Exemplo Em classe
Sum, avg, min, max, e count aplicam-se a atributos/colunas. Também, count(*) aplica-se a tuplas. Usadas na lista do SELECT. Exemplo Encontre o preço médio da cerveja Bud. Vende(bar, cerveja, preço) SELECT AVG(preço) FROM Vende WHERE cerveja = 'Bud'; Conta cada tupla (para cada bar que vende Bud) uma vez. Em classe Como faria se Vende fosse um bag?

53 Eliminando Duplicatas Antes da Agregação
Encontrar os diferentes preços da cerveja Bud. Vende(bar, cerveja, preço) SELECT COUNT(DISTINCT preço) FROM Vende WHERE cerveja = 'Bud'; DISTINCT pode ser usada em qq agregação, mas tipicamente só faz sentido com COUNT.

54 Agrupamento Segue select-from-where com GROUP BY uma lista de atributos. A relação que é o resultado das cláusulas FROM e WHERE é agrupada segundo os valores desses atributos, com as agregações tomando lugar somente dentro de um grupo. Exemplo Encontre os preços médios de cada cerveja. Vende(bar, cerveja, preço) SELECT cerveja, AVG(preço) FROM Vende GROUP BY cerveja;

55 Exemplo Encontre, para cada boêmio, o preço médio da cerveja Bud nos bares que eles freqüentam. Vende(bar, cerveja, preço) Freqüenta(boêmio, bar) SELECT boêmio, AVG(preço) FROM Freqüenta, Vende WHERE cerveja = 'Bud' AND Freqüenta.bar = Vende.bar GROUP BY boêmio; Note: agrupamento ocorre depois das operações  e .

56 Restrições na Lista de SELECT com Agregação
Se uma agregação é usada, então cada elemento do SELECT ou é um agregado, ou deve aparecer na cláusula group-by. Exemplo Uma forma tentadora de fazer as coisas: Vende(bar, cerveja, preço) SELECT bar, MIN(preço) FROM Vende WHERE cerveja = 'Bud'; Isto é ilegal em SQL. Problema Como devemos encontrar esse(s) bar(es)?

57 Cláusula HAVING Cláusulas HAVING são seleções em grupos, como cláusulas WHERE o são para tuplas. A condição pode usar qq variável-tupla ou relação da cláusula FROM, justo como a cláusula WHERE. Mas as variáveis-tupla varrem somente um grupo. Os atributos também só fazem sentido dentro de um grupo.

58 Exemplo Encontre a média de preços das cervejas que ou são servidas em ao menos 3 bares ou são fabricadas pela Ambev. Cerveja(nome, fab) Vende(bar, cerveja, preço) SELECT cerveja, AVG(preço) FROM Vende GROUP BY cerveja HAVING COUNT(*) >= 3 OR cerveja IN ( SELECT nome FROM Cerveja WHERE fab = 'Ambev' );

59 Exercício por Equipe Qual a cerveja que é mais vezes a favorita dos boêmios? Note que pode ser mais de uma. Boemio(nome, end, telefone, cervejafav)

60 Gabarito Select cervejafav as 'a_favorita' From Boemio
Group by cervejafav Having count(*)  ALL (Select count(*) Group by cervejafav);

61 Manutenção de BD Inserção de uma Tupla Exemplo
Modificação = insert + delete + update. Inserção de uma Tupla INSERT INTO relação VALUES (lista de valores). Insere a tupla = lista de valores, associando os valores com os atributos na ordem em que os atributos foram declarados. Esqueceu a ordem? Liste os atributos como argumentos da relação. Exemplo Gosta(boêmio, cerveja) Insira o fato de que Salete gosta de Antarctica. INSERT INTO Gosta(boêmio, cerveja) VALUES('Salete, `Antarctica´);

62 Inserção do Resultado de uma Consulta
INSERT INTO relação (subconsulta). Exemplo Criar uma tabela de todos os potenciais companheiros de Salete, i.e., as pessoas que freqüentam os bares que Salete também freqüenta. Freqüenta(boêmio, bar) CREATE TABLE Amigos_da_cerveja( nome char(30) ); INSERT INTO Amigos_da_cerveja (SELECT DISTINCT f2.boêmio FROM Freqüenta f1, Freqüenta f2 WHERE f1.boêmio= `Salete´´ AND f2.boêmio <> `Salete‘´ AND f1.bar = f2.bar

63 Remoção Exemplo DELETE FROM relação WHERE condição.
Remove todas as tuplas da relação satisfazendo a condição. Exemplo Salete não gosta mais da cerveja Bud. Gosta(boêmio, cerveja) DELETE FROM Gosta WHERE boêmio = 'Salete' AND cerveja = 'Bud'; Esvaziar a relação Gosta. DELETE FROM Gosta;

64 Exemplo Remova todas as cervejas para as quais há outras cervejas do mesmo fabricante. Cerveja(nome, fab) DELETE FROM Cerveja c WHERE EXISTS (SELECT nome FROM Cerveja WHERE fab = c.fab AND nome <> b.nome );

65 Semântica da SQL: todas as condições devem ser avaliadas primeiro.
Semântica enganadora! Se a Ambev faz Brahma e Antarctica (somente), a remoção da Brahma faz a Antarctica não satisfazer a condição? Semântica da SQL: todas as condições devem ser avaliadas primeiro. No exemplo Brahma/Antarctica, deve-se primeiro identicar as duas como alvo, e remover ambas.

66 Atualizações UPDATE relação SET lista de atribuições WHERE condição. Exemplo O número de telefone do boêmio Fred é Boêmio(nome, end, telefone) UPDATE Boêmio SET telefone = ' ' WHERE nome = 'Fred'; O preço máximo de uma cerveja é 4,00. Atualiza muitas tuplas de uma vez. Vende(bar, cerveja, preço) UPDATE Vende SET preço = 4,00 WHERE preço > 4.00;

67 Definindo um Esquema de BD
CREATE TABLE nome (lista de elements). Os principais elementos são os atributos e seus tipos, mas declarações de chave e restrições também aparecem. Comandos similares CREATE X para outros objetos X: visões, índices, asserções, “triggers”. “DROP X nome” remove o objeto criado do tipo X com aquele nome. Exemplo CREATE TABLE Vende( bar CHAR(20), cerveja VARCHAR(20), preço REAL ); DROP TABLE Vende;

68 Tipos INT ou INTEGER. REAL ou FLOAT.
CHAR(n) = cadeia de caracters de tamanho fixo, preenchida com brancos, se for o caso. VARCHAR(n) = cadeia de caracteres de tamanho variável (até n characteres). Oracle usa VARCHAR2(n) também.

69 DATE. A forma SQL é DATE 'yyyy-mm-dd'
NUMERIC(precision, decimal) é um número com precision dígitos com o ponto decimal a decimal dígitos a partir da direita. NUMERIC(10,2) pode armazenar ± ,99 DATE. A forma SQL é DATE 'yyyy-mm-dd' Oracle usa um formato diferente. TIME. A forma é TIME 'hh:mm:ss[.ss…]' em SQL. DATETIME ou TIMESTAMP. A forma é TIMESTAMP 'yyyy-mm-dd hh:mm:ss[.ss…]' em SQL.

70 Declarando Chaves Use PRIMARY KEY ou UNIQUE.
Somente uma chave primária, muitos UNIQUE. Implementações de SQL criam um índice automático (“index”) em resposta a PRIMARY KEY somente. Mas Oracle também cria índice para UNIQUE. SQL não permite NULL na chave primária, mas em colunas “unique” pode (dois ou mais NULL, mas não repetidos valores não-nulos).

71 Declarando Chaves Dois lugares para declarar:
Depois de um tipo de atributo, se o atributo é a própria chave. Como um elemento separado. Essencial se a chave é composta de mais de um atributo.

72 Exemplo CREATE TABLE Vende ( bar CHAR(20), cerveja VARCHAR(20),
preço REAL, PRIMARY KEY(bar, cerveja) );

73 Exemplo é diferente de: CREATE TABLE Vende( bar CHAR(20),
cerveja VARCHAR(20), preço REAL, UNIQUE(bar, cerveja) ); é diferente de: CREATE TABLE Vende ( bar CHAR(20) UNIQUE, cerveja VARCHAR(20) UNIQUE, preço REAL

74 Outras Propriedades de Atributos
NOT NULL. Valor DEFAULT. Exemplo CREATE TABLE Boêmio ( nome CHAR(30) PRIMARY KEY, end CHAR(50) DEFAULT ‘Rua do Bar', telefone CHAR(16) );

75 Resulta na seguinte tupla:
INSERT INTO Boêmio(nome, end) VALUES('Salete', 'Av. Sete, 2001') Resulta na seguinte tupla: nome end telefone Salete Av. Sete, NULL Primary key é por default not NULL. Esta inserção é legal. Mas se tivéssemos declarado telefone CHAR(16) NOT NULL então a inserção não podia ser feita.

76 Defaults Interessantes
DEFAULT CURRENT_TIMESTAMP SEQUENCE CREATE SEQUENCE seq_cliente; CREATE TABLE Cliente( clienteID INTEGER DEFAULT nextval(‘seq_cliente'), nome VARCHAR(30) );

77 Mudando Colunas Exemplo Adicione um atributo da relação R com
ALTER TABLE R ADD <declaração_coluna>; Exemplo ALTER TABLE Bar ADD telefone CHAR(16) DEFAULT ‘fora da lista'; Colunas podem também ser removidas. ALTER TABLE Bar DROP alvara;

78 Visões Uma expressão que descreve uma tabela sem criá-la.
A forma de definição de uma visão é: CREATE VIEW <nome> AS <consulta>;

79 Exemplo Consultando Visões Exemplo
A visão PodeBeber é o conjunto de pares boêmio-cerveja tais que o boêmio freqüenta ao menos um bar que serve a cerveja. CREATE VIEW PodeBeber AS SELECT boêmio, cerveja FROM Frequenta, Vende WHERE Frequenta.bar = Vende.bar; Consultando Visões Trata a visão como uma relação materializada. Exemplo SELECT cerveja FROM PedeBeber WHERE boêmio = ‘Salete;

80 Semântica de Uso de Visões
Exemplo

81 Composição

82 Otimização da Consulta
Empurra as seleções para baixo na árvore. Elimina as projeções desnecessárias.


Carregar ppt "VII- Álgebra Relacional"

Apresentações semelhantes


Anúncios Google