Banco de Dados I 2007 Módulo III: Linguagens de Consulta (Aula 8) Clodis Boscarioli Agenda: Cálculo Relacional de Domínio (CRD) Definições Notações; Exemplos. Formais; Definição Formal Trata-se de uma segunda forma de cálculo relacional. Essa forma usa variáveis de domínio que tomam valores do domínio de um atributo, em vez de valores da tupla inteira. Uma expressão neste cálculo tem a forma: {<x1, x2, ... , xn > | P(x1, x2, ..., xn)} onde x1, x2, ... , xn representam variáveis de domínio e P representa uma fórmula composta de átomos, como no cálculo relacional de tupla. Definição Formal Um átomo no cálculo relacional de domínio tem uma das seguintes formas: < x1, x2, ... , xn > ∈ r, em que r é uma relação com n atributos e x1, x2, ... , xn são variáveis de domínio ou domínios constantes. x Θ y, em que x e y são variáveis de domínio e Θ é um operador de comparação (<, >, =, ≠, ≥, ≤). Exige-se que os atributos x e y tenham domínio que possam ser comparados por Θ. x Θ c, em que x é uma variável de domínio, Θ é um operador de comparação e c é uma constante no domínio do atributo para o qual x é uma variável de domínio. Definição Formal Os átomos são combinados nas fórmulas a partir das seguintes regras: Um átomo é uma fórmula. Se P1 é uma fórmula, então ¬P1 e (P1), também o são. Se P1 e P2 são fórmulas, então P1 ∨ P2, P1 ∧ P2, P1 ⇒ P2 também o são. Se P1(x) é uma fórmula em x, e x é uma variável de domínio, então: ∃ x (P1(x)) e ∀ x (P1(x)) CRD - Exemplos Korth Encontre os nomes de agência, números de empréstimos e totais para empréstimos maiores que 1200 dólares. {<b, l, a> | <b, l, a> ∈ empréstimo ∧ a > 1200} Encontre todos os números de empréstimos com valor total acima de 1200 dólares. {< l > | ∃ b, a (<b, l, a> ∈ empréstimo ∧ a > 1200)} CRD – Comentários O CRD está intimamente ligado ao CRT. Contudo, ∃ x para alguma variável tupla x em CRT está ligado a alguma relação (∃ x ∈ r). Já em CRD, a expressão ∃ x não se refere a uma tupla x, mas a um valor de domínio. Assim, o domínio de uma variável x é irrestrito até que uma subfórmula o restrinja para uma relação. No exemplo anterior, b é irrestrita até a subfórmula <b, l, a> ∈ empréstimo restringi-la aos nomes de agências que aparecem na relação empréstimo. CRD - Exemplos Korth Encontre os nomes de todos os clientes que tenham um empréstimo na agência de Perryridge e encontre os totais emprestados. {<c, a> | ∃ l ( <c, l> ∈ devedor ∧ ∃ b (<b, l, a> ∈ empréstimo ∧ b = “Perryridge”))} Encontre os nomes de todos os clientes que tenham um empréstimo, uma conta ou ambos na agência Perryridge. { <c> | ∃ l (<c,l> ∈ devedor ∧ ∃ b, a (<b, l, a> ∈ empréstimo ∧ b = “Perryridge”)) ∨ ∃ a (<c,a> ∈ depositante ∧ ∃ b, n (<b, a, n> ∈ conta ∧ b = “Perryridge”))} CRD - Exemplos Korth Encontre os nomes de todos os clientes que tenham uma conta em todas as agências localizadas do Brooklyn. { <c> | ∀ x, y, z ( <x, y, z> ∈ agência ∧ y = “Brooklyn” ⇒ ∃ a, b ( <x, a, b> ∈ conta ∧ <c, a> ∈ depositante)} Leitura: O conjunto de todas as tuplas c (nome_cliente) tal que, para todas as tuplas x, y, z (nome_agência, cidade_agência, fundos), se a agência é da cidade Brooklin, então o seguinte é verdadeiro: Existe uma tupla na relação conta com o número da conta a nome de agência x; Existe uma tupla na relação depositante com o cliente c e número de conta a. CDR - Notação Navathe Recupere o nome e o endereço de todos os empregados que trabalhem para o departamento “Pequisa”. { qrsv | (∃ z)(∃ l)(∃ m) (empregado(qrstuvwxyz) AND departamento(lmno) AND l = “Pesquisa” AND m = z) } CDR - Notação Navathe Recupere a data de nascimento e o endereço do empregado cujo nome seja ‘John B. Smith’. {uv | (∃ q) (∃ r) (∃ s) (∃ t) (∃ w) (∃ x) (∃ y) (∃ z) (empregado(qrstuvwxyz) AND q=‘John’ AND r=‘B’ AND s=‘Smith’)} CDR - Notação Navathe Encontre os nomes dos empregados que não tenham dependentes. {qrs | (∃ t) (empregado(qrstuvwxyz) AND (NOT(∃ l) (dependente(lmnop) AND t=l)))} CRD - Expressão de Segurança Para que uma expressão seja segura, ela tem que cumprir as regras abaixo: Todos os valores que aparecem nas tuplas da expressão são valores dentro do dom(P); 2. Para toda sub-fórmula da forma ∃ x (P1(x)), a subfórmula é verdadeira, se e somente se, existir um valor x em dom(P1) tal que P1(x) seja verdadeiro. 3. Para toda sub-fórmula da forma ∀ x (P1(x)), a subfórmula é verdadeira, se e somente se, P1(x) for verdadeiro para todos os valores de x dentro de dom(P1) 1. Referências Bibliográficas Sistemas de Banco de Dados. (Cap. 3) Abraham Silberchatz, Henry F. Korth e S. Sudarshan. 3ª Edição. Makron Books, 1999. Sistemas de Banco de Dados. (Cap. 6) Ramez Elsmari, 4ª Edição. Shamkant B. Navathe. Pearson Addison Wesley, 2005.