Baixe o app para aproveitar ainda mais
Prévia do material em texto
Banco de Dados Olinda Nogueira Paes Rizzo 2 SUMÁRIO BLOCO 1. INTRODUÇÃO À TECNOLOGIA DE BANCOS DE DADOS ................................................. 3 BLOCO 2. MODELAGEM CONCEITUAL DE DADOS ........................................................................ 12 BLOCO 3. MODELO RELACIONAL .................................................................................................. 30 BLOCO 4 LINGUAGEM SQL ............................................................................................................ 49 BLOCO 5. SISTEMA GERENCIADOR DE BANCO DE DADOS .......................................................... 68 BLOCO 6. SISTEMAS AVANÇADOS EM BANCOS DE DADOS ......................................................... 84 3 BLOCO 1. INTRODUÇÃO À TECNOLOGIA DE BANCOS DE DADOS Olá! Estamos dando início à disciplina de Bancos de Dados. Neste primeiro bloco, você será apresentado aos principais conceitos relacionados a essa tecnologia. Posteriormente, discutiremos a importância dos dados e dos sistemas de bancos de dados (BD) para as organizações nos dias atuais, o que justificará a relevância deste conteúdo para a área de Tecnologia da Informação. Também estudaremos o ambiente de um sistema de BD e faremos uma breve descrição das tarefas desempenhadas pelas pessoas envolvidas nele. Bons estudos! 1.1. Conceitos básicos em bancos de dados Desde que surgiu o conceito de banco de dados na ciência da computação, bem como toda a tecnologia que vem sendo desenvolvida associada a ele, essa área de dados tornou-se muito relevante para o crescimento do uso de computadores nas organizações, pois é uma das mais aplicadas dessa ciência. Por ser bastante aplicada, é uma área que fica em contato direto com os usuários finais dos sistemas e, portanto, é popular, diferentemente de outras áreas menos acessíveis da computação. Praticamente, todos os sistemas desenvolvidos para as mais diferentes aplicações utilizam algum tipo de banco de dados. Por ser popular, muitas vezes as pessoas empregam o termo “banco de dados” de maneira equivocada, pois ele é comumente utilizado para definir três diferentes conceitos relacionados a essa tecnologia. A seguir, esses conceitos serão apresentados com a intenção de esclarecer alguns pontos e evitar que sejam confundidos: 1. Banco de Dados (BD): este primeiro conceito é o mais simples de todos e representa um conjunto de dados relacionados e acessíveis. Dados são fatos do mundo real, que podem ser registrados e organizados. Considere, por exemplo, nomes, telefones e e-mails de pessoas que você conhece e que estão armazenados em sua agenda do celular. Esses dados estão relacionados entre si, afinal você só gravará dados de pessoas que conhece ou que de alguma forma lhe interessam ou possuem algum significado para você. Esses dados de pessoas estão armazenados em algum dispositivo de onde você pode acessar a qualquer momento que desejar. A agenda é um banco de dados. 2. Sistema Gerenciador de BD (SGBD ou Database Management System – DBMS): este segundo conceito representa um tipo de sistema composto por uma série de ferramentas criadas especificamente para gerenciar os bancos de dados, e que apresentam linguagens utilizadas para manter os bancos de dados. 4 3. Sistema de BD: já este terceiro conceito representa todo sistema desenvolvido com funções ou aplicações específicas, que utilizam bancos de dados e, por sua vez, foram desenvolvidos em algum SGBD. É sinônimo de sistema de informação. Segundo Elmasri e Navathe (2018), um banco de dados possui algumas propriedades implícitas: representa aspectos de uma parte do mundo real, chamada de Mini-Mundo (ou Universo de Discurso); é uma coleção lógica e coerente com algum significado inerente; e é projetado, construído e povoado por dados, atendendo a uma finalidade específica, para ser usado por pessoas específicas e por aplicações específicas. A Figura 1.1 representa o processo de modelagem do Mini-Mundo, que é algo irregular, num banco de dados que deve ser algo bastante estruturado. A tarefa de modelar um banco de dados a partir de uma parte do mundo real é apenas a primeira de muitas tarefas que compõem o processo de construção de um banco de dados. Figura 1.1: Ilustração da modelagem de dados entre o mundo real e o BD. Fonte: Elaborada pela autora. De forma bastante simplificada, o processo de criação de um BD poderia ser explicado da seguinte maneira: a partir da descrição detalhada dos requisitos de dados do sistema, feito pelo analista de sistemas, é construído o primeiro modelo conceitual de dados. Posteriormente, o projetista de dados faz a construção do projeto físico de dados, para somente depois o banco de dados ser de fato implementado pela equipe de programadores num SGBD. Todo esse processo será devidamente explicado ao longo da disciplina. 5 1.2. A importância dos bancos de dados nas organizações Os dados estão presentes na vida dos seres humanos desde que surgiu a linguagem e começamos a nos comunicar e registrar os fatos. Desde que começamos a nomear objetos e diferenciar as pessoas por seus nomes, começamos a atribuir diferentes dados ou diferentes valores a esses objetos e pessoas. Essa diferenciação feita aos objetos e pessoas do mundo precisa de alguma forma estar organizada para ser compreendida. Por muitos anos, a organização dos dados foi feita pelos seres humanos e registrada de forma manual. Inicialmente por desenhos nas paredes das cavernas, posteriormente em papel, até finalmente chegar ao registro automatizado dos dados nos computadores, como é feito hoje. Mas desde que surgiu algum tipo de registro e organização dos dados, e que estes estiveram ao acesso de outras pessoas, podemos dizer que surgiu um arquivo ou um banco de dados. O fato é que o imenso volume de dados com o qual atualmente as pessoas e as empresas precisam lidar é imensamente maior do que há alguns anos. Segundo Elmasri e Navathe (2018), os bancos de dados são um componente essencial na sociedade moderna, pois a maioria das pessoas encontra diariamente diversas atividades que envolvam alguma interação com algum banco de dados, por exemplo, quando vamos sacar dinheiro no caixa eletrônico, ou fazer uma compra no supermercado, ou até quando vamos fazer uma consulta online sobre um determinado assunto. Já nas organizações, de uma maneira geral, praticamente todos os processos passam por algum tipo de sistema de informação computacional, que por sua vez interage com um banco de dados. Segundo Medeiros (2013), os sistemas de informação estão na atualidade profundamente arraigados nas empresas. Como estamos na era da informação, portanto, não poderia ser diferente. É muito difícil nos dias atuais encontrarmos uma empresa que ainda contenha algum tipo de processo ou procedimento que possa ser realizado de maneira independente de um sistema computacional, mesmo porque há a necessidade de um controle de todas as ações dos funcionários e isso se dá através do monitoramento dos sistemas. Isso faz com que uma imensa quantidade de dados seja gerada instantaneamente e diariamente no mundo e esse movimento ininterrupto vai acumulando um volume gigantesco de dados. Além disso, todas as informações geradas nas últimas décadas das organizações ficaram armazenadas nos sistemas das empresas para fins de dados históricos, para construção de Data Warehouses, dentre outras aplicações. Isso ampliou ainda mais o enorme volume de dados armazenados. Diante desse cenário, podemos então perceber que atualmente temos uma quantidade de dados armazenados como nunca 6 houve na história da humanidade e muito provavelmente essa quantidade tende a continuar aumentando nos próximos anos. A tecnologia que apoia e mantém essa gigantesca quantidade de dadosé a tecnologia de bancos de dados, que evoluiu desde seu surgimento, mas que se manteve em sua estrutura inicial de forma a simplificar ao máximo o trabalho das pessoas envolvidas na área de gerenciar e manipular os dados. Diante desse cenário, onde percebemos nitidamente a importância que as informações (e consequentemente os dados) têm nas nossas vidas, faz-se necessário conceituar claramente o que é um banco de dados. Nas próximas seções, entenderemos os principais conceitos dessa tecnologia e quem são as pessoas diretamente envolvidas nessa área. 1.3. O ambiente de um sistema de BD Para melhor compreendermos os conceitos básicos associados à tecnologia de Banco de Dados (BD), vale observarmos a Figura 1.2, que representa de forma resumida o ambiente de um sistema de banco de dados. Figura 1.2: Diagrama simplificado de um ambiente de sistema de banco de dados. Fonte: Elmasri e Navathe (2018). 7 Interpretando a Figura 1.2, podemos observar que as pessoas (programadores e usuários) interagem com os sistemas de bancos de dados através de programas de aplicação. Esses programas de aplicação podem ser construídos pelos programadores em diferentes tipos de linguagem de programação, para serem usados pelos usuários em diferentes tipos de dispositivos, para diferentes ambientes da empresa. Por exemplo, pode acessar o mesmo sistema de banco de dados uma aplicação voltada para os funcionários que é acessada somente na intranet da empresa, outra aplicação voltada para os clientes pode ser acessada através da internet pelo site da empresa, dentre outras. Os programas de aplicação realizam consultas (do inglês, queries) no BD. Uma query executada no BD irá realizar alguma ação de manipulação nos dados, por exemplo: ler (recuperar) os dados que estão cadastrados no banco, ou alterar (inserir, remover ou modificar) os dados. Podemos também observar que há uma camada intermediária entre as aplicações e os BD propriamente ditos, que é o Sistema Gerenciador de BD (SGBD). O SGBD recebe as consultas feitas pelos usuários, enviadas pelas aplicações e as processa, repassando a programas específicos a função de buscar os dados desejados nos bancos de dados. De maneira simplificada, podemos separar os arquivos que armazenam os dados em dois grandes grupos: num primeiro estão os dados armazenados, ou os dados propriamente ditos, ou seja, os valores relativos aos fatos do mundo real que foram cadastrados; num segundo grupo ficam contidas as definições dos dados ou os metadados, que são informações sobre a estrutura do BD, tais como qual é o tipo de valor que aquele dado pode conter (numérico ou alfabético). Essa separação é feita porque a estrutura dos dados, uma vez definida na fase de projeto do BD, pouco irá mudar ao longo da utilização desse sistema de banco de dados, enquanto os dados armazenados são alterados constantemente no dia a dia das organizações. Por esse motivo, o SGBD gerencia e mantém esses dois grupos de arquivo de maneira diferente. O mais importante de fixar dessa imagem que representa o ambiente de um sistema de banco de dados é a importância que os SGBD têm para facilitar o desenvolvimento de aplicações que acessam os BDs, uma vez que fazem todo o processamento intermediário entre as consultas enviadas nas diversas linguagens de programação e os BDs armazenados. 1.4. Características básicas dos SGBD Antes de serem criados os primeiros SGBD, pelo menos até a metade da década de 1970, os sistemas computacionais existentes utilizavam, de forma muito restrita, as estruturas de arquivos disponíveis nos Sistemas Operacionais (SO) da época para gerenciar os seus dados. Essa era uma tarefa muito complexa e 8 restrita, pois se tinha que conhecer muito bem o sistema de gerenciamento de arquivos e de memória do SO, e para cada nova aplicação que surgisse, toda a lógica de manipulação dos dados tinha que ser refeita. Então, quando os primeiros SGBD foram implementados, eles tinham de cumprir o objetivo de solucionar os principais problemas enfrentados pelos programadores da época. Assim, segundo Elmasri e Navathe (2018), os SGBD foram criados contendo as seguintes principais características, que são mantidas até os dias atuais: - Natureza autodescritiva de um sistema de BD: visava solucionar o problema da dependência dos sistemas de BD desenvolvidos em linguagens de programação da época de outros sistemas, tais como o Sistema Operacional. Desejava-se um sistema que fosse independente dos demais e, portanto, ele precisava conter nele mesmo todas as informações necessárias para seu funcionamento. A tecnologia de BD para solucionar esse problema implementou o chamado catálogo do banco de dados, que armazena o esquema do banco e todas as informações necessárias para funcionamento do SGBD, sem dependência de outros tipos de programas. A informação armazenada no catálogo do BD é chamada de metadados (informações sobre os dados). Com todas as informações necessárias para seu funcionamento contidas no próprio SGBD, ressaltando a sua natureza autodescritiva, esse sistema tornou-se independente dos demais. - Isolamento entre programas e dados, e abstração de dados: antes dos SGBD, no processamento tradicional que utilizava os arquivos, a estrutura do arquivo, sua localização física e outros detalhes de armazenamento estavam embutidos nos programas de aplicação. Assim, qualquer mudança na estrutura dos dados refletia mudanças em todos os programas de aplicação. Essa era uma tarefa muito complexa e exigia muito esforço da equipe de desenvolvimento de software. Já os SGBD oferecem uma abstração dos dados, armazenando as estruturas (ou definição) dos dados no seu catálogo, enquanto os dados propriamente ditos ficam armazenados separadamente. Quando a estrutura dos dados muda, apenas uma parte do SGBD é acionada para ser modificada. Já todos os programas de aplicação que utilizam os bancos de dados não são alterados. Isso facilita muito o trabalho da equipe de desenvolvimento de software e cria um isolamento entre os programas e os dados propriamente ditos. - Conceito de abstração dos dados: um modelo de dados é usado para esconder detalhes de armazenamento, com uma visão conceitual do BD (ELMASRI e NAVATHE, 2018). - Suporte a múltiplas visões dos dados: um banco de dados típico tem muitos usuários e cada qual possui interesses diferentes, que podem solicitar diferentes perspectivas ou visões dos dados no BD. O SGBD é capaz de suportar diferentes visões dos dados, a depender do usuário, somente as que interessam. Isso é importante tanto para simplificar para o usuário quanto por motivos de segurança, uma vez que certos dados 9 não serão disponibilizados a usuários não autorizados. Uma visão (ou do inglês, view) pode ser um subconjunto dos dados do BD ou conter dados virtuais, temporários e derivados de arquivos físicos do BD, mas que não estão armazenados explicitamente. - Compartilhamento de dados e processamento de transação multiusuário: um SGBD multiusuário é aquele que permite o acesso ao BD, feito por diversos usuários diferentes, ao mesmo tempo (concorrentemente), ou seja, os usuários irão concorrer pelos recursos daquele BD. Para que esse compartilhamento de dados entre os usuários funcione sem problemas, o SGBD deverá realizar um controle dessa concorrência, enquanto realiza o processamento das várias transações que são enviadas ao mesmo tempo. Então, todo SGBD multiusuário possui um módulo de controle de concorrência para garantir que as transações sejam executadas da maneira correta e eficiente. 1.5. Pessoas envolvidas com BD Como já discutimos, os BDs estão em toda parte, sendo utilizados por praticamente todas as pessoas de alguma forma. Nesta seção, entretanto, estudaremos as pessoas que estão mais diretamente envolvidas com o processo de criação, manipulação e gerenciamento dosbancos de dados nas organizações. Para um pequeno BD individual, como no exemplo da agenda de contatos do seu celular, em geral apenas uma pessoa constrói e manipula os dados, não havendo o seu compartilhamento com outras pessoas. Porém nas organizações, onde centenas ou milhares de usuários irão acessar o BD, geralmente existe um grupo grande de pessoas envolvidas com essa tecnologia e que trabalham em seu dia a dia com os bancos de dados. Segundo Elmasri e Navathe (2018), as pessoas mais diretamente ligadas ao trabalho de projetar, criar, implementar, gerenciar e manipular os dados são apresentadas a seguir. Os usuários finais são pessoas cujas profissões requerem o acesso constante a um sistema de BD para consulta, atualização e emissão de relatórios. Esse acesso se dá através do uso de sistemas de aplicação, que são construídos sobre os SGBD, ou seja, os usuários finais não irão acessar os bancos de dados diretamente pelo SGBD, mas sim por sistemas construídos para eles. A aplicação e o BD existem prioritariamente para os seus usuários, por isso eles são muito importantes e considerados os verdadeiros “donos” do BD. Quando os projetistas e analistas de BD estão realizando o seu trabalho, eles interagem com esses usuários finais para conhecê-los e devem levar em consideração o fato de que, muitas vezes, os usuários são pessoas com pouca familiaridade com a tecnologia de BD. O diálogo entre o analista de sistemas e os usuários finais deve ser feito da maneira mais clara e facilitada possível, para que as 10 necessidades informacionais dos usuários sejam traduzidas corretamente como os requisitos de dados do sistema. Os analistas de sistemas e os programadores de aplicações (engenheiros de software) são as pessoas que determinam e implementam as especificações das transações customizadas para atender às necessidades dos usuários. O trabalho de análise do sistema tem início no diálogo entre os usuários e o analista, que resulta numa lista de requisitos de dados do sistema. Esses requisitos serão utilizados para a construção do primeiro modelo abstrato dos dados, o modelo conceitual, que é a primeira etapa no processo de criação de um BD. Em paralelo a esse trabalho, também são projetadas as transações que serão programadas e, posteriormente, testadas e documentadas, até serem colocadas em ação no sistema, quando se inicia a fase de utilização e manutenção. Uma vez que o sistema esteja sendo utilizado, enquanto ele existir, sempre terá que ser mantido pela equipe de engenharia de software. Os projetistas do banco de dados são responsáveis pela identificação dos dados que serão armazenados no BD e também por escolher as estruturas apropriadas para representar esses dados (modelo físico). Eles recebem o modelo conceitual criado pelos analistas de sistemas que o transformam num modelo físico, geralmente utilizando tabelas, já pensando em como esse BD será implementado num SGBD. Os projetistas também interagem com os potenciais usuários dos sistemas de BD e criam as visões que atendem aos requisitos desses usuários. O projeto final do BD, que é o resultado final do trabalho dos projetistas, deve ser capaz de suportar todos os requisitos de todos os grupos de usuários dos sistemas. Até esse momento, o BD ainda não foi de fato criado no SGBD, ele ainda está em fase de projeto. O administrador de bancos de dados, ou como é mais conhecido por sua sigla DBA (do inglês, DataBase Administrator), é o administrador-chefe de todos os recursos que envolvem o banco de dados, os SGBD e outros sistemas relacionados. O DBA é responsável pela autorização para o acesso ao BD, por questões de segurança e desempenho do SGBD, pela coordenação e monitoração do uso do BD, por adquirir recursos de software e hardware conforme necessidade, e por mais uma longa série de tarefas. Por ser a pessoa mais importante na área de BD nas organizações, o DBA será estudado com mais detalhes a seguir. Nós vimos aqui uma lista de pessoas que interagem diretamente com a tecnologia de bancos de dados e que realizam tarefas distintas, porém é muito comum encontrar em empresas, principalmente de pequeno e médio porte, uma única pessoa desempenhando os papéis de todas essas diferentes funções. Nesse caso, é muito importante que essa pessoa saiba diferenciar cada uma das tarefas que estiver desempenhando no momento adequado, seguindo as etapas do processo de criação do BD corretamente, sem pular ou eliminar nenhuma etapa, para garantir a qualidade final do BD criado. 11 Resumidamente, a função de administrar um BD comporta as tarefas de: instalar, configurar, monitorar e solucionar problemas que possam surgir com a utilização de um SGBD específico. Geralmente, para ser considerado um DBA de um SGBD específico, o mercado de trabalho exige uma certificação específica concedida pela empresa fabricante do SGBD. Detalhando um pouco mais as funções desempenhadas no cotidiano de um DBA, temos: a criação, ou pelo menos, o conhecimento do esquema lógico do BD; a definição de checagem de segurança e integridade dos dados; a tomada de decisões de como os dados são representados na base de dados armazenados; a definição, ou pelo menos, o conhecimento do projeto físico do BD; a definição de procedimentos de recuperação dos dados em caso da ocorrência de falhas; o monitoramento diário das ações dos usuários e o monitoramento diário do desempenho do SGBD; o contato com usuários para averiguação de disponibilidade dos dados por eles requisitados e ajuda na determinação e resolução de problemas; e os ajustes apropriados à medida que ocorram mudanças de requisitos. Considerações Finais Ao longo deste bloco, você aprendeu que o conceito de Banco de Dados (BD), de maneira bastante simplificada poderia ser conjunto de dados relacionados e acessíveis, que representa a qualquer momento os dados de uma parte do mundo real, de forma abstrata. Também conhecemos o conceito de Sistema Gerenciador de Banco de Dados (SGBD), que como o seu próprio nome já indica, é um sistema construído com a intenção de facilitar o gerenciamento dos BD e auxiliar as tarefas das pessoas que trabalham nessa área. Todo sistema desenvolvido para alguma aplicação específica e que utiliza um banco de dados é chamado de Sistema de BD e é utilizado no dia a dia pelos usuários finais. Nós observamos a grande importância que os dados e os sistemas de bancos de dados possuem para as organizações nos dias atuais, o que torna essa uma das áreas mais populares na ciência da computação. Nesse cenário, para quem trabalha na área de Tecnologia da Informação, é muito importante entender em vias gerais como é o ambiente de um sistema de banco de dados. Por fim, foram apresentadas as pessoas envolvidas diretamente com a tecnologia de BD, dando um maior destaque à figura do DBA que é o maior responsável por realizar as principais tarefas no SGBD e por garantir a integridade dos dados no BD. Referências AMADEU, Claudia V. Banco de Dados. São Paulo: Pearson, 2015. ELMASRI, Ramez; NAVATHE, Shamkant B. Sistemas de bancos de dados. 7. ed. São Paulo: Pearson, 2018. 12 MEDEIROS, Luciano F. Banco de Dados, princípios e prática. Curitiba: InterSaberes, 2013. BLOCO 2. MODELAGEM CONCEITUAL DE DADOS Olá! Continuando o nosso estudo na área de banco de dados, agora chegou o momento de compreendermos como é o processo de criação de um modelo de dados, a partir da demanda por informações em um sistema. O bloco atual apresentará as principais etapas do processo de construção de um Banco de Dados (BD), dando uma maior ênfase à etapa inicial de modelagem conceitual, introduzindo o modelo Entidade- Relacionamento. Também será apresentada a ferramenta CASE DBDesigner, que é de código aberto e pode ser livremente utilizada para auxiliar nessa tarefa de projeto de BD. Por fim, discutiremos como o modelo ERpode ser estendido para um modelo mais atual e flexível, o modelo EER. Bons estudos! 2.1. Projeto de banco de dados É muito importante compreender como ocorre todo o processo de construção de um banco de dados, iniciando-se com o trabalho do analista de sistema em conjunto com os usuários finais e dando como resultado o primeiro modelo conceitual de dados, até as etapas seguintes, que gradativamente vão passando pelo projeto, até a implementação do banco de dados num SGBD. Uma das principais características da tecnologia de banco de dados é a possibilidade de abstração dos dados, onde um modelo que esconde detalhes de como os dados estão fisicamente armazenados pode ser criado, facilitando assim a tarefa de programar aplicações para manipular esses dados. Formalmente, podemos definir um modelo de dados como um conjunto de conceitos usados para descrever a estrutura do BD e certas restrições, que o sistema deve garantir (ELMASRI e NABATHE, 2018, p.11). Em outras palavras, uma notação gráfica é criada para representar dados do mundo real, de forma a desenhar ou projetar uma estrutura para o banco de dados. A estrutura do banco de dados é definida durante o trabalho de projeto do BD. Além das estruturas dos dados, nesse projeto também podem ser colocadas informações referentes a algumas restrições impostas ao BD, que são extraídas dos usuários finais, a partir do trabalho de análise do sistema. Por exemplo, imagine um sistema de banco de dados que será desenvolvido para uma empresa que pretende armazenar os dados relativos aos seus funcionários e aos departamentos onde estes atuam. Após o trabalho de projeto, poderíamos chegar à definição da seguinte estrutura para os dados dos funcionários: 13 FUNCIONARIOS CPF_Func Nome_Func Endereco_Func ... mais algumas colunas ... Codigo_Dep_Func Para esse exemplo, poderíamos ter a seguinte restrição: todo funcionário dessa empresa obrigatoriamente tem que estar vinculado a um departamento. Ou seja, quando os dados dos funcionários forem inseridos no BD, o campo “Codigo_Dep_Func”, que determina qual é o departamento ao qual o funcionário está vinculado, não poderá estar em branco (esse é um campo obrigatório). Tanto as estruturas dos dados quanto as restrições impostas a esses dados são definidas num modelo de dados. Existem diferentes categorias de modelos de dados. São elas: Modelo Conceitual (resultado da etapa de projeto conceitual): esse modelo é construído com base em conceitos tais como entidades ou objetos. É a primeira etapa do processo de modelagem de bancos de dados. Descreve a estrutura dos dados de maneira abstrata sem se preocupar em como será a sua futura implementação física. Modelo Lógico (resultado da etapa de projeto lógico ou mapeamento do modelo de dados): é um modelo gerado a partir do modelo conceitual, numa etapa intermediária do processo, quando o primeiro modelo é mapeado para o modelo físico (ou de implementação). Nessa etapa, um SGBD específico a ser utilizado já deve ser definido para determinar qual será a linguagem de programação utilizada na próxima etapa. Vale ressaltarmos que se houver algum tipo de erro cometido na etapa anterior de modelagem conceitual, o modelo lógico também terá esse erro refletido. Modelo Físico (resultado da etapa de projeto físico): esse modelo descreve os aspectos físicos de implementação. É a criação propriamente dita do banco de dados, utilizando uma linguagem específica de um SGBD. A Figura 2.1 ilustra de maneira simplificada as principais fases do projeto de um banco de dados. Nela, podemos observar todo o processo que se inicia com a definição do Mini-Mundo, que é a parte do mundo real que será modelado, até o último passo que é a criação dos programas de aplicação que serão voltados aos usuários finais e irão utilizar os dados gerenciados pelo SGBD. Ao longo do processo, cada etapa vai evoluindo para passos mais avançados, desde aquele mais próximo das pessoas, como o levantamento e a análise de requisitos feita pelos analistas, projetistas e usuários, até 14 a construção dos modelos: conceitual, lógico e físico gradativamente. Algumas dessas etapas iniciais são realizadas independentemente do modelo de implementação e do SGBD, e outras, as finais, dependem da escolha por um SGBD específico. Na Figura 2.1, também surgem alguns conceitos, como o de esquema de um BD, que é a descrição da estrutura de um BD e pode ser textual, por exemplo, através da definição de comandos em uma linguagem de programação, ou gráfico, por exemplo, através do desenho de símbolos que representam tabelas ou conjuntos de dados. Os modelos conceituais descrevem o esquema conceitual do BD usando, por exemplo, o modelo Entidade- Relacionamento (ER). Os modelos lógicos ou de implementação descrevem os esquemas externos, que usam, por exemplo, o modelo Relacional. Nesses modelos, um SGBD já deve estar sendo definido para ser utilizado posteriormente, pois a depender dessa escolha, o projeto será diferente. Por exemplo, se o SGBD escolhido for o SQLServer da Microsoft, que é originalmente relacional, o projeto lógico do BD será criado baseando-se na estrutura de relações ou tabelas; mas se por outro lado o SGBD escolhido for o PostgreSQL, que tem como teoria a Orientação a Objetos, o projeto lógico do BD será criado baseando-se na estrutura de objetos, classes etc. Outro conceito da área de modelagem em banco de dados é o de instância de um banco de dados, que se refere aos dados atuais armazenados num determinado momento, também chamado estado do BD. Ou seja, o estado do BD num determinado momento é como se fosse tirada uma foto dos dados contidos no BD naquele momento específico. Todos os dados que estão cadastrados num banco de dados num determinado instante, ou as suas instâncias, determinam o seu estado naquele momento. 15 Figura 2.1: Um diagrama simplificado para ilustrar as principais fases do projeto de um banco de dados (ELMASRI e NAVATHE, 2018, p. 57). Então, podemos refletir que o processo de construção de um banco de dados é gradativo, que se inicia com a intervenção dos analistas de sistemas e os usuários finais do sistema, que juntos definem os requisitos de dados. A partir dessa definição inicial, o primeiro modelo conceitual é construído e, posteriormente, é utilizado como base na construção dos modelos posteriores (projetos lógico e físico). Se ocorrer um erro de modelagem na etapa inicial desse processo, muito provavelmente todo o processo estará comprometido. Por esse motivo, considera-se a etapa inicial de modelagem conceitual de dados tão importante. Vale também ressaltarmos a importância de que nesse processo nenhuma etapa seja ignorada, ou seja, não se deve pular nenhuma etapa, por mais experiente que seja a equipe de desenvolvimento de BD. Todas as etapas são importantes. Uma dessas etapas é a de mapeamento do modelo de dados, que traduz o modelo conceitual, num modelo lógico. 16 A Figura 2.2 mostra um exemplo ilustrativo do mapeamento de modelos de dados: do modelo conceitual (ER) e seu equivalente no modelo lógico (Relacional). Figura 2.2: Exemplos de modelos conceitual e lógico. Fonte: Elaborada pela autora. 2.2. Principais conceitos do modelo ER Segundo Ramakrishnan e Gehrke , o modelo de dados n dade- elacionamento é u lizado para descrever os dados envolvidos no co diano de uma empresa do mundo real em termos de objetos ou en dades e seus relacionamentos. sse modelo é amplamente u lizado para desenvolver um projeto inicial de BD e fornece conceitos úteis que nos possibilitam mover de uma descrição informal do que os usuários desejam de seu BD, para uma descrição mais detalhada e precisa do que pode ser implementado num SGBD. Como vimos, o processo de construção de um BD é gradativo e a modelagem conceitual de dadosé uma das etapas iniciais. Do resultado dessa modelagem depende o sucesso ou não de todo o restante do processo, fazendo com que a modelagem conceitual seja então uma das principais tarefas a serem desenvolvidas por pessoas dessa área. A partir da modelagem, faz-se o projeto que é a base para a posterior implementação. Sem essa tarefa, é impossível o trabalho do administrador de BD. A seguir, serão apresentados conceitos sobre modelagem e projetos de BD, utilizando o modelo conceitual Entidade-Relacionamento (ER). 17 Tanto o projeto conceitual quanto posteriormente o projeto físico, para serem desenvolvidos, precisam de informações sobre as especificações das operações básicas feitas pelos usuários. Os projetistas e analistas de BD trabalham em conjunto com os usuários no levantamento dos requisitos de dados. O modelo conceitual Entidade-Relacionamento (ER) é formado por desenhos gráficos, que possuem algum significado e representam elementos do mundo real a serem modelados. Os dois principais conceitos desse modelo, como pode ser observado por seu nome, são os conceitos de Entidade e de Relacionamento. A Figura 2.3 apresenta a principal simbologia utilizada no modelo ER e seu significado. Figura 2.3: Notação do modelo ER (parte 1) Fonte: Adaptada de Elmasri e Navathe (2018, p. 76). Entidade ou Tipo de entidade: é representado graficamente por um retângulo, é o conjunto formado por instâncias de dados, ou seja, é um conjunto de dados relacionados a um conceito único, que serão gravados no BD. Entidade fraca é representada graficamente por um retângulo de traço duplo. É um tipo de entidade, mas com a característica de que os dados de suas instâncias são dependentes de dados de outra entidade, ou seja, os dados dessa entidade só existem se existirem dados numa outra entidade. Relacionamento ou Tipo de relacionamento: é representado graficamente por um losango. Refere-se a ações que interagem com os elementos das entidades. Relacionamento de identificação: representado graficamente por um losango de traço duplo, é um relacionamento que liga algum tipo de entidade fraca, que é identificada por outra entidade. 18 Atributos: representados graficamente por uma circunferência, são características comuns às instâncias que formam entidades. m outras palavras, as entidades são elementos ou objetos ou “coisas” do mundo real que possuem uma existência independente e são de interesse para uma determinada aplicação. As entidades são, por exemplo, os clientes de uma loja, os produtos que ela comercializa, os funcionários que nela trabalham etc., ou seja, todos os elementos da loja no mundo real, que para a aplicação que será desenvolvida possuem algum tipo de importância e seus dados precisam ser cadastrados no banco de dados. Os atributos são propriedades usadas para descrever cada uma das entidades. Por exemplo, na entidade dos Funcionários: Os atributos podem ser dos seguintes tipos: simples, o que chamamos somente de atributos e geralmente são formados por um só conjunto de caracteres ou números; ou podem ser atributos compostos, que são formados por vários atributos simples, por exemplo: Endereco = rua + numero + bairro + cidade + UF + CEP. Os atributos também podem ser monovalorados, que é o tipo mais comum, quando cada atributo possui uma instância, ou pode ser do tipo multivalorado, quando um atributo pode possuir várias instâncias, por exemplo, um departamento de uma empresa localizado em diversas cidades é representado pelo uso de traço duplo no atributo. A Figura 2.4 apresenta de forma gráfica como esses diferentes tipos de atributos são representados no modelo ER. 19 Figura 2.4: Notação do modelo ER (parte 2) Fonte: adaptada de Elmasri e Navathe (2018, p. 76). A Figura 2.4 também apresenta o conceito de atributo derivado (representado com tracejado), que se refere aos atributos cujos valores não ficam armazenados no BD, mas sim esses dados são calculados durante a execução da aplicação, ou sempre que necessário. No caso do exemplo, seria a quantidade de Funcionários de um determinado departamento, que é uma conta que seria feita num momento. Outro conceito é o de atributo-chave. As chaves são identificadores de um tipo de entidade, ou, em outras palavras, um atributo de um tipo de entidade que possui um valor único para cada entidade é chamado de chave. Por exemplo, o número de CPF de um funcionário, por ser um valor que não pode se repetir para mais de uma pessoa, quando dado, conseguimos identificar o funcionário. A chave é representada pelo nome do atributo sublinhado. Uma chave pode ser um atributo simples, ou um atributo composta. Se for composto, temos o conceito de chave composta, que é formada pela combinação de vários atributos. Um tipo de entidade pode possuir uma chave simples, ou uma chave composta, ou várias chaves simples (distintas), ou várias chaves compostas. O conceito de chave foi introduzido em 1976 por Peter Chen, para identificar uma instância, porém a chave deve ser vista de uma forma mais ampla, como uma restrição de integridade. Para o conceito de chave, devemos entender que a instância é única. A restrição de integridade nesse caso é a garantia de que se um atributo é chave, não pode haver no BD mais de um atributo com o mesmo valor para aquele atributo. Por exemplo, se numa escola temos que a matrícula dos alunos é um valor único, este é chave. Se ocorrer no BD 20 dois alunos com o mesmo número de matrícula, esse valor estaria repetido. Sendo assim, estaria ferindo a restrição de integridade do BD. Além desses conceitos apresentados na Figura 2.4, há o conceito de domínio de um atributo, que se refere ao conjunto de valores que cada atributo de um tipo de entidade possui, ou seja, o domínio define os valores que podem ser assumidos por esse atributo, para cada entidade individualmente. Por exemplo, suponha que o atributo “nome” possua o domínio definido para um conjunto de caracteres alfabéticos de no máximo . Isso significa que só poderão ser colocados no banco de dados nomes formados por no máximo 200 letras. Outro exemplo é o atributo CPF formado por um conjunto de caracteres numéricos de tamanho fixo 11. Nesse caso, só poderemos cadastrar CPFs com tamanho exato de 11 números. Dois atributos podem ter o mesmo domínio, mais amplo, como por exemplo: na entidade FUNCIONARIOS, os atributos TelefoneResidencial e TelefoneComercial podem possuir o mesmo domínio amplo dos números de telefone; e DataNascimento e DataAdmissao possuem o mesmo domínio amplo das datas. Já estudamos aspectos e características referentes aos conceitos de entidades e de atributos. Falemos agora dos relacionamentos. Relacionamentos ou tipos de relacionamentos são associações entre duas ou mais entidades distintas (ou instâncias da entidade), com um determinado significado. Graficamente representados por losangos ligando as entidades e seus nomes, geralmente são verbos, já que significam uma ação entre elementos de uma entidade e seu relacionamento com elementos da outra entidade. Por exemplo: FUNCIONARIO João TRABALHA_EM DEPARTAMENTO Pesquisa Figura 2.5: Exemplo simplificado de relacionamento. Fonte: Elaborada pela autora. As entidades participantes de um relacionamento atuam com um determinado papel nesse relacionamento. O significado desse papel é dado por um nome a ele atribuído. Um relacionamento é dito recursivo, também conhecido como autorrelacionamento, quando este relaciona uma única entidade, através de dois papéis distintos. Por exemplo: 21 Figura 2.6: Exemplo de autorrelacionamento ou relacionamento recursivo. Fonte: Elaborada pela autora. Além das estruturas básicas já explicadas do modelo ER, existem algumas restrições impostas sobre tipos de relacionamento. As restrições mais importantes são a relação de cardinalidadee a relação de participação. Juntas, as restrições de cardinalidade e de participação formam as restrições estruturais do modelo ER, que determinam a quantidade mínima e máxima de elementos das entidades que participam do relacionamento. A relação de cardinalidade especifica o número de instâncias de um tipo de entidade que pode participar do relacionamento. Um relacionamento pode ser: 1 para 1 (1:1), 1 para N (1:N), N para 1 (N:1) ou N para N (N:N). A Figura 2.7 apresenta a forma gráfica de representação dos conceitos de participação, cardinalidade e restrição estrutural. Figura 2.7: Notação do modelo ER (parte 3) Fonte: adaptada de Elmasri e Navathe (2018, p. 76). 22 No relacionamento 1:1 apenas um elemento da entidade pode se relacionar com apenas 1 elemento da outra entidade envolvida no relacionamento. Por exemplo, supondo que exista um relacionamento chamado “chefia” entre a entidade FUNCIONA IOS e a entidade D PA TAM NTOS, onde apenas um funcionário pode gerenciar um único departamento e um departamento pode ter apenas um único chefe. O relacionamento “chefia” é do tipo 1:1. No relacionamento 1:N ou N:1, ou um para muitos, um elemento da entidade pode se relacionar com vários elementos da outra entidade envolvida no relacionamento, por exemplo, supondo que exista um relacionamento chamado “trabalha_em” entre a entidade FUNCIONARIOS e a entidade DEPARTAMENTOS, onde um funcionário pode trabalhar em apenas 1 departamento, porém um departamento possui vários (N) funcionários trabalhando nele. O relacionamento “trabalha_em” é do tipo :N. No relacionamento N:N, ou muitos para muitos, vários elementos da entidade podem se relacionar com vários elementos da outra entidade envolvida no relacionamento. Por exemplo, supondo que exista um relacionamento chamado “realizam” entre a entidade FUNCIONA IOS e a entidade P OJ TOS, onde um funcionário pode realizar vários (N) projetos e cada projeto pode ser realizado por vários (N) funcionários. O relacionamento “realizam” é do tipo N:N. A relação de participação especifica se a existência das instâncias nas entidades depende de elas estarem associadas ou não à outra entidade. Pode ser chamada de obrigatória (total) ou opcional (parcial). Quando todos os elementos da entidade são obrigados a participarem de um relacionamento, este é chamado de total ou obrigatório. Por exemplo, se dizemos que obrigatoriamente todos os funcionários da empresa têm que estar relacionados trabalhando em um departamento, nesse caso não pode haver sequer um funcionário cadastrado no banco de dados, sem a informação de qual departamento este trabalha. Por outro lado, se uma entidade pode ter elementos que não participam de determinado relacionamento, este é dito opcional ou parcial. Por exemplo, se dizemos que nem todos os funcionários são obrigados a estarem envolvidos num projeto, nesse caso teremos funcionários que realizam projetos e outros que não realizam, então esse relacionamento é parcial. Agora que os principais conceitos do modelo ER foram apresentados, é hora de colocar a mão na massa e ver como esse modelo é utilizado na prática. 2.3. Construindo um modelo ER Para o desenvolvimento da competência e da habilidade de criar um projeto conceitual de dados, usando o modelo ER, é necessário que os conceitos apresentados sejam utilizados e é exigida uma prática nessa área. 23 Sendo assim, apresentaremos a seguir um minicaso fictício da Empresa X, que servirá de exemplo, sobre o qual faremos a construção de um modelo ER. Seja uma Empresa X, que possui um sistema de banco de dados a ser desenvolvido, na primeira etapa de criação do modelo conceitual desse banco de dados, os gestores da Empresa X fizeram as seguintes observações sobre os dados que precisam ser gerenciados: Devem ser gravados os dados dos departamentos da empresa, que possuem como características o seu nome, seu código que é único para cada departamento e as localizações do departamento. O mesmo departamento pode estar localizado em diferentes cidades, que possuem sedes da Empresa X. Devem ser gravados os dados dos funcionários, que possuem como características o seu nome, o seu CPF (documento oficial para identificar o funcionário), valor do salário, sexo do funcionário e o seu endereço, que é formado pelo nome da rua e número, bairro e CEP. Devem ser gravados os projetos desenvolvidos na Empresa X, que possuem as características: descrição, código (um por projeto) e total da verba envolvida no projeto. Além dessas observações, os gestores também falaram um pouco sobre o funcionamento e as regras seguidas na Empresa X. Eles acrescentaram que: todo funcionário obrigatoriamente tem que estar ligado ao departamento onde trabalha; existem alguns funcionários que possuem cargo de coordenação sobre outros funcionários; todo departamento possui um gerente, que é um funcionário específico. Não pode haver departamento sem um gerente indicado; os departamentos controlam os projetos que são desenvolvidos na Empresa X. Um projeto só pode ser controlado por no máximo um departamento, mas um departamento pode controlar mais de um projeto; os funcionários realizam projetos e as horas trabalhadas nesses projetos devem ser armazenadas para fins de pagamento. Depois dessa conversa inicial entre os projetistas do banco de dados e os gestores da Empresa X, um primeiro esboço do modelo conceitual foi apresentado. A Figura 2.8 ilustra o esboço do modelo ER para a Empresa X, seguindo as características apresentadas até o momento. 24 Figura 2.8: Modelo ER da Empresa X. Fonte: Elaborada pela autora. Ao observarmos esse modelo, podemos destacar os conceitos apresentados nessa unidade: as entidades desse modelo são: DEPARTAMENTOS, FUNCIONARIOS e PROJETOS. Os atributos da entidade DEPARTAMENTOS são: código (que está sublinhado porque é a chave da entidade, pois é único para cada departamento), nome e localizações (que possui traço duplo, pois é multivalorado, uma vez que um departamento pode ser localizado em vários locais). Os atributos da entidade FUNCIONARIOS são: nome, CPF (que está sublinhado porque é a chave da entidade, pois é único para cada funcionário), endereço (que é composto por rua, número, bairro e CEP), salário e sexo. Os atributos da entidade PROJETOS são: código (que está sublinhado porque é a chave da entidade, pois é único para cada projeto), descrição e verba. xiste um relacionamento : chamado “gerencia” entre as entidades D PA TAM NTOS e FUNCIONARIOS, que representa o fato de que cada departamento possui um gerente. O traço duplo do lado do departamento nesse relacionamento representa a totalidade, que nesse caso é a regra de que todo departamento obrigatoriamente tem que ter um gerente. Existe um relacionamento :N chamado “trabalha_em” entre as entidades D PA TAM NTOS e FUNCIONARIOS, que representa a relação de trabalho dos funcionários num departamento. Cada funcionário 25 obrigatoriamente (traço duplo do lado do funcionário) trabalha num único departamento, mas um departamento pode ter N funcionários trabalhando nele. xiste um autorrelacionamento ou relacionamento recursivo :N chamado “coordena”, envolvendo diferentes instâncias da entidade FUNCIONARIOS. De um lado desse autorrelacionamento, temos o papel do coordenador, que é um funcionário que coordena vários outros funcionários. xiste um relacionamento N:N chamado “realizam” envolvendo as entidades FUNCIONA IOS e P OJ TOS. Ou seja, um funcionário pode realizar vários projetos e cada projeto pode possuir vários funcionários trabalhando nele. Do lado dos projetos, há um traço duplo indicando a totalidade, pois todo projeto obrigatoriamente tem que possuir funcionários. Nesse relacionamento, há um atributo, que caracteriza o número de horas que um funcionário trabalhou num projeto. Por fim,existe um relacionamento :N chamado “controle” entre as entidades D PA TAM NTOS e PROJETOS, que representa a relação de controle dos departamentos sobre seus projetos. Um departamento controla vários projetos, mas um projeto só pode ser controlado por um departamento. Vimos até o momento o modelo ER em teoria, com todos os seus principais conceitos, e sua aplicação prática num exemplo. É importante a compreensão de que desde que esse modelo surgiu ele vem sendo amplamente utilizado, mas também vem sofrendo evoluções. Atualmente, o modelo ER não se restringe apenas aos conceitos e representação gráfica tradicionais, conforme foram apresentadas até o momento. Uma das formas de observarmos a evolução desse modelo é sua utilização em ferramentas computacionais de auxílio ao projeto, as ferramentas CASE, e outra forma é conhecendo o modelo ER estendido. 2.4. A ferramenta DB Designer Existe disponível para os projetistas de bancos de dados uma série de ferramentas CASE (de Computer-Aided Software Engineering, ou programas auxiliares nas tarefas de engenharia de software), que auxiliam na tarefa de projeto dos sistemas, incluindo a modelagem conceitual de dados. Uma dessas ferramentas CASE mais conhecidas e difundidas é o programa DB Designer, desenvolvida pela empresa Fabulous Force Database Tools, que pelo fato de ser um software livre, pode ser baixado, instalado e utilizado gratuitamente. Essa ferramenta é compatível com diversos SGBDs conhecidos e amplamente utilizados no mercado, tais como: Oracle, SQLServer, MySQL, PostGreSQL e SQLite. Além de auxiliar na criação do modelo conceitual de dados, utilizando uma notação muito próxima da modelagem ER, após concluída a etapa de projeto conceitual, nessa ferramenta é possível gerar o código referente à criação do modelo físico e implementá-lo diretamente num SGBD. 26 O DB Designer possui uma interface gráfica de fácil compreensão para o usuário, tem diferentes possibilidades de visualização dos dados, possui opções de importar e exportar dados diretamente para os BD instalados, dentre outras facilidades para os projetistas. O objetivo aqui, entretanto, não é de ensinar a utilizar a ferramenta, mas sim de apresentá-la de forma sucinta, para que os interessados em sua utilização possam por conta própria aprender seu uso. Sendo assim, para obter mais informações e buscar por sites para baixar o DB Designer, consulte o site oficial disponível em: https://dbdesigner.net/. A Figura 2.9 ilustra como aparenta a principal interface do DB Designer 4. Figura 2.9: Interface do DB Designer 4. Fonte: Elaborada pela autora. 2.5. O modelo EER O modelo Entidade-Relacionamento estendido, também conhecido por sua sigla EER (do inglês, Extended Entity Relation), surgiu para suprir uma necessidade de representação dos dados mais complexos, que são utilizados em sistemas avançados de informação, como sistemas multimídia, sistemas geográficos, sistemas específicos da área de engenharia, dentre outros. Todos esses sistemas para serem implementados utilizam como solução a programação Orientada a Objetos (OO) e seus principais conceitos, tais como os de objeto, classe, subclasse, herança etc. Os projetistas de bancos de dados precisavam de mais elementos, que aqueles presentes no modelo ER, para uma representação semântica dos dados mais complexos. Precisava ser representado exatamente o que o dado significa no sistema, geralmente objetos. https://dbdesigner.net/ 27 O modelo ER tradicional continua sendo o mais utilizado, mas o ER Estendido (EER) apresenta mais possibilidades com a inclusão dos conceitos de subclasses, superclasses, herança, especialização e generalização, que estudaremos a seguir. Um tipo de entidade no modelo EER é usado para representar um conjunto de entidades de um mesmo tipo existente no banco de dados. Por exemplo, o tipo de entidade EMPREGADO de um banco de dados de empresa, que representa todos os empregados de um mesmo tipo, que contém as mesmas características representadas em seus atributos. Agora, imagine que nessa empresa os empregados podem ser agrupados em subgrupos, que possuem características próprias que são importantes para a aplicação do banco de dados. Por exemplo, para a entidade EMPREGADO, poderíamos ter os subgrupos dos TECNICO, SECRETARIA, ENGENHEIRO e GERENTE. Chamamos cada um desses subgrupos de subclasses do tipo de entidade EMPREGADOS. EMPREGADO, por sua vez, é a superclasse das demais subclasses. A Figura 2.10 ilustra esses conceitos. Figura 2.10: Ilustração dos conceitos de superclasse e subclasse. Fonte: Elaborada pela autora. As entidades que são subclasses herdam todas as características da superclasse. Ou seja, nesse exemplo, técnicos, secretárias, engenheiros e gerentes possuem todos os atributos da superclasse EMPREGADO. Observe a Figura 2.11, que ilustra a herança. 28 Figura 2.11: Ilustração do conceito de herança. Fonte: Elaborada pela autora. Outros dois conceitos importantes no modelo EER são os de especialização e generalização, pois com eles podem ser representadas características interessantes dos dados. A especialização é o processo de definir um conjunto de subclasses de um tipo de entidade, com base em algumas características de distinção das entidades da superclasse. Por exemplo, um EMPREGADO pode ser especializado pelo tipo de trabalho que realiza entre SECRETARIA, ENGENHEIRO ou TECNICO. Nesse caso, um empregado pertence a um dos três subgrupos, não podendo pertencer a mais de um. Figura 2.12: Ilustração do conceito de especialização sobreposta no exemplo. Fonte: Elaborada pela autora. 29 Uma especialização não disjunta ou sobreposta, representada pela letra “o” de overlap) no círculo, ocorre quando uma instância poderia pertencer ao mesmo tempo de mais de uma subclasse, ou seja, nesse exemplo, uma mesma peça poderia ser fabricada ou fornecida. Quando for fabricada, receberá as características da subclasse PECA_FABRICADA, e quando for fornecida, terá as características da entidade PECA_FORNECIDA. A generalização ocorre quase que num processo inverso da especialização, quando pensamos não nas características particulares de cada entidade, mas sim em características comuns ou generalizadas. Por exemplo, imagine uma aplicação que possui dois tipos distintos de entidades CARRO e CAMINHAO, representados na parte (a) da Figura 2.13. Figura 2.13: Ilustração do conceito de generalização. Fonte: adaptada de Elmasri e Navathe (2018, p. 102). O processo de generalização vai extrair características comuns dessas entidades, tais como ID do Veículo, Preço e Número da placa, para criar uma superclasse de VEÍCULOS, representado na parte (b) da Figura 2.13. Observe que a notação é a mesma utilizada para especialização e generalização. 30 O traço duplo nesse diagrama representa a restrição de totalidade, onde todo VEICULO obrigatoriamente tem que pertencer a um dos dois grupos: CARRO ou CAMINHAO. Além dessas características apresentadas para o modelo EER, existem outras representações e restrições, porém não são necessárias para conhecimento específico desta disciplina. Considerações Finais Ao longo deste bloco, você aprendeu que o processo de projeto em bancos de dados se inicia com a criação de um modelo conceitual de dados, que pode ser realizado através da modelagem Entidade- Relacionamento (ER). O modelo ER é gráfico e possui diversas definições, tais como: entidade, relacionamento, atributo, chave, cardinalidade e totalidade, dentre outros. Posteriormente, esse modelo será mapeado para um modelo lógico e de implementação, que pode ser o relacional. Existem ferramentas CASE que podem ser usadas para o projeto de bancos de dados e uma delas é o DB Designer, que além de ser uma ferramenta bastante utilizada e com muitos recursos interessantes,possui a vantagem de ser um software livre. Vimos também que o modelo ER evoluiu ao longo dos anos e acrescentou alguns conceitos, se estendendo e se transformando no chamado modelo ER Estendido ou EER. Referência Bibliográfica RAMAKRISHNAN, Raghu; GEHRKE, Johannes. Sistemas de gerenciamento de banco de dados. 3. ed. São Paulo: McGraw Hill, 2011. BLOCO 3. MODELO RELACIONAL Olá! Vamos dar andamento ao processo de criação de BD, avançando na etapa de modelagem lógica e física de dados. Este bloco está concentrado na descrição dos princípios básicos do modelo relacional de dados, iniciando pela definição dos conceitos de modelagem e notação do modelo relacional, passando à discussão das restrições relacionais, chegando às operações de atualização de dados no modelo relacional. Depois veremos como esse modelo evoluiu com a incorporação da Orientação a Objetos, chegando ao conceito de BD Objeto-Relacional (OR). Vamos lá? 3.1. Principais Conceitos do Modelo Relacional O modelo relacional foi introduzido por Ted Codd, da IBM Research, em 1970, a partir da publicação de um artigo científico, fruto de sua pesquisa. Esse modelo chamou a atenção devido à sua simplicidade e base 31 matemática. O modelo usa o conceito de relação matemática, que representa uma tabela de valores. Os modelos de dados que antecederam o modelo relacional compreendem os modelos hierárquico e de rede. Ambos são mais complexos e menos eficientes. As primeiras implementações comerciais do modelo relacional tornaram-se disponíveis no início dos anos 1980 e desde essa época o modelo vem sendo utilizado em um grande número de sistemas comerciais. Segundo Elmasri e Navathe (2018), um banco de dados estruturado de acordo com o modelo relacional corresponde a uma coleção de relações. Informalmente, uma relação é uma tabela na qual cada linha expressa uma coleção de valores de dados relacionados. Fazendo uma analogia com o modelo ER, os valores na linha da tabela podem ser interpretados como um fato que descreve a instância de uma entidade ou um relacionamento, e as colunas da tabela correspondem aos atributos de uma entidade ou de um relacionamento. Segundo Amadeu (2015), de maneira simplificada, em um modelo relacional, as estruturas básicas são tabelas (relações), as restrições de integridade são chaves, restrições de domínio, de entidade e referencial, e as operações são álgebra relacional. Como o modelo relacional é todo baseado em teorias matemáticas, existe uma notação formal utilizada para definir cada um dos conceitos desse modelo. Formalmente, as linhas de uma relação, ou tabela, são chamadas de tuplas e o cabeçalho das colunas é chamado de atributos. O conjunto de valores que podem aparecer em cada coluna é chamado de domínio. A Figura 3.1 ilustra esses conceitos. Figura 3.1: Os atributos e as tuplas de uma relação chamada ALUNOS. Fonte: elaborada pela autora. Usando como exemplo os dados da Figura 3.1, a primeira linha (tupla 1) representa os dados de uma aluna chamada “Carla Martins de Souza”, e além desse atributo Nome , ela possui outros dados relacionados a ela que são: matrícula “ 546”, endereço “ ua X, 5” e assim por diante. Cada valor desses dados possui 32 um tipo permitido de valores que podem ser usados para preencher essas colunas (atributos) da tabela. Esses valores possíveis constituem o domínio do atributo, como a idade dos alunos que é do tipo número inteiro, o CPF que é um conjunto de caracteres numéricos com 11 algarismos etc. Um esquema de relação R é uma expressão matemática da forma: R (A1,A2,...,An) onde: R – é o nome de uma relação; Ai – é o nome de um atributo que representa um papel de um domínio D em R – dom (Ai); n – é o grau da relação. Um exemplo de esquema de relação pode ser extraído da Figura 3.1, onde a relação ALUNOS será assim representada: ALUNOS (Nome, Matricula, Endereco, Email, Celular, Idade, CPF) Esse é um esquema de relação de grau 7 (quantidade de atributos). Uma relação (também chamada de estado de uma relação ou instância de uma relação) r(R) é um conjunto de n-tuplas: r = {t1, t2,..., tn}, onde: cada n-tupla t é uma lista ordenada de n valores t=v1, v2,...,vn, sendo cada vi um elemento do dom(Ai) ou um valor especial nulo. Em outras palavras, usando o exemplo apresentado na Figura 3.1, a relação ALUNOS é um conjunto de 5 tuplas, cada uma contendo os valores associados a cada domínio de cada atributo, que representam fatos do mundo real. A definição anterior implica certas características que fazem uma relação ser diferente de um arquivo simplesmente. Algumas dessas características são: As tuplas de uma relação não são ordenadas. Uma relação é definida como um conjunto de tuplas, porém não há uma ordenação matemática entre elas. Na verdade, a ordem em que as tuplas aparecem numa relação é a mesma ordem em que esses dados foram sendo inseridos no banco de dados. Por exemplo, na Figura 3. , a aluna “Carla Martins de Souza” foi inserida no banco de dados antes do aluno “Joaquim Barros de Lima”, e assim por diante. Uma tupla é uma lista ordenada de valores, portanto, a ordem dos valores em uma tupla, e consequentemente, dos atributos na definição de um esquema de relação é importante. Ou seja, a ordem que cada coluna da tabela ocupa no banco de dados é fixa e os dados que são armazenados em cada coluna devem obedecer a essa ordem. Por exemplo, na Figura 3.1, só conseguimos incluir os 33 dados de cada linha na tabela com os valores corretos: primeiro o nome, depois a matrícula, depois o endereço, e assim sucessivamente até o CPF, que é o último valor. O valor de cada atributo em uma tupla é atômico ou é um valor nulo. Ou seja, o valor que é inserido em cada célula da tabela é indivisível, não podendo ser composto e/ou multivalorado. Na ausência de valores para preencher um atributo, este receberá o valor nulo. Em outras palavras, usando mais uma vez o exemplo da Figura 3.1, seja um aluno definido na relação ALUNOS, não conseguimos no atributo “ mail”, conforme foi definido, inserir mais de um valor de e-mail. Para esse modelo, se precisarmos representar mais de um valor para um atributo, teremos que criar um novo atributo. Por exemplo, teríamos que fazer uma coluna atributo para “ mail_ ” e outra coluna para “ mail_ ”, no caso de querermos cadastrar 2 valores possíveis. Caso não queiramos cadastrar mais de um e-mail do aluno, poderemos deixar um dos atributos com o valor nulo (em inglês, null). Nulo (null): o valor nulo é usado para representar o valor do atributo desconhecido ou quando não se aplica a uma tupla. Esse valor é diferente de atribuirmos o valor 0 (zero) a um atributo numérico, pois ele representa a ausência de valor. Por exemplo, se numa tupla de uma tabela das notas dos alunos, no atributo nota colocamos o valor 0 (zero), significa que o aluno fez a prova e tirou a nota 0 (zero). Por outro lado, se atribuirmos o valor nulo, significa que o aluno não tem nota, talvez porque não tenha feito a prova. Vale ressaltarmos que nem todos os atributos podem receber valor nulo, pois podem ser de conteúdo obrigatório. Por exemplo, não faz sentido cadastrar um aluno no banco de dados sem colocar seu nome. Nesse caso, o atributo “Nome” é obrigatório e ao ser criado no BD deve-se colocar a expressão not null, representando que não serão aceitos valores nulos. Um banco de dados relacional é um conjunto formado por diversas relações (tabelas), que estão relacionadas entre si e que são definidas a partir de uma realidade. A Figura 3.2 apresenta um exemplo de um banco de dados relacional. 34 Figura 3.2: Exemplo de relações em um BD relacional de uma Escola. Fonte: Elaborada pela autora. Nesse exemplo, podemos observar que o banco de dados da Escola é composto por 7 relações: ALUNOS, PROFESSORES, PROF_DISC,DISCIPLINAS, CURSOS, CURSO_DISC e TURMAS. Cada uma das relações possui atributos definidos. Ao longo deste bloco, sempre que necessário, os conceitos apresentados farão referência a esse exemplo. Um esquema de BD relacional S define um conjunto de esquemas relação R = {R1, R2,...,Rn} e um conjunto de restrições de integridade I, portanto, S=(R,I). Em outras palavras, um esquema de banco de dados relacional é composto não só por todas as tabelas que o compõem, mas também por suas restrições de integridade. 3.2. Restrições no Modelo Relacional As restrições de integridade do modelo relacional são basicamente de 4 tipos: restrições de domínio, restrições de chaves, restrições de integridade de entidade e restrições de integridade referencial. 35 As restrições de domínio especificam que o valor de cada atributo de uma relação deve ser um valor atômico do domínio do atributo. Em outras palavras, para cada atributo da tabela é definido um domínio (ou um tipo de dado específico) e o valor atribuído ao atributo no banco de dados tem que ser atômico e obedecer a esse domínio especificado, ou pode ser um valor nulo. As restrições de chaves são especificadas a partir dos conceitos de chave primária e de chave alternativa. No modelo relacional, o conceito de chave é semelhante ao do modelo entidade-relacionamento. Uma chave é um atributo que identifique uma tupla na relação. Formalmente, uma chave K (do inglês, Key) da relação R é qualquer subconjunto mínimo de atributos, que identificam unicamente uma tupla da relação, ou, em outras palavras, um atributo que assuma um valor único para cada linha da tabela. Sendo assim, dado um valor desse atributo, é possível saber de que linha se refere. A chave pode ser composta por apenas um atributo, ou por mais de um atributo. Por exemplo, no modelo apresentado na Figura 3.2, os atributos que aparecem sublinhados em cada esquema de relação, representam as suas chaves primárias. Na tabela de ALUNOS é a matrícula, na tabela de PROFESSORES é o CPF, e assim por diante. Já na tabela CURSO_DISC a chave é formada por dois atributos Cod_Curso e Cod_Disc. Isso ocorre porque apenas um desses atributos não identifica unicamente uma linha dessa tabela. Para identificar, são necessários dois atributos. Em geral, uma relação pode ter mais de uma chave. Cada uma dessas chaves é chamada de chave candidata. Dentre as chaves candidatas, uma delas é escolhida como chave primária (PK – do inglês, Primary Key), aquela que irá identificar unicamente uma tupla e deve ser sublinhada. As demais constituem as chaves alternadas ou alternativas (essas não devem ser sublinhadas). Por exemplo, na Figura 3.2 observamos que na tabela de ALUNOS a chave primária é o atributo que está sublinhado “Matricula”, porém sabemos que o valor do CPF de um aluno é único para ele. Isso significa que o CPF do aluno poderia ser uma chave primária, mas não é. Nesse caso, o atributo “CPF” é uma chave alternativa. As restrições de integridade de entidade definem que nenhum componente de uma chave primária pode ser um valor nulo (ou null). Em outras palavras, as chaves primárias são atributos de preenchimento obrigatório no banco de dados, uma vez que esses valores são utilizados para identificar uma instância da relação. As restrições de integridade referencial são especificadas a partir do conceito de chave estrangeira. Uma chave estrangeira é aquela que aparece numa tabela fazendo referência aos dados de uma outra tabela, na qual ela é chave primária. 36 A Figura 3.3 é novamente a imagem do BD Escola, porém dessa vez com representações das chaves estrangeiras existentes nesse exemplo. Figura 3.3: Modelo relacional do BD Escola com destaque para as chaves estrangeiras. Fonte: Elaborada pela autora. Nessa figura, as setas representam as referências de chaves estrangeiras. Com isso podemos observar, por exemplo, que o atributo “Cod_Turma” na tabela de ALUNOS é uma chave estrangeira que faz referência ao atributo “Codigo” da tabela TU MAS, onde esse atributo é chave primária. Na tabela de CU SOS há também um atributo “CPF_Coord” que é chave estrangeira que faz referência ao atributo “CPF” da tabela de PROFESSORES, onde este é chave primária, e assim sucessivamente. Formalmente, seja FK (do inglês, Foreing Key) um conjunto de atributos de um esquema de relação R1 definido sobre os mesmos domínios dos atributos da chave primária PK de um outro esquema de relação R3. Então, para qualquer tupla t1 de R1 uma das seguintes situações ocorre: t1[FK] = t2[PK], onde t2 é alguma tupla de R2, ou t1[FK] é nulo. 37 Em outras palavras, essa definição significa que se um atributo é chave estrangeira da chave primária de outra tabela, os valores que este vai poder receber têm que ser os mesmos da sua tabela de origem. Por exemplo, na Figura 3.3 podemos observar que os valores referentes às turmas que os alunos frequentam “Cod_Turma” na tabela de ALUNOS são os mesmos que estão cadastrados no atributo “Codigo” da tabela TU MAS. Não poderia ser colocado no atributo “Cod_Turma” um valor que não fosse uma turma já cadastrada no banco de dados, na tabela de TURMAS. Mas esse valor poderia ser nulo, ou seja, um aluno que não está cadastrado em nenhuma turma. A restrição de integridade referencial entre R1 e R2 pode ser expressa pela notação R1[FK] R2[FK], onde PK é a chave primária de R2 e FK é a chave estrangeira de R1. De acordo com o modelo relacional, as operações de manipulação de dados sobre um banco de dados podem ser classificadas em: operações de recuperação ou consulta (comando SELECT) e operações de atualização, que se referem à inserção, alteração ou remoção dos dados no BD (comandos INSERT, UPDATE, DELETE). As restrições de integridade não podem ser violadas pelas operações de atualização. Ou seja, as atualizações podem ser bloqueadas (ou não ser executadas) ou ser propagadas automaticamente para manter restrições de integridade. Por exemplo, no caso da remoção de tuplas que violem a restrição de integridade referencial. Em outras palavras, quando ocorre em um banco de dados uma restrição de integridade referencial (RIR), que serve para garantir a integridade dos dados quando existem chaves estrangeiras envolvidas, é necessário pensar nas opções que surgirão no caso de remoção ou alteração dos dados envolvidos. Quando um dado envolvido numa RIR é alterado ou removido, se isso não for feito com um certo cuidado, poderia ferir essa restrição. Por exemplo, imagine que a turma “ 5B” deixará de ser ofertada na escola, representada pelo BD da Figura 3.3, o que aconteceria com os alunos dessa turma se simplesmente removêssemos a sua tupla da tabela de TURMAS? As alunas Maria e Bruna, que são dessa turma ficariam com um valor inválido na coluna “Cod_Turma”, pois a sua turma 5B não existiria mais. Isso iria ferir a restrição de integridade referencial. Então, sempre que existe uma RIR: R1[x] R2[y] é necessário definir uma opção de remoção de valores da chave primária, quando esta ocorrer. Ou seja, precisamos dizer ao banco de dados o que fazer com os valores que ainda permanecerão no BD e que se referem aos dados que serão removidos. São três as opções de remoção: Tornar nulo o campo referente na chave estrangeira: se esse atributo que é chave estrangeira não for um atributo obrigatório, ou seja, se ele permitir valores nulos, podemos 38 definir que se a chave primária, a qual esse dado se refere for removida, esse atributo recebe valor nulo; ou Propagar a remoção: se o valor da chave primária que deu origem aos dados da chave estrangeira for removido do BD, automaticamente todas as referências na tabela que contêm a chave estrangeira também são removidas. Essa é uma atitude bastante drástica, utilizada apenas em casos onde a dependência entre valores é muito forte. Esse tipo de remoçãoé conhecido como remoção em cascata (on delete cascade); ou Bloqueio da remoção: essa é a opção mais utilizada por ser a mais segura. Nesse caso, não é permitido excluir itens da chave primária que contêm referências na tabela da chave estrangeira e a remoção é bloqueada. Geralmente, uma mensagem é enviada ao usuário informando que a remoção não foi realizada, pois existem dados referenciados numa chave estrangeira. O usuário primeiro precisaria alterar ou remover os valores da chave estrangeira, para depois remover os valores da chave primária. 3.3. Álgebra Relacional O modelo relacional, como temos estudado, é formalmente baseado na matemática e como tal, deverá conter operadores formais para manipular seus dados. Segundo Elmasri e Navathe (2018), a álgebra relacional é um conjunto de operações básicas usadas para manipular dados nas relações em um BD relacional. As operações da álgebra relacional permitem ao usuário do BD relacional especificar as solicitações básicas de recuperação (ou consulta) dos dados. As operações podem ser usadas isoladamente (são as operações fundamentais) ou podem ser formadas por mais de uma operação fundamental (são as operações derivadas). Na prática, a álgebra relacional não será utilizada diretamente nas aplicações de bancos de dados. Essa matemática é apenas utilizada para formalizar as linguagens de programação em bancos de dados. Ou seja, a SQL, que é a linguagem de programação em bancos de dados relacionais, usa a teoria da álgebra relacional para especificar o comando de recuperação de dados SELECT. Os usuários e programadores utilizarão na prática o comando SELECT e não as operações relacionais, mas é importante ter um conhecimento básico dessa álgebra, para melhor compreensão da linguagem SQL, que será estudada mais adiante. 39 Uma característica importante é que toda operação da álgebra relacional tem como resultado uma relação. Ou seja, sempre que realizamos uma consulta numa ou mais tabelas do BD relacional, o resultado dessa consulta será dado também na forma de uma tabela. As operações da álgebra relacional são geralmente divididas em dois grupos: operações específicas (desenvolvidas apenas para a teoria de banco de dados relacional) ou de conjuntos (aplicada a qualquer tipo de conjunto e leva em conta que uma relação é um conjunto de tuplas). Operações específicas: SELEÇÃO, PROJEÇÃO, JUNÇÃO e DIVISÃO. Operações de conjuntos: UNIÃO, INSERÇÃO, DIFERENÇA e PRODUTO CARTESIANO. Cada uma dessas operações utiliza um símbolo ou uma letra grega para representá-la, conforme veremos a seguir: 1. Operação de seleção (): seleciona um subconjunto de tuplas de uma relação (linhas de uma tabela), que satisfazem uma condição de seleção, expressa no predicado dessa operação. Notação da operação de seleção: CONDIÇÃO (nome da relação) Exemplos usando o banco de dados Escola (Figura 3.2): Selecione as tuplas da relação de ALUNOS que fazem parte da turma “ 5B”. Cod_Turma = “ 5B” ALUNOS Essa operação mostraria como resultado uma nova tabela contendo todos os dados dos alunos que pertencem à turma especificada. Selecione as disciplinas cuja carga horária é menor que 70 horas. CargaHora <70 (DISCIPLINAS) Essa operação mostraria como resultado uma nova tabela contendo todos os dados das disciplinas que possuem carga horária inferior a 70 horas. 2. Operação de projeção (): projeta as tuplas de uma relação sobre um determinado conjunto de atributos (seleciona colunas de uma tabela). Notação da operação de projeção: ATRIBUTOS (nome da relação) Exemplo usando o banco de dados Escola (Figura 3.2): Selecione os dados: nome, e-mail e celular de todos os professores. Nome, Email, Celular (PROFESSORES) 40 Essa operação mostraria como resultado uma nova tabela contendo apenas os três dados selecionados de todos os professores. Operações assim podem ser usadas isoladamente conforme os exemplo apresentados, mas o mais comum é combinar as duas operações para realizar consultas. Primeiro, especificamos as colunas a serem projetadas e depois especificamos a condição da seleção de tuplas. ATRIBUTOS ( CONDIÇÃO (nome da relação)) Exemplo usando o banco de dados Escola (Figura 3.2): Mostre os nomes e e-mails dos alunos da turma “ 7C”. Nome, Email ( Cod_Turma=“ 7C” ALUNOS 3. Sequência de operações: várias operações podem ser combinadas para formar uma expressão da álgebra relacional, que constitui uma consulta. Alternativamente, podemos especificar relações temporárias para cada passo da consulta. Por exemplo: ALUNOS_17C Cod_Turma= “ 7C” ALUNOS RESULT Nome, Email (ALUNOS_17C) Essa sequência de operações apresenta exatamente o mesmo resultado da consulta exemplificada anteriormente, mostrando os nomes e e-mails dos alunos da turma “ 7C”. Porém, nesse segundo caso, temos a formação de uma tabela temporária chamada “ALUNOS_ 7C”, que é utilizada posteriormente na segunda operação da sequência para obtermos o resultado. 4. Operação de Junção (): combina as tuplas de duas relações R e S que satisfazem uma determinada condição de junção. Nesse caso, todas as linhas das tabelas R e S serão combinadas uma a uma, dando como resultado uma nova tabela contendo as informações de ambas combinadas. Notação da operação de junção: (R CONDIÇÃO S). Exemplo usando o banco de dados Escola (Figura 3.2): Mostrar os nomes dos alunos e os números das suas salas de aula. Observe que nesse caso os nomes dos alunos estão presentes na relação ALUNOS e que os números das salas de aula estão presentes na relação de TURMAS. É uma consulta que envolve mais de uma tabela, cuja ligação entre essas 41 tabelas aparece no atributo Cod_Turma da tabela ALUNOS, que é chave estrangeira de Código na tabela de TURMAS. ALUNOS_TURMA (ALUNOS Cod_Turma= Codigo TURMAS) RESULT Nome, Sala (ALUNOS_TURMA) Primeiro, fazemos a junção das duas tabelas envolvidas, selecionando as linhas onde mantemos a igualdade entre os valores de Cod_Turma e Código. Posteriormente, selecionamos apenas os atributos Nome e Sala. Em uma expressão apenas, essa mesma operação ficaria: Nome, Sala ((ALUNOS Cod_Turma= Codigo TURMAS)) 5. Operações de conjuntos: como as relações podem ser consideradas conjuntos de tuplas, todas as operações da teoria de conjuntos podem ser usadas na álgebra relacional. As operações de conjuntos são: UNIÃO – efetua a união de duas relações compatíveis (R S) DIFERENÇA – efetua a diferença entre duas relações compatíveis (R – S) INTERSEÇÃO – efetua a interseção de duas relações compatíveis (R S) Duas relações R (A1, A2,..., An) e S (B1, B2,..., Bn) são compatíveis se elas tiverem o mesmo grau n e se dom(Ai)=dom(Bi) para 1 i n. Em outras palavras, duas tabelas são compatíveis se tiverem a mesma quantidade e os mesmos tipos de dados nos atributos. Por exemplo, se quisermos selecionar os nomes e e-mails de todos os alunos e professores da Escola: DADOS_ALUNOS Nome, Email (ALUNOS) DADOS_PROFS Nome, Email (PROFESSORES) RESULT DADOS_ALUNOS DADOS_PROFS Como na prática a álgebra relacional não é usada diretamente pelos usuários, não vale explorarmos ainda mais esses conceitos. Para os alunos que quiserem aprender mais sobre álgebra relacional, sugerimos a leitura do documento: Operações Relacionais e Álgebra Relacional, de Antônio Cesar de Barros Munari, disponível em: http://www.lyfreitas.com.br/ant/pdf/OpRelacional.pdf. (Acesso em: maio 2019). http://www.lyfreitas.com.br/ant/pdf/OpRelacional.pdf 42 3.4. Construindo um BD Relacional A construção de um banco de dados é realizada por um processo que envolve a análise e projeto de dados conceitual, resultando num modelo conceitual de dados (por exemplo, modelo ER), para posterior fase de projeto físico
Compartilhar