UNIVERSIDADE FEDERAL DE SANTA CATARINA CENTRO TECNOLÓGICO DEPARTAMENTO DE INFORMÁTICA E ESTATÍSTICA Curso de Bacharelado em Ciências da Computação Autor: Ederson Luiz Paes Responsável: Fábio Teixeira de Campos Orientador: Fábio Teixeira de Campos PROPOSTA DE TRABALHO DE CONCLUSÃO DE CURSO FERRAMENTA DIDÁTICA PARA O ENSINO DE ÁLGEBRA RELACIONAL Trabalho apresentado à disciplina Introdução ao Projeto em Ciências da Computação, como requisito de avaliação orientado pelo professor Renato Cislaghi Florianópolis 20042 Sumário 1. Objetivos ........................................................................................................ 3 1.1. Objetivos gerais ........................................................................................ 3 1.2. Delimitação do tema ................................................................................. 3 1.3. Motivação ................................................................................................. 4 2.1. Conceitos ................................................................................................. 5 2.1.1. Álgebra Relacional ............................................................................. 5 2.1.1.1. Operação Seleção ...................................................................... 6 2.1.1.2. Operação Projeção..................................................................... 6 2.1.1.3. Operação União ......................................................................... 6 2.1.1.4. Operação Diferença entre Conjuntos ......................................... 7 2.1.1.5. Operação Produto Cartesiano .................................................... 7 2.1.1.6. Operação Renomeação ............................................................. 7 2.1.1.7. Operação de Interseção de Conjuntos ....................................... 8 2.1.1.8. Operação Junção ......................................................................... 8 2.1.1.9. Operação Junção Natural ............................................................. 8 2.1.1.10. Operação Divisão ....................................................................... 9 2.1.2. Visões................................................................................................. 9 2.1.3. Linguagens Formais e Compiladores ............................................. 10 2.1.3.1. Analisador Léxico ..................................................................... 10 2.1.3.2. Analisador Sintático .................................................................. 11 2.1.3.3. Analisador Semântico ............................................................... 11 2.2. Requisitos Funcionais ....................................................................... 12 2.3. Cronograma de Atividades ................................................................ 12 3. Referência Bibliográfica ............................................................................. 14 2 1. Objetivos 1.1. Objetivos gerais O objetivo do projeto é desenvolver um sistema que possibilite a execução de operações de álgebra relacional em um banco de dados para servir de apoio ao aprendizado nas aulas de bancos de dados. 1.2. Delimitação do tema Serão implantadas as seguintes operações: 1. Operações básicas de bancos de dados Criação das relações; Inclusão de tuplas; Exclusão de tuplas; Alteração de valores de atributos e das relações; Renomeação; Visões. 2. Operações de álgebra relacional Projeção; Seleção; União; Diferença; 3 Produto Cartesiano; Interseção; Junção; Junção Natural; Divisão. 1.3. Motivação A realização do projeto tem uma motivação pessoal e científica. A pessoal é o interesse pelo aprofundamento de conhecimentos teóricos e práticos na área de bancos de dados, bem como a fixação de conhecimentos de linguagens formais e compiladores, que serão necessários para a elaboração do sistema para realização das operações de álgebra relacional. A científica é a demonstração da importância do estudo de álgebra relacional para o aprendizado de otimização de consultas, fragmentação e de linguagens de realização de consultas em bancos de dados. 4 2. Plano de Trabalho 2.1. Conceitos A seguir estão descritos de forma resumida conceitos relacionados a bancos de dados e linguagens formais que servirão de base para a realização do projeto. 2.1.1. Álgebra Relacional A álgebra relacional é uma linguagem de consultas procedural. Consiste em um conjunto de operações tendo como operando uma ou duas relações e produzindo, como resultado, uma nova relação. As operações fundamentais na álgebra relacional são seleção, projeção, união, diferença, produto cartesiano. Além dessas operações fundamentais existem algumas outras operações – renomeação, interseção, junção natural, divisão, e atribuição, que são definidas em termos das operações fundamentais. As operações seleção, projeção e renomeação são chamadas de operações unárias, pois operam uma única relação. As outras três operações fundamentais operam um par de relações e são portanto chamadas de operações binárias. 5 2.1.1.1. Operação Seleção A operação seleção retorna um subconjunto de tuplas que satisfaçam um determinado predicado, usando a letra grega sigma () para denotar seleção. O predicado aparece subscrito a . O argumento da relação é dado entre parênteses, seguindo o predicado. 2.1.1.2. Operação Projeção A operação projeção é usada para obter determinados atributos de uma relação. A operação é executada em apenas uma relação e o resultado é uma nova relação contendo apenas os atributos especificados, eliminando-se as eventuais duplicidades entre as tuplas. É denotada pela letra grega pi () e são listados, subscritos em , os atributos exibidos no resultado. O argumento da relação vem a seguir entre parênteses. 2.1.1.3. Operação União A operação de união cria uma relação partindo de outras duas, levando as tuplas comuns e não-comuns a ambas. Desta forma aparecerão no resultado somente linhas únicas de uma ou outra relação e as informações duplicadas aparecerão somente uma vez. A operação somente é possível caso as relações de origem possuam compatibilidade de união, ou seja, possuam o o mesmo grau e atributos correspondentes definidos num domínio comum. Simbologia: 6 Sintaxe: (Relação 1) (Relação 2) 2.1.1.4. Operação Diferença entre Conjuntos A operação diferença entre conjuntos, denotada por -, permite encontrar as tuplas que estão no primeiro operando, mas não no outro. A operação de diferença não é comutativa. Por exemplo, a operação r-s produz resultado diferente da operação s-r. 2.1.1.5. Operação Produto Cartesiano A operação produto cartesiano permite combinar informações de duas relações quaisquer. No resultado para cada tupla da primeira relação haverá a combinação com todas as tuplas da segunda relação ou vice-versa. Simbologia: x Sintaxe: (Relação 1) x (Relação 2) 2.1.1.6. Operação Renomeação A operação rename, representada pela letra minúscula grega rho (), permite nominar uma relação com outro nome, permitindo desta forma o uso desta como primeiro e segundo operando de uma operação binária. 7 2.1.1.7. Operação de Interseção de Conjuntos A relação criada pela operação interseção será o resultado de todas as tuplas que pertençam a ambas as relações presentes na operação. A operação de interseção usa o símbolo entre os nomes das relações envolvidas. Ela é comutativa, isto é, r s é equivalente a s r. Porém, não é uma operação fundamental e não imprime maior poder à álgebra relacional. Simplesmente é mais conveniente escrever r s que r – (r – s). 2.1.1.8. Operação Junção A operação de junção é utilizada para combinar tuplas de duas relações partindo dos atributos comuns a ambas. O resultado conterá os atributos das duas relações que estão participando da junção. A operação é de extrema importância em bancos de dados relacionais, pois é através dela que é permitida a realização de relacionamentos. Simbologia: |x| Sintaxe: (Relação 1) |x| <condição de junção> (Relação 2) 2.1.1.9. Operação Junção Natural A operação junção natural é uma operação binária que permite combinar as operações de seleção e produto cartesiano dentro de uma única operação. Isto é representado pelo símbolo de “join” 8 A operação de junção natural gera como resultado uma relação composta por todos os atributos da primeira relação mais os atributos da segunda relação, exceto aqueles usados na cláusula de junção. 2.1.1.10. Operação Divisão A operação de divisão, simbolizada por , é usada nas consultas nas quais se exige que todos os elementos do divisor estejam presentes no dividendo. Produz como resultado a projeção de todos os atributos da primeira relação exceto aqueles presentes no divisor. Não é um operador primitivo, mas pode ter o resultado obtido por uma combinação de operadores primitivos. 2.1.2. Visões Não é desejável que todos os usuários vejam o modelo lógico como um todo de um banco de dados. Considerações sobre segurança podem exigir que determinados dados não estejam disponíveis para alguns usuários. Com base nessas questões pode-se desejar criar uma coleção de relações personalizadas que se ajustam mais às necessidades do usuário do que ao modelo lógico. Qualquer relação que não faça parte do modelo lógico mas é visível para o usuário como uma relação virtual é chamada de visão. Uma visão é definida usando o comando create view, seguido do nome da visão e a expressão de consulta em álgebra relacional que define a visão. 9 2.1.3. Linguagens Formais e Compiladores O processo de compilação de um programa passa por duas partes: a análise e a síntese. A parte da análise divide o programa-fonte nas partes constituintes e cria uma representação intermediária do mesmo. A de síntese constrói o programa-alvo desejado, a partir da representação intermediária. Das duas, a síntese requer as técnicas mais especializadas. A análise do programa-fonte é dividida em três fases: Análise léxica; Análise sintática; Análise semântica. 2.1.3.1. Analisador Léxico Faz a interface entre o programa-fonte e o compilador. Suas funções básicas são: Ler o programa-fonte; Agrupar caracteres em itens léxicos (tokens), que são identificadores, palavras reservadas da linguagem, constantes numéricas e literais e símbolos especiais; Ignorar elementos sem valor sintático, como espaços em branco, comentários e caracteres de controle; Detectar e diagnosticar erros léxicos, como símbolos inválidos, elementos mal formados, tamanho inválido de constantes, literais e identificadores. 10 2.1.3.2. Analisador Sintático Suas funções básicas são: Agrupar tokens em estruturas sintáticas (expressões, comandos, declarações, etc.); Verificar se a sintaxe da linguagem na qual o programa foi escrito está sendo respeitada; Detectar/Diagnosticar erros sintáticos. 2.1.3.3. Analisador Semântico Suas funções básicas são: Verificar se as construções utilizadas no programa-fonte estão semanticamente corretas; Detectar e diagnosticar erros semânticos; Extrair informações do programa-fonte que permitam a geração de código; Entre as verificações semânticas usuais no programa-fonte estão: Análise de escopo; Variáveis não declaradas; Múltiplas declarações de uma mesma variável; Compatibilidade de tipos; 11 Coerência entre declaração e uso de identificadores; Correlação entre parâmetros formais e atuais; Referências não resolvidas; Procedimentos e desvios. 2.2. Requisitos Funcionais O sistema contará com um prompt onde o usuário entrará com todos os comandos possíveis de serem reconhecidos, tais como criação das relações, inclusão, alteração e exclusão de tuplas e as operações em álgebra relacional descritas no item 1.2. Após a execução dos comandos o sistema apresentará um grid com os resultados obtidos quando forem executadas operações de álgebra relacional que retornarem tuplas ou uma mensagem indicando sucesso ou erro na execução. Ao executarem operações de álgebra relacional o usuário pode ver a conversão do seu comando em SQL (Structured Query Language). 2.3. Cronograma de Atividades A elaboração do sistema consiste das seguintes etapas: Pesquisa detalhada sobre as operações de álgebra relacional e SQL; Criação de uma gramática que gere as operações de álgebra relacional; 12 Construção de um analisador léxico para identificar e validar os itens léxicos lidos nos comandos executados no sistema; Construção de um analisador sintático para validar os comandos executados pelo usuário; Construção de um analisador semântico para verificar a compatibilidade entre os tipos de dados dos atributos das relações envolvidas nos comandos executados pelo usuário; Construção de um tradutor para converter os comandos de álgebra relacional para SQL, para serem executados pelo sistema e opcionalmente serem exibidos ao usuário; Definição de um sistema gerenciador de bancos de dados para ser usado no sistema para a execução dos comandos entrados pelo usuário. Deve ser escolhido preferencialmente um software livre; Desenvolvimento do sistema; Realização de uma bateria de testes para comprovar a eficiência dos analisadores léxico, sintático e semântico implementados, bem como o tradutor álgebraSQL. 13 3. Referência Bibliográfica 1. Silberschatz, Abraham; Kort, Henry F. e Sudarshan, S. Sistema de Banco de Dados. Makron Books, São Paulo, 1999. p. 69-100. 2. Aho, Alfred V.; Sethi, Ravi e Ullman, Jeffrey D. Compiladores, Princípios, Técnicas e Ferramentas. LTC, Rio de Janeiro. Original: inglês.. p. 1-4. 3. Furtado, Olinto José Varela. Transparências das aulas de Linguagens Formais e Compiladores. Departamento de Informática e Estatística, Curso de Bacharelado em Ciências da Computação, UFSC. Cap. 1. 4. Rezende, Ricardo. Álgebra Relacional – Parte I. Linguagem de Consulta Formal. SQL Magazine. Disponível em: < http://www.sqlmagazine.com.br/Colunistas/RicardoRezende/04_AlgebraRel acional_P1.asp> Acesso em 24 nov. 2004. 5. Rezende, Ricardo. Álgebra Relacional – Parte II. Linguagem de Consulta Formal. SQL Magazine. Disponível em: < http://www.sqlmagazine.com.br/Colunistas/RicardoRezende/04_AlgebraRel acional_P2.asp> Acesso em 24 nov. 2004. 14