universidade federal de santa catarina

Propaganda
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 álgebraSQL.
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
Download