Linguagens relacionais Notações para expressar perguntas: algébrica – aplicação de operadores a relações lógica (cálculo relacional) – fórmula que os tuplos da resposta devem satisfazer • equivalentes em poder expressivo. Limitações: independência física dos dados • linguagem só com construções relativas ao modelo de dados (operações sobre relações) que não dependam da implementação • não se pode aceitar programas genéricos optimização das perguntas • restrição no poder expressivo: sem recursão (incapaz de computar o fecho transitivo) relações finitas • complementação proibida Modelo relacional - 1 Operações Básicas RS 1 - Reunião é o conjunto dos tuplos que estão em R, em S, ou em ambas • R e S da mesma aridade • nomes dos atributos a especificar 2 - Diferença R – S tuplos de R que não estão em S • R e S da mesma aridade S R RS A B C R-S A B C D E F a b c A B C a b c b g a d a f a b c d a f d a f c b d c b d c b d b g a Modelo relacional - 2 Operações Básicas 3 - Produto cartesiano RS aridades de R e S são k1 e k2 aridade de RS é k1 + k2 • contém todos os tuplos tais que os primeiros k1 componentes formam um tuplo de R e os restantes k2 componentes formam um tuplo em S S R A B C D E F a b c b g a d a f d a f c b d RS A B a b a b d a d a c b c b C c c f f d d D b d b d b d E g a g a g a F a f a f a f Modelo relacional - 3 Operações Básicas 4 - Projecção i1, i2, ..., im(R) para cada tuplo em R existe um tuplo na projecção com os componentes (e pela ordem) indicados pelos ij • se aridade de R for k então os ij 1, ..., k e são distintos; aridade da projecção é m • números de componentes podem ser substituídos por atributos, se existirem: 1,3 (R) = A,C (R) 1,3 (R) R A B C A C a b c a c d a f d f c b d c d Projecção escolhe colunas da tabela Modelo relacional - 4 Operações Básicas 5 - Selecção F (R) contém os tuplos de R que satisfazem F • a fórmula F pode envolver operandos constantes ou número de componente ( $i ) operadores aritméticos de comparação ( , , , , , ) operadores lógicos ( , , ) ( e, ou, não ) • Números de componentes podem ser substituídos por atributos, se existirem: $2=b(R) = B=b(R) R A B C a b c d a f c b d $2=b(R) A B C a b c c b d Selecção escolhe linhas da tabela Modelo relacional - 5 Operações Compostas 6 - Intersecção R S contém os tuplos que pertencem a R e a S simultaneamente • R e S da mesma aridade R S = R - (R-S) RS S R A B C D E F A B C a b c b g a d a f d a f d a f c b d Modelo relacional - 6 Quociente 7 - Quociente R / S • aridade de R é r e de S é s, rs, S R A a a b e e a B b b c d d b 7 1 contém os (r-s)-tuplos (a1, ..., ar-s) tais que, para todos os stuplos (ar-s+1, ..., ar) em S, o tuplo (a1, ..., ar) está em R S R/S C D A B E F / c d = a b c d e f e f e d e f R/S S (R/S) S c d A B E F A B E e f a b d e c d = a b c e d e f a b e 3 e d c 23+1=7 e d e 2 F d f d f Modelo relacional - 7 Explicação alternativa Forma de proceder à divisão reordenar as colunas de forma a que as últimas correspondam ao quociente ordenar a tabela pelas primeiras colunas cada subtuplo das primeiras colunas pertence ao resultado se o conjunto de subtuplos das últimas colunas que lhe corresponde contiver o quociente R S R/S A B C D A B E F / c d = a b a b c d e f e f e d d e b c e f e d c d e f Modelo relacional - 8 Expressão do quociente T = 1, ..., r-s (R) W = (TS) - R = universo dos tuplos possíveis no resultado = todas as linhas T combinadas com S mas que não estão em R, i.e., em que a condição falha V = 1, ..., r-s (W) R/S=T-V = tuplos que não interessam = tuplos que interessam • reunindo numa só expressão algébrica R A a a b e e a B b b c d d b C c e e c e d R / S= 1, ..., r-s (R) - 1, ..., r-s 1, ..., r-s (R) S - R W S T TS D A B E F A B E F A B E F d a b c d a b c d b c c d f b c e f a b e f V R/S f e d b c c d A B d b c e f A B a b f e d c d b c e d e e d e f Modelo relacional - 9 Quais as frases verdadeiras? ( R-S ) S = R ( R-S ) S R ( R-S ) ( RS ) = R ( R-S ) ( S-R ) = ( RS ) - ( RS ) ( R/S ) S = R ( R/S ) S R a– b– c– d– e– f– Respostas • Erradas - a e e • Correctas - b, c, d e f Modelo relacional - 10 Junção 8 - -Junção R ⋈ S ij • se a aridade de R for r e a de S, s a aridade da -junção é r+s contém os tuplos do produto cartesiano de R por S tais que o componente i está na relação com o componente r+j (i.e., o correspondente ao j em S). Expressão da -junção R ⋈ S= $i $(r+j) (R S) ij • se for =, a operação designa-se equijunção • ( 7, 8, 9 ) é um tuplo pendente de R pois não aparece na -junção R A 1 4 7 B 2 5 8 C 3 6 9 S D E 3 1 6 2 R⋈S =R⋈S A 1 1 4 2<1 B 2 2 5 C 3 3 6 B<D D 3 6 6 E 1 2 2 Modelo relacional - 11 Junção natural 9 - Junção natural R ⋈ S • só é aplicável se os componentes dos tuplos em R e S forem designados por atributos. • a operação implícita na junção natural é a igualdade dos atributos com o mesmo nome. • cada par de atributos iguais dá origem a um único atributo, com o mesmo nome, no resultado expressão: R⋈S = i1, ..., im ( R.A1= S.A1.....R.Ak= S.Ak ( R S )) • k é o número de atributos comuns a R (aridade r) e S (aridade s) e m= r+s-k tuplo pendente R A a d b c B b b b a C c c f d S B b b a C c c d R⋈S A a D a d d e d b c B b b b b a C c c c c d D d e d e b Modelo relacional - 12 Junção externa tuplos pendentes, isto é desemparelhados, quer em R quer em S, desaparecem na -junção e na junção natural a junção externa (- ou natural) inclui os tuplos pendentes de R ou S completados a nulos • ( 7, 8, 9 ) é um tuplo pendente de R pois não aparece na -junção • ( b, b, f ) idem, na junção natural + R⋈S B<D A 1 1 4 7 B 2 2 5 8 C 3 3 6 9 D 3 6 6 E 1 2 2 + S R⋈ A B C a b c a b c d b c d b c c a d b b f D d e d e b Modelo relacional - 13 Semi-junção 10 - Semi-junção R⋉S projecção nos atributos de R da junção natural de R e S R⋉S = R( R⋈S ) • R em R representa os atributos de R (o seu esquema); em R⋈S R representa a relação (a instância) outra expressão: R⋉S = R⋈RS(S) dá os tuplos de R que têm par em S R A a d b c B b b b a C c c f d S B b b a C c c d D d e b R⋉S A B a b d b c a C c c d Modelo relacional - 14 Relações com atributos na junção natural e na semi-junção os atributos são importantes; para os tornar explícitos escreve-se R(A1, ..., An) é possível renomear colunas e fazer junções naturais como: S = S(B,C,D) B b b a C c c d D d e b S( E,F,G ) ⋈ S( G,H,I ) E F G H I a d b c d a d b c e uma junção natural entre duas relações sem atributos comuns redunda num produto cartesiano porque, após este, não há nenhuma selecção a fazer (equivalente a fazer uma selecção com a condição True) R( A,B,C ) ⋈ S( G,H,I ) = R S Modelo relacional - 15 Leis algébricas Reunião Produto cartesiano R(ST)=(RS)T RS=SR associativa: comutativa: associativo: não comutativo: R(ST)=(RS)T RSSR Junção natural associativa e comutativa (independência da ordem das colunas devida aos atributos): R ⋈ S = S ⋈ R Por isso ⋈ generaliza facilmente: R = R1 ⋈ ... ⋈ Rn • R contém os tuplos tais que, para 1 i n, restringido aos atributos de Ri é um tuplo de Ri - junção não é comutativa mas é associativa (no caso de os índices serem válidos) R⋈(S⋈T)=(R⋈S)⋈T i 1 j k 2 l i 1 j (r+k) 2 l Modelo relacional - 16 Linguagem de Interrogação Álgebra Relacional pode ser usada como linguagem de interrogação à BD P1 - Relativamente à BD “Cursos” (ver p.17), quais os nomes dos professores do 12º grupo? Πnome grupo = ‘12’ ( Professor ) P2 - Quais os nomes e datas de nascimento dos alunos do curso ‘CG1’ nascidos antes de 1983? Πnome, data_nasc codcurso = ‘CG1’ data_nasc < 1983-01-01 ( Aluno ) Modelo relacional - 17 Perguntas com junção P3 - Nomes dos alunos inscritos à disciplina 327? nenhuma relação contém nomes de alunos e códigos de disciplina mas a junção Aluno ⋈ Inscrito = R contém: R (bia, nome, morada, telefone, data_nasc, codcurso, ano, letra, coddis, resultado) ( i ) - Πnome coddis = 327 ( Aluno ⋈ Inscrito ) ( ii ) - Πnome Aluno ⋈ coddis = 327 ( Inscrito ) esta maneira de ligar informações no modelo de dados dá muita liberdade para exprimir perguntas arbitrárias mas exige uma fase de optimização para executar ( ii ) mesmo que a pergunta seja ( i ) Núcleo da álgebra relacional : Π, , ⋈ Modelo relacional - 18 Extensões à Álgebra renomeação de atributos R ( A, B, C ) R’( X,Y, Z ) = ΠX = A, Y = B, Z = C R( A, B, C ) • onde não houver ambiguidades, a simples menção dos atributos, em conjunto com o nome da relação, faz a renomeação OU – R’ ( X, Y, Z ) = R ( A, B, C ) OU – R’ = ΠX = A, Y = B, Z = C ( R ) • expressões aritméticas ( +, -, *, / ) este mecanismo serve para dar nomes a expressões S = ΠW = A * B – C, U = C/B,A ( R ) OU S ( W, U, A )= ΠA * B – C, C/B, A ( R ) Modelo relacional - 19 Expressões aritméticas P4 - Obtenha uma relação de inscrições com as classificações inflaccionadas de 20%. Πcoddis, bia, resultado, Πcoddis, bia, resultado, novo = resultado*1.2 ( Inscrito ) novo = resultado + (20-resultado)/10 ( Inscrito ) nos parâmetros da projecção: • no membro direito só podem ser usados nomes de atributos do argumento de Π; no esquerdo só pode estar um atributo (novo...) Modelo relacional - 20 Agregações Operadores de agregação S = ΠV = CNT (B) ( R ) CNT (contagem), SUM (adição), AVG (média), MAX (máximo), MIN (mínimo) S( V ) tem um único valor, o número de tuplos de R com valor não nulo no atributo B ( CNT (*) conta todas as linhas ) toda a relação agregada T = ΠA, M = MAX (B) ( R ) T ( A, M ) tem tantos pares quantos os valores diferentes de A, sendo indicado para cada A o respectivo valor máximo de B (não nulo ... ); é feita uma partição segundo os atributos de projecção sem operadores de agregação e cada classe é agregada num só tuplo; é possível misturar agregações e aritmética Modelo relacional - 21 Perguntas com agregação P5 - Qual o número de inscrições, nota média das inscrições, soma de todas as notas e número de resultados não nulos ? R( NI, M, T, NR ) = ΠCNT(*), AVG( resultado), SUM( resultado ), CNT( resultado) ( Inscrito ) pode ser M T/NI se houver inscrições ainda sem resultado (valor nulo); tem que ser M = T/ NR Inscrito coddis PA PA ITI ITI H H bia resultado 97 14 38 12 97 17 25 14 97 10 25 R NI M T NR 6 13.4 67 5 Modelo relacional - 22 Agregação com partição P6 - Quais as notas mínima, média e máxima de cada disciplina (independentemente do aluno)? R = Πcoddis, MI = MIN( resultado ), ME = AVG(resultado ), MA = MAX(resultado) (Inscrito) Inscrito coddis PA PA ITI ITI H H bia resultado 97 14 38 12 97 17 25 14 97 10 25 R coddis PA ITI H MI ME MA 12 13 14 14 15.5 17 10 10 10 Modelo relacional - 23 Quantificação existencial P7 - Obtenha os códigos dos alunos com inscrição a pelo menos uma das disciplinas do curso LEEC. ΠBIA (INSCRITO ⋈ CODCURSO= ‘LEEC’ ( PLANO )) Modelo relacional - 24 Quantificação universal P8 - Obtenha o código dos alunos com inscrição a todas as disciplinas do curso LEEC. A = ΠBIA ( ALUNO ) • conjunto dos alunos D = ΠCODDIS CODCURSO= ‘LEEC’ (PLANO) • conjunto das disciplinas do curso LEEC AD • conjunto de todos os pares (aluno, disciplina da LEEC) NI = AD – ΠBIA, CODDIS ( INSCRITO ) • pares (aluno, disciplina da LEEC) tais que o aluno não tem inscrição à disciplina R = A – ΠBIA ( NI ) • resultado (notar a dupla subtracção) R = ΠBIA, CODDIS( INSCRITO ) / D Modelo relacional - 25