UNIVERSIDADE FEDERAL DE SANTA CATARINA CENTRO TECNOLÓGICO CURSO DE SISTEMAS DE INFORMAÇÃO PROJETO DE PESQUISA 1 TÍTULO Uma ferramenta de apoio à normalização de tabelas relacionais através da análise das dependências funcionais. 2 PROPONENTE E BANCA Aluno: Michel Leite de Ávila Orientador: Prof. Ronaldo dos Santos Mello, Dr. Banca: Prof. José Leomar Todesco, Dr. Banca: Prof. Renato Fileto 3 JUSTIFICATIVA A normalização de tabelas relacionais não é uma tarefa trivial. Ela pode ser aplicada sobre volumes consideráveis de dados e exige conhecimento a respeito da semântica dos dados. Por natureza, é uma atividade predominantemente manual e demorada, dependendo do domínio dos dados. Os esforços para automatizar este processo limitam-se a ferramentas de extração, transformação e carga de dados, como o DTS do Microsoft SQL Server [DTS 2007]. Há alguns trabalhos que discorrem sobre a análise de dependências funcionais, mas nada voltado a auxiliar a normalização [DKE 2002, Normit 2002, Reverse 1995]. Partes deste processo, no entanto, poderiam ser automatizadas, diminuindo a intervenção humana e erros durante o processo. A análise dos diferentes valores de um dado atributo em função de outro é um exemplo, onde o resultado dispara outras ações em cascata, como a migração do atributo para uma nova tabela que mantém os dados melhor organizados. 3.1 FUNDAMENTAÇÃO TEÓRICA 3.1.1 DEPENDÊNCIA FUNCIONAL Compreender as relações entre os atributos de uma tabela relacional é fundamental para o processo de normalização. Diz-se que um atributo A determina um atributo B, ou que B depende funcionalmente de A, quando, dado um valor para A, o valor de B é sempre o mesmo para todos os registros da tabela [SBD 2006]. Esta Dependência Funcional (DF) implica redundância, haja vista a repetição do mesmo valor de B em cada linha para um dado valor de A. Como conseqüência, a atualização dos atributos funcionalmente dependentes se torna suscetível a erros e, em caso de grandes volumes de dados, muito lenta. Quando um atributo for determinado por todos os atributos que compõem a chave primaria, diz-se que a dependência funcional é total, caso contrário, é dita parcial. É necessário detectar essas dependências parciais e tratá-las para evitar as anomalias supracitadas, ou seja, deve-se decompor a tabela que contém estes dados em outras tabelas que não possuam mais redundância. A dependência entre atributos não-chave e as dependências multivaloradas. No segundo caso, tem-se um atributo determinando sempre um conjunto fixo de valores (múltiplos valores) de um ou mais atributos. Todas elas também geram redundâncias em uma tabela e requerem que esta tabela seja decomposta. 3.1.2 O PROCESSO DE NORMALIZAÇÃO A normalização é composta por algumas regras, chamadas formas normais, cujo objetivo principal é diminuir a redundância nos dados armazenados em tabelas, resultando na diminuição do espaço e dos riscos de inconsistências em atualizações de dados [SBD 2006]. Quando um atributo é alterado em uma tabela não-normalizada, é necessário alterálo em todas as linhas em que ocorre, haja vista a sua repetição. Tal operação poderia ser executada apenas uma vez, caso este atributo pudesse ser normalizado. As principais formas normais são as seguintes, conforme mostra a Figura 1: 1FN ( 1ª Forma Normal ) 2FN ( 2ª Forma Normal ) 3FN ( 3ª Forma Normal ) FNBC ( Forma Normal de Boyce e Codd) 4FN ( 4ª Forma Normal ) 5FN ( 5ª Forma Normal ) Figura 1 – Formas Normais e suas interdependências. As formas normais mantêm uma relação entre si de tal sorte que a 2FN implica 1FN e assim sucessivamente. As regras das três primeiras formas normais são as seguintes: 1ª Forma Normal (1FN) - Para que uma tabela obedeça à 1FN, não deve possuir atributos multivalorados, tão pouco tabelas aninhadas. O simples fato dos dados estarem dentro de uma tabela relacional com uma chave primária já garante a conformidade com a 1FN. Algumas técnicas são propostas para decompor uma estrutura aninhada em uma tabela na 1FN, como por exemplo, a geração de uma tabela para cada nível de aninhamento, ou a geração de uma tabela única para todos os dados; 2ª Forma Normal (2FN) - Uma tabela está na 2FN se, e somente se, estiver na 1FN e não houverem dependências funcionais parciais; 3ª Forma Normal (3FN) - Uma tabela está na 3FN se, e somente se, estiver na 2FN e todo atributo não-chave depende funcionalmente diretamente da chave primária, ou seja, não há dependências entre atributos não chave. As demais formas normais estão fora do escopo deste trabalho, porque exigem análises mais complexas de dependências funcionais, cujo tempo de processamento pode não justificar o benefício, em tabelas com muitos registros. Além disso, a ocorrência destas formais normais é mais rara na prática. A Figura 2 apresenta um exemplo de atributo multivalorado na tabela original Member List, que não é permitido segundo a 1FN. Após a aplicação da 1FN, a tabela Member List é decomposta em duas novas tabelas: Member Table e Database Table. Todos os atributos originais de Member List são migrados para Member Table, exceto o atributo multivalorado Database, que, para entrar em conformidade com a 1FN, deve ter um registro para cada valor, motivo pelo qual é acomodado na tabela Database Table. Para que não se perca o relacionamento entre Name e Database, o atributo MID vai junto para Database Table, preservando uma propriedade fundamental da normalização: a capacidade de desnormalizar todas as tabelas gerando a tabela original novamente [SDB 2006]. Figura 2 – Exemplo de Aplicação da 1FN Figura 3 – Exemplo de Aplicação da 2FN A Figura 3 apresenta um exemplo de DF Parcial, provocada pelos atributos NOME e IDADE, que dependem funcionalmente do atributo ID_FUNC, que faz parte da chave primária da tabela, composta pelos atributos ID_PROJ e ID_FUNC. Para obedecer à 2FN, os atributos NOME e IDADE são migrados para a nova tabela FUNCIONÁRIOS, levando junto o atributo ID_FUNC, mantendo assim o relacionamento existente. Figura 4 – Exemplo de Aplicação da 3FN A Figura 4 apresenta um exemplo de DF provocada pelo atributo SAL, que depende funcionalmente do atributo CAT. Neste caso, como o atributo CAT não faz parte da chave, esta DF é denominada indireta, ou seja, ocorre apenas entre atributos não-chave. Para obedecer à 3FN, o atributo SAL é migrado para a nova tabela CATEGORIAS, levando junto o atributo CAT, mantendo assim o relacionamento existente. 4 OBJETIVO Este trabalho propõe uma ferramenta para auxiliar o processo de normalização de tabelas relacionais. A ferramenta recebe como entrada dados estruturados (dados com níveis de aninhamento) que estão armazenados em arquivos texto ou XML. Na seqüência, a ferramenta importa estes dados para uma tabela relacional na primeira forma normal (utilizando alguma técnica a ser definida) e efetua uma série de análises para determinar os relacionamentos entre os atributos. Em se tratando de dados reais, é muito comum a existência de valores nulos, inválidos, ou até corrompidos. Para que estes dados não atrapalhem a determinação das dependências, após a análise, as relações detectadas são classificadas em dependências funcionais verdadeiras – válidas para todos os registros – e dependências funcionais candidatas – válidas para a maioria dos registros, devido a ocorrência de nulos e valores incorretos. Por exemplo, em uma tabela contendo os atributos sigla e nome, seria detectada uma DF verdadeira, uma vez que cada nome é sempre representado pela mesma sigla. No entanto, suponha que alguns nomes foram escritos de forma equivocada. A ferramenta classificará, então, este relacionamento como sendo DF candidata e informará a freqüência em que ocorre, além de uma lista de casos onde o relacionamento não foi verificado. De posse destas informações, o usuário poderá perceber que o relacionamento entre nome e sigla não foi classificado em DF verdadeira por erros de ortografia. A intervenção do usuário é necessária para concordar com as DFs verdadeiras e avaliar as DFs candidatas. Após a etapa de verificação do usuário, as dependências são eliminadas através da migração dos atributos para novas tabelas, gerando um pequeno esquema de tabelas derivadas da original. Esta tarefa é muito comum no ambiente organizacional, onde os dados de sistemas são utilizados como entrada para projetos bottom-up de bancos de dados relacionais [Projeto 2004], sendo feita manualmente e demandando considerável conhecimento do domínio dos dados. Com a ferramenta proposta, os relacionamentos entre os dados são detectados, com certa tolerância a erros, e todas as operações de normalização são feitas semi-automaticamente, com pequenas intervenções do usuário. Para o ambiente acadêmico, a ferramenta contribui com a aplicabilidade dos conceitos relacionados com a normalização, que podem ser observados durante todo o processo e, em especial, nas tabelas geradas quando do término do processo. Desta forma, ela poderá ser utilizada em disciplinas da área de banco de dados como uma ferramenta de apoio ao aprendizado da teoria de normalização. 6 METODOLOGIA O desenvolvimento deste trabalho de conclusão de curso será realizado através das seguintes etapas: 1. Pesquisa Bibliográfica Nesta etapa serão feitas a busca e a leitura de referências bibliográficas, com foco na teoria de normalização de bancos de dados, bem como trabalhos relacionados à detecção de dependências entre dados. 2. Projeto da ferramenta Projeto dos módulos de importação de arquivos de entrada, transformação em tabelas relacionais, análise de dados, apresentação de resultados, interação com o usuário e, por fim, geração das tabelas normalizadas. 3. Implementação Implementação dos módulos descritos na etapa anterior. 4. Teste Arquivos de fontes de dados reais serão importados e normalizados a fim de validar a corretude e aplicabilidade da ferramenta. 5. Desenvolvimento de documento de conclusão Esta etapa é dedicada à redação do documento conclusivo do TCC. 7 CRONOGRAMA Etapas / Mês Pesquisa Projeto Implementação Testes Documento Jan Fev X Mar X Abr X X X Mai Jun Jul Ago Set Out Nov X X X X X X X X X X X X X X X Dez 8 REFERÊNCIAS BIBLIOGRÁFICAS [SBD 2006] Korth, H. F.; Sudarshan, S; Silberschatz, A. Sistema de Banco de Dados. 5a edição. Editora Campus, 2006. [DMS 2003] Ramakrishnan, R., Gehrke, J. Database Management Systems.3th ed. McGraw Hill. 2003. [SBD 2004] Date, C. J. Introdução a Sistemas de Bancos de Dados. 8a edição. Editora Campus, 2004. [Projeto 2004] Heuser, C.A. Projeto de Banco de Dados. 5a edição. Série Livros Didáticos – Instituto de Informática da UFRGS, número 4. Editora Sagra-Luzzatto, 2004. [DTS 2007] Data Tranformation Service. Disponível em <http://www.microsoft.com/brasil/sql/overview/recursos/dts.mspx>. Acesso em fevereiro de 2007. [Reverse 1995] S. Jarzabek, Tan Poh Keam, "Design of a generic reverse engineering assistant tool," wcre, p. 61, Second Working Conference on Reverse Engineering, 1995. [Normit 2002] Antonija Mitrovic, "NORMIT: A Web-Enabled Tutor for Database Normalization," icce, p. 1276, 2002 International Conference on Computers in Education (ICCE'02), 2002. [DKE 2002] F Berzal, JC Cubero, F Cuenca, JM Medina - Data & Knowledge Engineering, 2002.