1 Curso: Sistema de Informação Fase: 3 Disciplina: Banco de dados I Professor: Edson Thizon ([email protected]) Nº de créditos: 04 Carga Horária: 68 horas/aula BANCO DE DADOS I 1. Introdução Bancos de dados e tecnologia de banco de dados tem estado presente no dia-a-dia do uso de computadores. Banco de dados desempenha um papel crítico em muitas áreas onde computadores são utilizados, incluindo negócios, engenharia, medicina, educação, etc. O termo ‘banco de dados’ foi definido por diversos autores: WIEDERHOLD Um banco de dados é uma coleção de dados mutuamente relacionados. CHU Um banco de dados é um conjunto de dados relacionados entre si. DATE Um banco de dados é uma coleção de dados operacionais armazenados usados pelos sistemas de uma determinada aplicação. KORTH Um banco de dados é uma coleção de dados que contém informação de um particular empreendimento. ELMASRI & NAVATHE Um banco de dados é uma coleção de dados relacionados. ENGLES Um banco de dados é uma coleção de dados operacionais usados pelo sistema de aplicações de uma empresa. O termo ‘dado’ denota um fato que pode ser registrado e que possui significado implícito. Por exemplo, considere os nomes, telefones e endereços de todas as pessoas que você conhece. A definição de banco de dados como ‘uma coleção de dados relacionados’ é geral; por exemplo, considere a coleção de palavras deste texto como sendo dados relacionados e, portanto, constitui um banco de dados. Entretanto, o uso comum do termo ‘banco de dados’ é usualmente mais restrito. Um banco de dados possui as seguintes propriedades implícitas: • Um banco de dados é uma coleção logicamente coerente de dados com algum significado inerente; um arranjo aleatório de dados não pode ser considerado um banco de dados. • Um banco de dados é projetado e construído com dados para um propósito específico. Ele possui um grupo de usuários e algumas aplicações pré-concebidas, as quais esses usuários estão interessados. • Um banco de dados representa algum aspecto do mundo real; alteração neste mundo real são refletidas no banco de dados. Em outras palavras: um banco de dados tem alguma fonte na qual os dados são derivados, alguma taxa de interação com eventos do mundo real, e uma audiência que está ativamente interessada em seu conteúdo. Um banco de dados pode ser de qualquer tamanho e variar de complexidade. Por exemplo, a lista de nomes, endereços e telefones de uso pessoal pode ter dezenas de registros e possui 2 uma estrutura simples. Por outro lado, o catálogo de livros de uma grande biblioteca pública pode ter milhares (ou milhões) de registros, classificados e caracterizados com dados de autor (primeiro e último nomes), título, editora, data de publicação, edição, etc. Um banco de dados pode ser gerado e mantido manualmente ou por máquina. O fichário de uma biblioteca é um exemplo de banco de dados criado e mantido manualmente. Um banco de dados computadorizado pode ser criado e mantido por: • um grupo de programas especialmente escrito para essa tarefa; ou • um sistema de gerenciador de banco de dados. Um Sistema Gerenciador de Banco de Dados (SGBD) é uma coleção de programas que habilitam usuários para criar e manter um banco de dados. O SGBD é um software de propósito geral que facilita o processo de definição, construção e manipulação de bancos de dados. Definição de banco de dados envolve especificar tipos de dados para serem gravados no banco de dados, com uma descrição detalhada de cada tipo de dado. Construção de um banco de dados é o processo de gravar inicialmente dados no banco de dados. Manipulação de um banco de dados inclui funções como consulta por dados específicos e atualização para refletir alterações no mundo real. A figura 1 denota o conceito de sistema de banco de dados, que consiste na composição de banco de dados e software. Usuários Sistema de Banco de Dados Programas ORACLE, SQL SERVER, INFORMIX, SYBASE, ... SGBD • BD gravado • Definição do BD gravada (Meta-dados) Figura 1 – Um simplificado ambiente de sistema de banco de dados. 3 2. Abordagem Tradicional de Arquivos e Abordagem de BD Várias características distingue a abordagem de banco de dados da abordagem tradicional de arquivos. Na abordagem tradicional de arquivos (ou processamento tradicional de arquivos) cada usuário define e implementa os arquivos necessários para uma específica aplicação. Por exemplo, em uma universidade um usuário precisa manter arquivos de alunos e seu controle acadêmico; programas são utilizados para imprimir histórico acadêmico e fazer registro de novas notas. Um segundo usuário do departamento financeiro mantém arquivos de alunos e seus registros de pagamento. Embora ambos os usuários esteja interessados em dados sobre estudantes, cada usuário mantém seus próprios arquivos e programas que acessam tais arquivos. Essa redundância na definição e armazenamento de dados resulta em espaço de armazenamento perdido e esforço adicional para manter dados comuns atualizados. Na abordagem de banco de dados, um único repositório de dados é mantido, o qual é definido uma vez e então acessado por vários usuários. 2.1 Natureza Auto-contida de um Sistema de BD A característica fundamental da abordagem de banco de dados é que o sistema de banco de dados contém não somente a banco de dados propriamente dito, mas também uma completa definição ou descrição do banco de dados. Essa definição é gravada no catálogo do sistema, que contém informação como estrutura de cada arquivo, o tipo e formato de armazenamento de item de dado, e várias restrições dos dados. A informação gravada no catálogo é chamada de meta-dados, conforme apresentado na figura 1. O catálogo é usado pelo SGBD e ocasionalmente pelos usuários do banco de dados que necessitam de informação sobre a estrutura do banco de dados. O software SGBD não é escrito para qualquer aplicação de banco de dados específica e, portanto, deve utilizar o catálogo para conhecer a estrutura de arquivos em um banco de dados particular, como tipo e formato dos dados que ele irá acessar. O software SGBD deve trabalhar uniformemente com qualquer número de aplicações de banco de dados – por exemplo, banco de dados de universidade, instituição bancária, etc – sempre utilizando a definição banco de dados gravada no catálogo. No processamento tradicional de arquivos, a definição de dados é tipicamente parte integrante dos programas de aplicação. Portanto, esses programas são restritos para trabalhar com somente um banco de dados específico, cuja estrutura é declarada nos programas de aplicação. Por exemplo, um programa PASCAL possui variáveis de arquivo declaradas nele; um programa PL/I possui estruturas de arquivo especificadas através de instruções DCL; um programa COBOL possui instruções na Data Division que define seus arquivos. Enquanto o software de processamento de arquivos pode acessar somente um banco de dados específico, o software SGBD pode acessar muitos bancos de dados distintos, extraindo do catálogo as definições do banco de dados e usando tais definições para corretamente acessar qualquer banco de dados. Em um banco de dados de uma universidade, uma solicitação pelo ‘endereço do aluno cuja matrícula é 123’ resulta no acesso ao arquivo de alunos. O SGBD necessita saber a estrutura do arquivo de alunos, bem como a posição do endereço dentro de cada registro do arquivo; com base na descrição de dados presente do banco de dados, o SGBD poderá acessar dados para consultar ou atualizar endereço de aluno. Por outro lado, na abordagem tradicional de arquivos a estrutura de arquivo com os dados descritivos de ‘endereço de aluno’ estão codificados dentro dos programas que acessam o arquivo. 4 2.2 Isolamento entre Programas e Dados Na abordagem tradicional de arquivos, a estrutura de arquivos de dados está embutida nos programas, de modo que alterações na estrutura de um arquivo poderá requerer a modificação de todos os programas que acessam tal arquivo. Por outro lado, programas que interagem com o SGBD são escritos independentemente de qualquer arquivo. A estrutura dos arquivos de dados é gravada no catálogo de dados separadamente dos programas de acesso. Esta propriedade é tipicamente chamada de independência programa-dados. Se um novo dado é necessário para a descrição de um aluno, por exemplo data de nascimento, tal dado deve ser incluído em cada registro do arquivo de alunos, o que resulta na alteração do registro. Neste caso, o catálogo de dados será modificado para refletir a nova estrutura de registro. Na abordagem de banco de dados, os programas referenciam os dados através de seus nomes, sendo desnecessário alterar os programas que acessam o arquivo de alunos, visto que o nome de cada um dos demais dados permanece inalterado. 2.3 Suporte a Múltiplas Visões dos Dados Um banco de dados tipicamente tem muitos usuários, onde cada qual pode requerer um diferente perspectiva ou visão dos dados. Uma visão pode ser um subconjunto de um banco de dados ou pode conter dados virtuais que são derivados do banco de dados, mas não estão explicitamente gravados. Um SGBD deve fornecer facilidades para a definição de múltiplas visões. Por exemplo, um usuário pode estar interessado no histórico de notas de alunos; um outro usuário é responsável pelo controle de pagamentos efetuados pelos alunos. 3. Pessoas Envolvidas no Dia-a-dia de um Grande Banco de Dados Em um pequeno banco de dados de uso pessoal, uma única pessoa tipicamente irá definir, construir e manipular o banco de dados. Por outro lado, em um grande banco de dados com milhares (ou milhões) de usuários e com restrições no tempo de acesso podem-se identificar alguns papéis para pessoas que interagem com banco de dados. 3.1 Administrador de Banco de Dados (DBA) Em uma organização onde muitas pessoas utilizam os mesmos recursos, existe a necessidade de um administrador para gerenciar esses recursos. Em ambiente de banco de dados, o recurso primário é o banco de dados propriamente dito e recurso secundário é o SGBD, ambos sobre a supervisão do administrador de banco de dados (DBA). O DBA é responsável pela autorização de acesso ao banco de dados e pela monitoração e coordenação de seu uso, e está estando envolvido com aspectos físicos do banco de dados (estruturas de armazenamento, métodos de acesso, etc). 3.2 Projetistas de Banco de Dados Projetistas de banco de dados são responsáveis pela identificação dos dados para o banco de dados e pela escolha de estruturas apropriadas para representar e gravar tais dados. Essas tarefas são executadas antes da implementação do banco de dados. É necessária uma comunicação com os usuários do banco de dados para entender seus requisitos, de modo que o projeto possa atendê-los. A visão de cada grupo de usuários deve ser entendida e o projeto final deverá suportar os requisitos de todos os grupos de usuários. 3.3 Usuário Final Usuário final é a pessoa cujo trabalho requer acessar o banco de dados para consulta e atualização de dados; um banco de dados existe primariamente para seu uso. 5 A maioria dos usuários finais utilizam programas voltados ao desempenho de suas funções profissionais, interagindo com tais programas em seu dia-a-dia; nesta classe, pode-se citar caixa bancário, caixa de supermercado, agente de turismo, vendedores de varejo, etc. Alguns usuários mais sofisticados, como engenheiros e cientistas, estão mais familiarizados com as facilidades de um SGBD e são capazes de utilizar ferramentas para elaborar suas consultas. 3.4 Analista de Sistemas e Programador de Aplicações Analistas de sistemas determinam os requisitos dos usuários, e desenvolve especificações que atendam tais requisitos. Programadores de aplicações implementam essas especificações na forma de programas, efetuando teste, depuração e manutenção, bem como elaborando documentação. 6 Sistema Gerenciador de Banco de Dados SGBD Um SGBD é uma coleção de programas que habilitam os usuários a criar e manter um banco de dados. 1. Características de um SGBD Diversos elementos caracterizam um SGBD; alguns SGBDs incorporam parte desses elementos e bom SGBD deveria incluir todos os elementos. 1.1 Controle de Redundância Na abordagem tradicional de arquivos, cada grupo de usuários mantém seus próprios arquivos. Por exemplo, em uma universidade dois grupos de usuários estão interessados no controle acadêmico e no controle financeiro, respectivamente. Cada grupo mantém independentemente arquivos de alunos: o primeiro com dados de grade curricular e histórico de disciplinas cursadas; o segundo com registros de ocorrências de pagamentos efetuados. Vários dados estarão gravados duas vezes, visto que ambos os grupos de usuários necessitam de informações comuns. Outros grupos de usuários podem também necessitar de dados de alunos, o que potencialmente resultará em nova redundância. A redundância no armazenamento do mesmo dado diversas vezes conduz a vários problemas. Primeiro, existe uma necessidade de realizar uma única atualização lógica – como inserir um novo aluno – várias vezes: uma vez para cada arquivo onde existem alunos registrados. Isto conduz à duplicação de esforço. Segundo, espaço de armazenamento é perdido devido à gravação do mesmo dado repetidamente, que pode ser um sério problema em grandes banco de dados. Um terceiro e mais sério problema é que arquivos que representam os mesmos dados podem tornar-se inconsistentes. Isto pode acontecer quando uma atualização é aplicada para alguns dos arquivos, mas não todos; atualizações são aplicadas independentemente por cada grupo de usuários. Na abordagem de banco de dados, integram-se as visões de diferentes grupos de usuários durante o projeto de banco de dados. Para favorecer a consistência de dados, poderia se ter um projeto de banco de dados onde cada item de dado lógico – como nome de aluno ou data de nascimento – estaria em um único local no banco de dados. Tal situação evita inconsistência e economiza espaço de armazenamento. Em alguns casos, redundância controlada pode ser útil. Por exemplo, pode ser mais conveniente que o nome de aluno esteja no arquivo de histórico de disciplinas cursadas, além de já estar no arquivo de alunos. Esta decisão pode ter sido motivada devido um grande volume de consultas sobre histórico acadêmico; se todos os dados solicitados estiverem em um único arquivo, a operação torna-se mais rápida, pois não é necessário buscar dados em diversos arquivos. Alguns SGBDs possuem a capacidade de controlar essa redundância, proibindo inconsistências associadas aos arquivos. No exemplo, caso seja necessário alterar o nome de aluno no arquivo de alunos, o SGBD terá a responsabilidade de atualizar as demais cópias deste item de dado lógico. 1.2 Compartilhamento de Dados Um SGBD pode permitir que diversos usuários acessem um banco de dados simultaneamente; isto é essencial se dados de diversas aplicações são integrados e mantidos em um único banco de dados. Um SGBD deve incluir software de controle de concorrência para garantir uma atualização controlada quando diversos usuários tentam atualizar o mesmo dado, resultando em atualizações corretas. Um exemplo ocorre em um sistema de reservas de passagens aéreas; o SGBD deve garantir que um assento seja reservado para um único passageiro. Outro mecanismo que suporta a noção de dados 7 compartilhado é a facilidade para definição de visão do usuário, que é usada para especificar a porção de um banco de dados que é de interesse para um particular grupo de usuários. 1.3 Restrição de Acesso não Autorizado Quando múltiplos usuários compartilham um banco de dados, é provável que alguns usuários não estejam autorizados para acessar toda informação em um banco de dados. Por exemplo, dados financeiros são freqüentemente considerados confidenciais, e portanto somente pessoas autorizadas podem ter permissão de acesso a tais dados. Em adição, alguns usuários possuem permissão apenas para consultar dados, enquanto outros possuem permissão para consultar e atualizar dados. Portanto, o tipo de operação de acesso – consulta ou atualização – também pode ser controlado. Tipicamente, usuários ou grupos de usuários possuem contas de acesso protegidas por senha, as quais são utilizadas para se obter acesso para o banco de dados. Um SGBD deveria fornecer um subsistema de segurança e autorização, que poderia ser utilizado pelo DBA para criar contas e especificar restrições de acesso; o SGBD forçaria essas restrições automaticamente. Controle similar pode ser aplicado ao próprio SGBD; por exemplo, somente usuários do tipo DBA poderiam ter privilégios para criar novas contas de usuário. 1.4 Fornecimento de Múltiplas Interfaces Muitos tipos de usuários, com diversos níveis de conhecimento técnico, usam um banco de dados; um SGBD poderia fornecer uma variedade de interfaces de usuário. Os tipos de interface incluem linguagens de consulta para usuários casuais, interfaces de linguagem de programação para programadores de aplicação, formulários e interfaces dirigidas por menu para outros tipos de usuários. 1.5 Forçar Restrições de Integridade Muitas aplicações possuem restrições de integridade (regras) associadas aos dados. O mais simples tipo de restrição de integridade para um item de dado é o tipo de dado. Por exemplo, a matricula de aluno deve ser um valor inteiro de 6 posições; o nome de aluno deve ser uma cadeia de caracteres com no máximo 30 caracteres. Muitos SGBDs possuem a facilidade para definir tipos de dado em adição aos tipos de dado básicos. Existem muitos tipos de restrições. Um tipo de restrição que ocorre freqüentemente é especificar que um registro de um arquivo deve estar relacionado a registros de outros arquivos; por exemplo, todo registro do arquivo de histórico de disciplinas cursadas deve estar relacionado com um registro do arquivo de aluno. Outro tipo de restrição especifica a unicidade de dados, como cada aludo deve ter uma matrícula distinta. Essas restrições são resultado da semântica dos dados associado ao mundo real que ele representa. É de responsabilidade do projetista do banco de dados especificar restrições de integridade durante o projeto de banco de dados. Vale ressaltar que um item de dados pode ser entrado erroneamente, mas ainda satisfazer as restrições especificadas. Por exemplo, em dados errados do tipo ‘o telefone de um aluno possui valor incorreto’ (provavelmente devido a erro de digitação) não pode ser detectado pelo SGBD. 1.6 Backup e Recovery Um SGBD deve fornecer facilidades para recuperação em caso de falhas de hardware e software. Por exemplo, se o computador falha no meio de um complexa transação de atualização, o SGBD deve garantir que o banco de dados será restaurado ao seu estado antes do início da transação. 8 1.7 Vantagens Adicionais da Abordagem de Banco de Dados DESENVOLVIMENTO DE PADRÕES A abordagem de banco de dados permite o DBA definir e forçar padrões, como nomes e formatos de elementos de dados, terminologia, etc. Isso facilita a comunicação e cooperação entre departamentos, projetos e usuários dentro de uma organização. FLEXIBILIDADE Pode ser necessário alterar a estrutura de um banco de dados através da adição de informação que não está correntemente no banco de dados. Um SGBD deve permitir tais alterações sem afetar muitos dos programas de aplicação existentes. TEMPO DE DESENVOLVIMENTO REDUZIDO Projetar e implementar uma nova aplicação a partir de um banco de dados existente é uma tarefa que leva menos tempo que se um banco de dados ainda não existisse. A abordagem de banco de dados permite a criação de novas aplicações em um tempo inferior que na abordagem tradicional de arquivos. DISPONIBILIDADE DE INFORMAÇÃO ATUALIZADA Um SGBD torna o banco de dados disponível para todos os usuários. Essa disponibilidade é essencial para muitas aplicações, como reservas de passagens aéreas e instituições bancárias. Isto é possível devido ao controle de concorrência e recuperação do SGBD. 1.8 Quando não Usar um SGBD Existem situações onde o uso de um SGBD pode ser um custo desnecessário comparado com o processamento tradicional de arquivos: • Alto investimento inicial com software e, possivelmente, com hardware. • Overhead de segurança, controle de concorrências, recuperação e funções de integridade (aplicações em tempo-real). • O banco de dados e aplicações são simples e bem definidas, não se esperando muitas alterações. • Múltiplos acessos não são necessários. 2. Modelos de Dados, Esquemas e Instâncias Uma característica fundamental da abordagem de banco de dados é a abstração de dados. O conceito de abstração está associado à característica de se observar somente os aspectos de interesse, sem se preocupar com maiores detalhes envolvidos. No contexto de abstração de dados, por exemplo, um banco de dados pode ser visto sem se considerar a forma como os dados estão armazenados fisicamente. Exemplos de Abstração em um Banco de Dados Um usuário que deseja consultar um banco de dados não necessita se importar com dados que não estão associados ao seu dia-a-dia (se ele é do departamento de engenharia, não deve ter acesso aos dados de folha de pagamento); um programador de aplicação não precisa se importar com aspectos físicos de armazenamento (quais os arquivos que armazenam o banco de dados); um administrador de banco de dados deve saber detalhes físicos do banco de dados para realizar ajustes que poderão resultar em melhoria de performance. A finalidade de um sistema de banco de dados é simplificar e facilitar o acessos aos dados. Visões do usuário de alto-nível ajuda-nos a atingir isto. Os usuários do sistema não devem preocupar-se desnecessariamente com os detalhes físicos de implementação do sistema. Contudo, o fator principal da satisfação de um usuário com um sistema de banco de dados é o seu desempenho. Se o tempo de resposta a uma solicitação é muito longo, o valor do sistema é diminuído. O desempenho de um sistema depende da eficiência das estruturas de dados usadas para representar os dados no banco de dados, e quão eficientemente o sistema é capaz de operar essas estruturas de dados. 9 Um modelo de dados é a principal ferramenta no fornecimento dessa abstração. Um modelo de dados é um conjunto de conceitos que podem ser usados para descrever a estrutura de um banco de dados. Estrutura de banco de dados denota tipos de dados, relacionamentos e restrições associadas aos dados. Alguns modelos de banco de dados incluem um conjunto de operações para consultas e atualizações no banco de dados. 2.1 Categorias de Modelos de Dados Pode-se caracterizar um modelo de dados baseado nos tipos de conceitos que eles fornecem para descrever a estrutura de banco de dados. Modelo de dados conceitual ou de alto-nível fornece conceitos que são próximos da percepção dos usuários a respeito dos dados. Modelo de dados de baixo-nível ou físico fornece conceitos que descrevem os detalhes de como os dados são armazenados. Conceitos fornecidos por modelos de baixo-nível são geralmente significantes para profissionais de informática, não sendo úteis aos usuários finais. Entre estes dois extremos está uma classe de modelo de dados de implementação, que fornece conceitos que podem ser entendidos pelos usuários finais, mas não está longe da forma como os dados poderiam ser organizados. Modelo de dados de alto-nível usa conceitos como entidades, atributos e relacionamentos. Uma entidade é um objeto que pode ser representado no banco de dados. Um atributo é uma propriedade que descreve algum aspecto de um objeto. Relacionamentos entre objetos podem ser facilmente representados. O mais popular modelo de dados de alto-nível é o modelo Entidade Relacionamento. Modelo de dados de implementação é freqüentemente utilizado em SGBDs comerciais, sendo o mais popular denominado modelo Relacional. Modelo de dados físico descreve como os dados são armazenados; por exemplo, formato de registro, ordenação de registro, caminho de acesso, etc. Um caminho de acesso busca agilizar pesquisas particulares por registros. 2.2 Esquemas e Instâncias Em qualquer modelo de dados é importante distinguir entre descrição do banco de dados e o banco de dados propriamente dito. A descrição de um banco de dados é chamada de esquema de banco de dados. Um esquema de banco de dados é especificado durante o projeto do banco de dados e não é freqüentemente modificado. Alguns modelos de dados possuem certa notação gráfica para representar esquemas de banco de dados; tal notação é chamada diagrama de esquema. A figura 1 exemplifica um diagrama de esquema, especificando a estrutura de cada arquivo; os registros correntes não são representados. ALUNO Matrícula Nome Sexo DataNasc DISCIPLINA NumDisc NomeDisc Créditos PRÉ-REQUISITO NumDisc NumDisc PreReq TURMA CodTurma NumDisc Semestre Ano Professor HISTÓRICO Matrícula CodTurma Nota Figura 1 – Exemplo de diagrama de esquema. Um diagrama de esquema apresenta somente alguns aspectos de um esquema, como nome de arquivo, itens de dados e alguns tipos de restrição. Outros aspectos não são especificados no diagrama de esquema; por exemplo, a figura 1 não exibe o tipo de dado de cada item de dado, nem os relacionamentos associando os vários arquivos. Muitos tipos de restrição não são representadas em 10 diagramas de esquema; uma restrição como ‘um aluno reprovado por mais de uma vez na disciplina INF352 deverá obrigatoriamente cursar a disciplina INF001’ é difícil de representar. Os dados reais no banco de dados podem alterar com freqüência; por exemplo, o banco de dados da figura 1 altera cada vez que um novo aluno é adicionado ou cada disciplina cursada. Os dados em um banco de dados em um particular momento é denominado instância do banco de dados (ou estado do banco de dados). Muitas instâncias de banco de dados podem corresponder a um particular esquema de banco de dados. Cada vez que um registro é inserido ou excluído, ou se altera o valor de um item de dados, uma instância do banco de dados é alterada, tornando-se uma nova instância. A distinção entre esquema do banco de dados e instância do banco de dados é muito importante. Quando se define um novo banco de dados, somente o seu esquema de banco de dados é especificado para o SGBD. Nesse ponto, a instância correspondente do banco de dados é a ‘instância vazia’, sem dados. A instância inicial do banco de dados é alcançada quando os dados são inicialmente carregados. A partir desse ponto, cada vez que uma operação de atualização é aplicada no banco de dados, uma nova instância do banco de dados é caracterizada. O SGBD é parcialmente responsável pela garantia de que cada instância do banco de dados satisfaça a estrutura e as restrições especificadas no esquema. Portanto, especificar um correto esquema para o banco de dados é extremamente importante, devendo ser projetado com muito cuidado. O esquema do banco de dados é gravado pelo SGBD, de modo que possa ser referenciado sempre que necessário. 3. Arquitetura de SGBD Três características importantes da abordagem de banco de dados são: isolamento entre dados e programas, suporte a múltiplas visões do usuário e uso de um catálogo para gravar a descrição do banco de dados (esquema). A figura 2 ilustra uma arquitetura em níveis: USUÁRIOS FINAIS Nível Externo Nível Nível Interno VISÃO EXTERNA VISÃO EXTERNA ESQUEMA CONCEITUAL ESQUEMA INTERNO BANCO DE DADOS ARMAZENADO Figura 2 – Arquitetura de SGBD em níveis. 11 O nível interno tem um esquema interno, que descreve a estrutura de armazenamento físico, do banco de dados. O esquema interno usa um modelo de dados físico e descreve detalhes de armazenamento de dados e caminhos de acesso para o banco de dados. O nível conceitual tem um esquema conceitual, que descreve o banco de dados para a comunidade de usuários. O esquema conceitual é a descrição global do banco de dados que esconde os detalhes da estrutura física de armazenamento e concentra-se em descrever entidades, tipos de dados, relacionamentos e restrições. Um modelo de dados de alto-nível ou um modelo de dados de implementação podem ser usados neste nível. O nível externo ou visão inclui um número de esquemas externos ou visões do usuário. Cada esquema externo envolve a visão do banco de dados de um grupo de usuários do banco de dados. Cada visão tipicamente descreve a parte do banco de dados que um particular grupo de usuários está interessada e esconde o resto do banco de dados daquele grupo. Um modelo de dados de alto nível ou um modelo de dados de implementação podem ser usados neste nível. 4. Independência de Dados A arquitetura em 3 níveis pode ser usada para esclarecer o conceito de independência de dados, que pode ser definida como a capacidade de alterar o esquema em um nível sem alterar o esquema do nível imediatamente superior. Apresentam-se 2 níveis de independ6encia de dados: 4.1 Independência de Dados Lógica É a capacidade de alterar o esquema conceitual sem alterar o esquema externo ou programas de aplicação. Pode-se alterar o esquema conceitual pela adição de um novo tipo de registro ou item de dado, pela remoção de um tipo de registro ou item de dado. No último caso, esquemas externos que referem-se aos dados restantes não seriam afetados. 4.2 Independência de Dados Física É a capacidade de alterar o esquema interno sem alterar os esquema conceitual. Alterações no esquema interno podem ser necessárias pois alguns arquivos físicos são reorganizados – por exemplo, pela criação de estruturas de acesso adicionais – para melhorar a performance de consulta ou atualização. 12 Modelagem de Dados Conceitual (Modelo ER) Modelagem de Dados Conceitual é o primeiro passo para o desenvolvimento de um sistema em ambiente de banco de dados. Este processo se desenvolve no fase denominada de analise no ciclo de desenvolvimento. Informações requeridas do negócio Estratégia Análise MODELAGEM DE DADOS CONCEITUAL Modelo de dados Entidade relacionamento Definições de entidade Projeto Construção PROJETO DO BANCO DE DADOS Definiçoes de tabelas, indexes CONSTRUÇÃO DO BANCO DE DADOS Banco de Dados Operacional A meta da Modelagem de Dados Conceitual é desenvolver um modelo entidade-relacionamento que representa as informações requeridas dos negócios. Exemplo A seguinte modelo entidade-relacionamento representa a informação requerida do Departamento de Recursos Humanos. Componentes do Modelo Entidade-Relacionamento • Entidades - os objetos de significância sobre os quais as informações necessitam ser mantidas. • Relacionamentos - como os objetos de significância são relacionados. • Atributos - a informação específica a qual necessita ser mantida. 13 O Modelo Entidade-Relacionamento é um meio efetivo para coleta e documentação das informações requeridas de uma organização. • • • • • Com o documento modelo E-R os requisitos de informação organizacionais são claros e com formato preciso. Usuários podem facilmente entender a forma gráfica do modelo E-R. Modelo E-R pode ser facilmente desenvolvido e refinado. Modelo E-R fornece uma clara figura do escopo dos requisitos de informação. Modelo E-R fornece uma estrutura para integração de múltiplas aplicações, projetos de desenvolvimento, ou pacotes de aplicação. Nota Rápida • Tenha certeza do completo estabelecimento dos requisitos de informações organizacionais durante o estágio de modelagem de dados conceitual. Mudanças nos requisitos durante estágios posteriores do ciclo de vida, pode ser extremamente caro. A Modelagem de Dados Conceitual é independente do hardware ou software a ser usado na implementação. O Modelo E-R pode mapear um banco de dados hierárquico, de rede ou relacional. MODELO ENTI DADE RELAÇÃO I TEM DO CONTRATO PARA PRODUTO MOSTRAR NO J UNTO FEI TO EM CI MA CONTRATO BANCO DE DADOS HI ERÁRQUI CO BANCO DE DADOS DE REDE CONTRATO CONTRATO I TEM 1 PRODUTO X I TEM 2 PRODUTO Y PRODUTO X PRODUTO Y I TEM 1 BANCO DE DADOS RELACI ONAL PRODUTO CONTRATO CÓD. DATA CLI ENTE CÓD. DESCRI ÇÃO I TEM CONTRAT. NÚM. QUANT. PRODUTO I TEM 2 14 ENTIDADES Entidade é alguma coisa (objeto significante) sobre a qual a informação precisa ser mantida. conhecida ou Outras definições de Entidade: • • • Um objeto de interesse de negócios. Uma entidade é uma classe ou categoria de alguma coisa Uma entidade é a nomeação de algo. Exemplos Os seguintes podem ser objetos de significância sobre o qual a companhia (empresa) precisa manter a informações: EMPREGADO DEPARTAMENTO PROJETO - Atributos descrevem entidades e são as partes específicas da informação as quais precisam ser conhecidas. Exemplos Os possíveis atributos para entidade EMPREGADO são: número, nome, data de nascimento e salário. Os possíveis atributos para entidade departamento são: nome, número e localização. Nota Rápida • Uma entidade deve ter atributos que necessitam ser conhecidos do ponto de vista dos negócios ou então não é uma entidade no escopo dos requisitos do negócio. Convenções da Diagramação de Entidades • • • • • Box arredondado (soft box) de qualquer tamanho O nome da entidade deve ser singular e único Nome da entidade no topo Opcional: nome sinônimo que deve ser representado entre parênteses Os nomes dos atributos logo abaixo Exemplos 15 Notas rápidas • O sinônimo é um nome alternativo para a entidade. • Os sinônimos são muito utilizados quando dois grupos de usuários têm diferentes nomes para o mesmo objeto significante. - Cada entidade deve ter vários instâncias ou ocorrências. Exemplos A entidade EMPREGADO tem uma instância para cada empregado no negócio: João Alves, Maria do Carmo e Egberto da Silva são todos os instâncias da entidade EMPREGADO. A entidade DEPARTAMENTO tem um instância para cada departamento na companhia: Departamento Financeiro, Departamento de vendas e o Departamento de Desenvolvimento são todos os instâncias da entidade DEPARTAMENTO. Cada instância da entidade tem específicos valores para seus atributos. Exemplo A entidade EMPREGADO tem atributos de nome, número, data de nascimento e salário. A instância João Alves tem os seguintes valores: nome João Alves, número: 1322, data de nascimento 15-mar-50 e o salário de R$1000. Notas Rápidas • Instâncias são as vezes confundidos com entidades. • A entidade é uma classe ou categoria da coisa. ex.: EMPREGADO. • A instância é uma coisa específica. ex.: o empregado João Alves. - Cada instância deve ser unicamente identificável em relação aos outros instâncias de mesma entidade. Um atributo ou um grupo de atributos que unicamente identificam uma entidade é chamado Identificador Único (Unique Identifier - UID). Exemplo Cada empregado tem um único número. Número é um candidato para único identificador para a entidade EMPREGADO. Procurar atributos que unicamente identificam uma entidade. Exemplo Que atributos poderiam unicamente identificar as seguintes entidades? 16 Notas Rápidas • Se uma entidade não pode ser unicamente identificada, isso não poderia ser uma entidade. • Atributos que unicamente identificam uma entidade e são parte do único identificador (UID) da entidade são marcados com #. IDENTIFICAR E MODELAR ENTIDADES Siga os passos abaixo para identificar e modelar entidades a partir de um conjunto de notas de uma entrevista. 1. 2. 3. 4. 5. 6. Examine os substantivos. Eles são objetos significantes? Nomeie cada entidade. Existe alguma informação ou interesse sobre a entidade que o negócio (empresa) precisa manter? Cada instância da entidade é unicamente identificável? Qual atributo ou atributos poderiam servir como um UID? Faça uma descrição disso: “Um empregado tem a importância de um assalariado da companhia. Por exemplo, Egberto da Silva e Maria do Carmo são EMPREGADOS.” Diagrame cada entidade e alguns de seus atributos. Nota Rápida • Não se precipite desqualificando um candidato entidade. Atributos adicionais de interesse da companhia poderiam ser expostos mais tarde. EXERCÍCIOS 1) Identificar e modelar as entidades a partir das seguintes informações: “Eu sou gerente de uma companhia de treinamento que oferece cursos de caráter técnico. Lecionamos vários cursos, cada qual tem um código, um nome, e preço. Introdução ao Unix e Programação C são dois de nossos mais populares cursos. Os cursos variam, em termos de duração, de um a quatro dias. Um professor (instrutor) pode lecionar vários cursos. Egberto Silva e Maria do Carmo são dois de nossos melhores instrutores, nós mantemos o nome e o telefone de cada um deles. Cada curso é lecionado por somente um instrutor. Nós criamos um curso e então nomeamos o professor. Os estudantes podem frequentar vários cursos ao mesmo tempo. João fez todos os cursos que fornecemos. Nós também mantemos nome, fone e endereço dos estudantes. Alguns estudantes e instrutores não têm telefone.” Descrições da Entidade • CURSO tem a importância de um serviço de treinamento oferecido pela companhia. Por exemplo, Introdução ao Unix e Programção em C . • ALUNO tem a importância de um participante em um ou mais CURSOs. Por exemplo João Alves. • O PROFESSOR tem a importância de instrutor em um ou mais CURSOs. Por exemplo, Rita Poks e Laertes Ferreira. 2) Identificar e modelar a entidades para o seguinte conjunto de informações. Escreva uma rápida descrição de dada entidade, mostrando pelo menos dois atributos para cada uma delas: “Sou proprietário de um a pequena loja de vídeo. Temos mais de 3000 fitas aqui e queremos um sistema para controla-las. Cada fita contem um número. Para cada filme precisamos saber seu título e 17 categoria(comédia, suspense, terror, etc.). Muitos de nosso filmes tem mais de uma cópia. A cada filme fornecemos um ID e então controlamos qual o filme que uma fita contem. O formato de uma fita pode ser BETA ou VHS. Sempre temo uma fita para dado filme, e cada fita tem apenas um filme. Não temos aqui nenhum filme que requeira mais de uma fita. Freqüentemente as pessoas alugam filmes pelos atores. Queremos manter informações sobre os astros que atuam em nosso filmes. Nem todos os filmes são estrelados por astros e só mantemos aqui astros que atuam em filmes do nosso catalogo. Os clientes gostam de saber a data de nascimento de um astro, bem como o seu verdadeiro nome. Temos muitos clientes. Apenas alugamos filmes para pessoas inscritas em nosso vídeo clube. Para cada membro mantemos seu primeiro e ultimo nome telefone e endereço. Claro que cada membro possui um numero de titulo. Alem disso mantemos o status de credito de cada um. Queremos controlar os alugueis de filmes. Um cliente pode alugar vários filmes ao mesmo tempo. Apenas mantemos os alugueis correntes(pendentes). Não controlamos o histórico de locações.” 18 RELACIONAMENTOS O relacionamento é a associação bi-direcional, significante entre duas entidades, ou entre a entidade e ela mesma. Syntax Cada entidade1 { deve ser} NOME DO RELACIONAMENTO {um ou mais} {ou pode ser } {ou um único} Exemplo O relacionamento entre o instrutor e o curso é: Cada CURSO pode ser lecionado por um e somente um PROFESSOR. Cada PROFESSOR pode ser alocado para lecionar um ou mais CURSOs. Cada direção da conexão tem: • um nome --- lecionado por ou alocado para. • uma opção --- deve ser ou pode ser ,um ou outro. • um grau --- um e somente um ou um ou mais . Diagramando Convenções • Uma linha entre duas entidades • Nome das conexões localizados abaixo dos soft box • Opcional opcional (pode ser) obrigatório(deve ser) • Grau um ou mais um e somente um um opcion al obr igatór io m uitos (pé de galin ha) entidade2 19 Primeiro leia o relacionamento em uma direção, e então leia o relacionamento no outro sentido. Exemplo Leia o relacionamento entre EMPREGADO e DEPARTAMENTO. EM PREGA DO DEPA RTA M EN TO d esi g n ado a r esp on sável p or Leia essa relação primeiro da esquerda para direita, e então no outro sentido. Relacionamento esquerda para direita (diagrama parcial) EM PREGA D O D EPA RTA M EN TO d esi g n ad o a Cada EMPREGADO deve ser designado para um e somente um DEPARTAMENTO. Relacionamento da direita para a esquerda(diagrama parcial) EM PREGA D O D EPA RTA M EN TO r esp o n sáv el por Cada DEPARTAMENTO pode ser responsável por um mais EMPREGADOs. Exemplo Leia o relacionamento ALUNO e CURSO. AL UNO CURSO matriculado em Ministrado para Cada ALUNO pode se matricular em um mais CURSOs. Cada CURSO pode ser ministrado para um ou mais ALUNOs. Exemplo Leia a relação entre o CHEQUE e EMPREGADO. CHEQUE EMPREGADO para Receber Cada CHEQUE deve ser para um e somente um EMPREGADO. Cada EMPREGADO pode receber um ou mais CHEQUEs de pagamento. Exercício 1 Escreva as sentenças que se originam dos relacionamentos mostrados abaixo. Lembre-se que as sentenças devem obedecer ao máximo a convenção. 20 PEDIDO número tipo emitido para comprado via ITEM número descrição requisitado por requisitante de CLIENTE primeiro nome último nome armazenado em repositório de DEPÓSITO id endereço Cada ENTIDADE {deve ser} RELACIONAMENTO {um e somente um} ENTIDADE {pode ser} {um ou mais} Exercício 2 Desenhe um M.E.R baseado nas seguintes sentenças(relacionamentos): a. Cada EMPREGADO deve ser assinalado em um e somente um DEPARTAMENTO. b. Cada DEPARTAMENTO pode ser responsável por um ou mais EMPREGADOs. c. Cada EMPREGADO pode ser alocado em uma ou mais ATIVIDADEs. d. Cada ATIVIDADE pode ser executada por um ou mais EMPREGADOs. Exercício 3 Desenhe um MER baseado nas seguintes sentenças(relacionamentos): a. Cada BANCO DE DADOS ORACLE deve ser constituído de uma ou mais TABLESPACEs. b. Cada TABLESPACE deve ser constituída de um e somente um BANCO DE DADOS ORACLE. c. Cada TABLESPACE deve ser constituída de um ou mais ARQUIVOs. d. Cada ARQUIVO pode ser parte de uma e somente uma TABLESPACE. e. Cada TABLESPACE pode ser dividida em um ou mais SEGMENTOs. f. Cada SEGMENTO deve estar em uma e somente uma TABLESPACE. g. Cada SEGMENTO deve ser constituído de um ou mais EXTENTs. h. Cada EXTENT deve estar incluído em um e somente um SEGMENTO. i. Cada EXTENT deve ser composto de um ou mais BLOCOs. j. Cada BLOCO deve ser parte de um e somente um EXTENT. k. Cada ARQUIVO deve ser residente em um e somente um DISCO. l. Cada DISCO pode ser o hospedeiro para um ou mais ARQUIVOs. 21 TIPOS DE RELACIONAMENTO Existem 3 tipos de relacionamento • muitos para um (many to one M:1) • muitos para muitos (M:M) • um para um Todos os relacionamentos devem representar as informações requeridas e as regras do negócio. • relacionamento muitos para um tem o grau de um ou mais em uma direção e o grau de um e somente um na outra. Exemplo Existe um relacionamento muitos para um (M:1) entre CLIENTE e REPRESENTANTE COMERCIAL). CLIENTE REPRESENTANTE visitado por Designado a visitar Notas Rápidas • Os relacionamentos M:1 são muitos comuns. • Os relacionamentos M:1 que são obrigatórios em ambas as direções são raros. O relacionamento Muitos para Muitos (Many to Many, M:M) tem o grau de um ou mais em ambas direções. Exemplos Existe um relacionamento M:M entre ALUNO e CURSO. ALUNO matriculado em CURSO inscrito por Cada ALUNO pode ser matriculado em um ou mais CURSOs. Cada CURSO pode ser cursado por um ou mais ALUNOs. Existe um relacionamento M:M entre EMPREGADO e TRABALHO. EMPREGADO designado para EMPREGO preenchido Cada EMPREGADO pode ser designado para um ou mais EMPREGOs. Cada EMPREGO ser preenchido por um ou mais EMPREGADOs. Notas Rápidas • Relacionamentos M:M são muito comuns. • Na maioria dos casos os relacionamentos M:M são opcionais em ambas as direções, contudo esta relação pode ser opcional em somente uma direção. O Relacionamento Um para Um (1:1) tem o grau de um e somente um em ambas direções. 22 Exemplo Existe um relacionamento 1:1 entre COMPUTADOR e CPU. COMPUTADOR o hospedeiro de CPU incorporado no Cada COMPUTADOR deve ser o hospedeiro de uma e somente uma CPU. Cada CPU pode ser incorporada em um e somente um COMPUTADOR. Notas Rápidas • Este relacionamento é raro. • É obrigatório em ambas direções. • Entidades que pareçam ter uma relação 1:1 podem ser realmente a mesma entidade. ANALISAR E MODELAR RELACIONAMENTOS Siga os cinco passos para analisar e modelar os relacionamentos. Passos 1 2 3 4 5 Determine a existência do relacionamento. Nomeie cada direção do relacionamento. Determine a opcionalidade para cada direção do relacionamento. Determine o grau para cada direção do relacionamento. Leia o relacionamento para aprová-lo. PASSO 1 - DETERMINAR A EXISTÊNCIA DO RELACIONAMENTO Determine a existência do relacionamento. Examine cada par de entidades para determinar se a se relacionamento existe. Pergunte sobre a existência do relacionamento. • Existe uma relação significativa entre ENTIDADE A e ENTIDADE B? Exemplos Considere as entidades DEPARTAMENTO e EMPREGADO. Há uma relação significativa entre DEPARTAMENTO e EMPREGADO? Sim, há um relacionamento significativo entre as entidades. Considere as entidades DEPARTAMENTO e ATIVIDADE. Há uma relação significativa entre DEPARTAMENTO e ATIVIDADE? Não há um relacionamento significativo entre as entidades. PASSO 2 - NOMEANDO O RELACIONAMENTO Nomeie cada direção do relacionamento. Perguntar o nome do relacionamento 23 • Como a ENTIDADE A é relacionada com a ENTIDADE B? Uma ENTIDADE A “é o nome do relacionamento” uma ENTIDADE B. • Como a ENTIDADE B é relacionada com a ENTIDADE A? Uma ENTIDADE B “é o nome do relacionamento” uma ENTIDADE A. Exemplo Considere o relacionamento entre DEPARTAMENTO e EMPREGADO. Como estas entidades são relacionadas? Cada DEPARTAMENTO é responsável pelo EMPREGADO. Cada EMPREGADO é designado para um DEPARTAMENTO. Usar a lista de pares de nome relação para nomear relacionamentos. Utilizando pares nome relação • • • • • • baseado em trazido de descrição de operado por representado por responsável por a base para o fornecedor de para o operador para a representação de a responsabilidade de Nota Rápida • Não use relacionado a ou associado a como nome de relacionamento. PASSO 3 - DETERMINAR A OPCIONALIDADE DOS RELACIONAMENTOS Determinar a opcionalidade de cada direção dos relacionamentos. Perguntar sobre a opcionalidade das relações • • A ENTIDADE A deve ser “ nome do relacionamento” ENTIDADE B? A ENTIDADE B pode ser “ nome do relacionamento” ENTIDADE A? Exemplo Considere o relacionamento entre DEPARTAMENTO e EMPREGADO. Um EMPREGADO deve ser designado a um DEPARTAMENTO? Sempre? Existe alguma situação em que o EMPREGADO não seria designado a um DEPARTAMENTO? Não, um EMPREGADO deve sempre ser designado a um DEPARTAMENTO. Um DEPARTAMENTO deve ser responsável por um EMPREGADO? Não, um DEPARTAMENTO não tem que ser responsável por um empregado. Desenhe as linhas de relacionamento, com seus respectivos nomes relação. Exemplo EMPREGADO designado ao DEPARTAMENTO responsável por 24 PASSO 4 - DETERMINAR O GRAU DOS RELACIONAMENTOS Determinar o grau em ambas direções Perguntar sobre os graus de relacionamentos • • Pode a ENTIDADE A ser “nome do relacionamento” de mais de uma ENTIDADE B? Pode a ENTIDADE B ser “nome do relacionamento” de mais de uma ENTIDADE A? Exemplo Considere a relação entre DEPARTAMENTO e EMPREGADO. Pode um EMPREGADO ser designado para mais de um DEPARTAMENTO? Não, um EMPREGADO deve ser designado para apenas um DEPARTAMENTO. Pode um DEPARTAMENTO ser responsável por mais de um EMPREGADO? Sim, um Departamento pode ser responsável por mais de um empregado. Adicionar os graus do relacionamentos ao diagrama E-R. Exemplo EMPREGADO designado ao DEPARTAMENTO responsável por PASSO 5 - VALIDAR O RELACIONAMENTO Re-examinar o modelo E-R e validar o relacionamento. Leia o Relacionamento • Os relacionamentos devem ser legíveis e fazer sentido ao negócio. Exemplo Leia o relacionamento representado pelo seguinte diagrama. EMPREGADO Designado para DEPARTAMENTO responsável por Cada EMPREGADO deve ser designado a um e somente um DEPARTAMENTO. Cada DEPARTAMENTO pode ser responsável por um ou mais EMPREGADOs. EXERCÍCIO 1 Analisar e modelar relacionamentos. Analisar e modelar os relacionamentos no seguinte grupo de informações requeridas. Usar a matriz relacionamento para traçar a existência das relações entre as entidades. 25 “Eu sou gerente de uma companhia de treinamento que oferece cursos na área de manejamento de técnicas. Nós lecionamos vários cursos, cada qual tem um código, um nome, e a remuneração. Introdução ao Unix e Programação C são dois de nossos mais populares cursos. Os cursos variam, em termos de duração, de um a quatro dias. Um professor (instrutor) pode lecionar vários cursos. Egberto Silva e Maria do Carmo são dois de nossos melhores instrutores, nós mantemos o nome e o telefone de cada um deles. Cada curso é lecionado por somente um instrutor. Nós criamos um curso e então nomeamos o professor. Os estudantes podem frequentar vários cursos ao mesmo tempo. João fez todos os cursos que fornecemos. Nós também mantemos nome, fone e endereço dos estudantes. Alguns estudantes e instrutores não têm telefone.” EXERCÍCIO 2 Analisar e modelar os relacionamentos no seguinte grupo de informações requeridas do exercício “Eu sou dono de uma pequena loja de vídeo. Nós temos mais de três mil títulos a cadastrar. Cada fita tem um número. Para cada filme temos que saber seu título e categoria (aventura, drama, comédia...). Sim, nós temos títulos repetidos (mais de uma cópia para um filme). Nós damos para cada filme uma identidade específica, e então traçamos que filme a fita contém. As fitas podem ser dos formatos Beta ou VHS. Nós sempre temos no mínimo uma fita para cada filme traçado e cada uma é sempre cópia de um único filme específico. Nossas fitas são bastante longas, e nós não temos nenhum filme que que seja longo o bastante para mais de uma fita. As perguntas mais frequentes dos clientes são sobre filmes novos e atores específicos. Pacino e De Niro são os mais procurados. Então nós gostaríamos de cadastrar as estrelas do cinema em cada filme que elas participam. Nem todos os filmes são feitos por atores famosos. Os clientes gostam de saber seus “reais” nomes e datas de nascimento. Só cadastramos os atores que estão no nosso inventário. Nós temos muitos clientes. Só alugamos videos para pessoas que tenham bom crédito e façam parte do clube. Para cada um destes clientes, nós gostaríamos de guardar seus nomes e seus telefones e endereços atuais. E é claro que cada um deles tem um número. Finalmente precisamos de um cadastro das fitas que cada um deles aluga. Um cliente pode alugar muitas fitas, mas só nos interessa suas locações mais recentes.” RESUMO - LAY OUT DO DIAGRAMA E-R Faça o diagrama E-R fácil de ler e aplicável às pessoas que precisam trabalhar com isso. Limpo e Arrumado • Caixas entidades em cima. • Desenhe as linhas dos relacionamentos retas. • Usar um ângulo de 30 à 60 graus que é mais fácil seguir quando as linhas das relações devem se cruzar. • Usar bastante espaço em branco para evitar congestionamento visual. • Evitar o uso de muitas linhas paralelas próximas umas das outras pois são difíceis de se seguir. Texto Bem Definido • Faça o texto bem definido sem ambiguidades. • Evite abreviações e jargões. • Adicione adjetivos para para melhorar o entendimento. • Alinhe o texto horizontalmente. • Ponha os nomes dos relacionamentos no fim da linha e no lado oposto da linha. Formas Memoráveis • Faça o diagrama E-R memorável. As pessoas lembram-se de formas e modelos. • Não desenhe o diagrama E-R em uma grade. • Estique ou encolha as caixas (boxes) de entidades para ajudar no layout do diagrama. 26 Desenhe os pés de galinha apontando para cima ou para esquerda. apontando para esquerda apontando para cima Regra do Layout • Tente posicionar o pé de galinha à esquerda ou ao topo das linhas de relacionamento. • Posicione as entidades mais volumosas e voláteis em direção ao topo e à esquerda do diagrama. • Posicione as entidades menos volumosas e voláteis abaixo e à esquerda do diagrama. Nota Rápida • Até que uma relação M:M seja resolvida, pelo menos um fim do relacionamento apontará para baixo ou para esquerda ATRIBUTOS Atributos são informações sobre uma entidade que precisa ser conhecida ou mantida. Atributos descrevem uma entidade pela qualificação, identificação, classificação, quantidade ou expressando o estado da entidade. Exemplo Quais são alguns dos atributos da entidade EMPREGADO? código ou número da folha de pagamento identificam um EMPREGADO nome e sobrenome qualificam um EMPREGADO categoria da folha de pagamentto (semanal, mensal) classificam um EMPREGADO a idade quantifica um EMPREGADO status do emprego (ativo, aposentado) expressa a posição do EMPREGADO Atributos representam o tipo de descrição ou detalhe, não uma instância. Exemplo 77506 e 763111 são os valores do atributo número. João é o valor do atributo nome de EMPREGADO. Notas Rápidas • Os nomes dos atributos devem estar claros aos usuários, não codificados para o desenvolvedor. • Nomes de atributos devem ser específicos-ex., isso é quantidade, quantidade retornada, ou quantidade adquirida? • Sempre esclareça uma data atributo com uma narrativa ou frase, - ex., data de contato, data do pedido. • Um atributo deve ser designado à uma única entidade. Convenções do Diagrama 27 • Os nomes dos atributos são simples e mostrados abaixo do nome da entidade. Listar os nomes dos atributos nos soft box de suas devidas entidades. • OPCIONALIDADE DO ATRIBUTO Identificar cada opção de atributo usando uma marca. Atributos Obrigatórios • Um valor deve ser conhecido por cada ocorrência da entidade. • Marque-o com *. Atributos Opcionais • Um valor pode ser conhecido para cada ocorrência da entidade. • Marque-o com o. Exemplo Identificar os atributos para a entidade PESSOA. Determinar sua opcionalidade. PESSOA # * * o o CD_PESSOA NM_PESSOA TP_SEXO DS_PESO DS_TITULO Título e o peso são atributos opcionais. Os atributos remanescentes são obrigatórios. Usar uma amostra de dados dos atributos de um instância para validar a opcionalidade. Exemplo São corretas as marcas de obrigatório e opcional para a entidade PESSOA? 28 Usar uma tabela entidade instância para validar qual marcas são corretas para a entidade PESSOA. PESSOA # * * o o CD_PESSOA NM_PESSOA TP_SEXO DS_PESO DS_TITULO Nome da entidade: PESSOA Nome do Atributo Marcas Dados da Amostra Cd_pessoa Nm_pessoa Ds_titulo Tp_sexo Ds_peso * 110 301 134 243 566 * João Silva Carmo Bosco Gismonti o Presidente Tesoureiro ---Secretário ---- * M F F M M o ---- Nota Rápida • Uma Tabela Instância Entidade é útil para registrar os dados da amostra do atributo. IDENTIFICAR ATRIBUTOS Identificar atributos pelo exame das notas da entrevista e pela solicitação das perguntas do usuário. Atributos podem aparecer nas notas da entrevista como: • Frases ou palavras descritivas • Substantivos • Frases preposicionais (ex.- quantia do salário para cada empregado) • Substantivos possesivos e pronomes (ex.- nome do empregado) Questões para perguntar ao usuário • Que informação você precisa saber ou manter sobre a entidade x? • Que informação você gostaria de exibir sobre a entidade x? Examinar documentação no existente manual de procedimentos ou automatizar sistemas para descobrir atributos adicionais e omissões. Formas do papel Cabeçalhos Relatórios do Computador Campos Arquivos do Computador Lay-out dos Registros Prompts Cabeçalhos Depósito de arquivos Tipos de pedidos Questões ao usuário • Este atributo é realmente necessário? Notas Rápidas • Tomar cuidado com requisitos obsoletos pelo sistema anterior. • Fique atento aos dados derivados. EXERCÍCIO 3-7 Desenvolva um M-ER para a seguinte situação. Especifique os atributos de cada entidade e a opcionalidade dos mesmos. 29 “Nosso grupo de usuários ORACLE possui mais de 200 membros. Necessitamos de um IS para controlar nossos assuntos. Definitivamente, precisamos automatizar nosso cadastro de membros. Para cada membro, precisamos manter seu nome, título, endereço para correspondência, telefone comercial, tipo de membro (individual ou empresa) e se o membro está ou não em dia com a taxa anual que cobramos dele pela sua participação no grupo. Esta taxa é cobrada em Janeiro para todos os membros. Também gostaríamos de controlar e manter as empresas de cada membro, o que é difícil já que as pessoas vivem trocando de empresa e queremos manter a empresa corrente de cada membro. Alguns membros estão sem emprego no momento. Para cada empresa, mantemos o nome, endereço e tipo de negócio. Temos um conjunto padrão de códigos para os tipos de negócio. Mantemos apenas o endereço principal de cada empresa. Vários instâncias são agendados por nós, anualmente. Alguns de nossos instâncias anuais são: ‘Encontro da Primavera’, ‘Congresso de Novembro’, ‘Encontro de Outono’, etc. Programamos também instâncias especiais. Por exemplo, tivemos no mês passado o ‘Case Day’, onde o Sr. Richard Baker veio da Inglaterra para uma série de palestras. Nossos instâncias são realizados em vários locais da cidade (Hotel Sheraton, Anhembi, etc). Queremos manter informações sobre os instâncias: data, descrição, número máximo de participantes, local,orçamentos e comentários que os participantes fizeram durante a instância. Esses comentários são registrados como anônimos. Pode haver vários comentários para cada instância. Desejamos manter informações sobre quais os membros atendem a quais instâncias. Alguns membros são ativos e participam sempre.Outros nem tanto e alguns só querem receber nosso jornalzinho. Cada membro pode usar tipos de computadores diferentes. Temos um sistema de identificação para cada plataforma. Assim, 001é para IBM/MVS; 002 para IBM/VM; 003 para VAX/VMS; 020 para OS/2;030 para PC/DOS; 050 para SUN/UNIX; 080 para outras plataformas. Também associamos cada embro com áreas de interesse: saúde, farmacêutica, recursos humanos, financeira, etc. As aplicações devem ser portáteis, portanto não relacionamos área de interesse com plataformas. ATRIBUIR IDENTIFICADORES ÚNICOS Um Identificador Único (UID) é qualquer combinação de atributos e/ou relacionamentos que serve para unicamente identificar uma ocorrência de uma entidade. Cada ocorrência da entidade deve ser unicamente identificável. Exemplo No negócio, cada ocorrência do DEPARTAMENTO é unicamente identificável pelo seu código de departamento. DEPARTAMENTO # CD_DEPARTAMENTO * NM_DEPARTAMENTO UID para a entidade DEPARTAMENTO é o atributo cd_departamento. Exemplo Para um pequeno teatro, cada bilhete é unicamente unicamente identificável pela sua data de performance e o número da cadeira. BILHETE DE TEATRO # DT_PERFORMANCE # NR_CADEIRA UID para a entidade BILHETE DO TEATRO é uma combinação dos dois atributos. 30 A entidade deve ter um UID, ou então não é entidade Notas Rápidas • Todos os componentes do UID devem ser obrigatórios. • Marque o atributo UID com #. Uma entidade pode ser unicamente identificada através de uma relação. Exemplo Na indústria dos bancos, para cada banco é atribuido um único número. Dentro de um banco, cada conta tem um único número. Qual é o UID da entidade CONTA? CONTA #nr_conta gerenciado por o gerente de BANCO #cd_banco CONTA é unicamente identificada pelo seu número de atributo e o específico BANCO com que ela está relacionada. Usar a barra UID para indicar que a relação é parte do UID da entidade. Exemplo A barra UID indica que o relacionamento com BANCO é parte do UID da CONTA. CONTA gerenciado por #nr_conta o gerente de BANCO #cd_banco Nota Rápida • O relacionamento incluído no UID deve ser obrigatória e de um e somente um na direção em que participa. Uma entidade pode ser unicamente identificada através de múltiplas relações. Exemplo A empresa precisa traçar os serviços designados aos seus empregados. Empregados estão prestando serviços designados para projetos. Um empregado pode prestar vários serviços para apenas um simples projeto, cada qual com diferentes datas ou horários. 31 SERVIÇO DESIGNADO * dt_prestacao *dt duracao o ds_posicao por para prestando EMPREGADO #cd_emp *nm_emp assunto de PROJETO #nr_projeto *ds_titulo Qual é o UID da entidade SERVIÇOS DESIGNADOS? Nota Rápida • Ambos relacionamentos são obrigatórios e um e somente um na direção incluída no UID. Uma entidade pode ter mais de um UID. Exemplo O que unicamente identifica um EMPREGADO? EMPREGADO * * * * * CD_EMPREGADO DS_SOBRENOME DT_NASCIMENTO NM_EMPREGADO NR_FOLHA_PAG Candidato UID inclui: 1 número 2 número da folha de pagamento 3 nome/sobrenome Eles são todos únicos? A combinação nome/sobrenome provavelmente não é única. Selecione um candidato UID para ser o UID primário, e os outros são secundários. EMPREGADO # * * * # CD_EMPREGADO DS_SOBRENOME DT_NASCIMENTO NM_EMPREGADO NR_FOLHA_PAG 32 Notas Rápidas • Marque também os secundários como (#) ou não marque-os. • Case Dictionary pode documentar vários UIDs secundários. Estudar a criação do atributo único, artificial para ajudar a identificar cada entidade. Exemplo O que identifica unicamente a entidade CLIENTE? CLIENTE * DS_ENDERECO * DS_SOBRENOME * NM_CLIENTE Possivelmente o nome e sobrenome de CLIENTE poderia ser um UID. De qualquer modo, poderia haver dois CLIENTEs com o mesmo nome. Crie um atributo artificial chamado código CLIENTE que será único para cada ocorrência de CLIENTE. CLIENTE # * * * CD_CLIENTE DS_ENDERECO DS_SOBRENOME NM_CLIENTE Notas Rápidas • Atributos artificiais são freqüentemente usados como UIDs. • Defina um código artificial quando o negócio não tem um atributo natural que unicamente identifica uma entidade. - Procurar por atributos e relacionamentos para identificar cada entidade. Avaliar os Atributos • Quais atributos obrigatórios identificam a entidade? Procurar atributos adicionais que ajudarão a identificar a entidade. Estudar a criação de atributos artificiais para identificação. • Um atributo identifica unicamente a entidade? • Qual combinação de atributos identifica unicamente a entidade? Considerar os relacionamentos • Quais dos relacionamentos ajudam a identificar a entidade? • Está faltando algum relacionamento que ajuda a identificar a entidade? • O relacionamento ajuda a identificar unicamente a entidade? • O relacionamento é obrigatório e de um e somente um na direção da entidade? Validar o UID 33 • Examinar a amostra de dados. A combinação de atributos e relações selecionada identifica unicamente cada ocorrência de um entidade? • Todos os atributos e relações que estão incluídas no UID são obrigatórios? 34 EXERCÍCIOS 3-8 Baseado no MER do exercício da página 26, defina a opcionalidade de cada atributo e identifique os UIDs de cada entidade, coloque o nome dos atributos conforme metodologia. EXERCÍCIO 3-9 • Para a situação da vídeo locadora e do MER do Exercício 3-6, identificar um UID para cada entidade e adicionar estes ao MER. Marcar também cada atributo com suas devidas marcas. • Baseado no MER do exercício anterior, defina a opcionalidade de cada atributo e identifique os UIDs de cada entidade, coloque o nome dos atributos conforme metodologia. FITA número formato cópia de contido em alugado por locador de CLIENTE título nome sobrenome telefone endereço FILME id título categoria estrelado por estrela de ATOR nome artístico nome real data de nascimento 35 EXERCÍCIO Baseado no MER do exercício 3-7( Grupo de usuários ORACLE), defina a opcionalidade de cada atributo e identifique os UIDs de cada entidade. MEMBRO nome sobrenome cargo anuidades recebidas endereço telefone tipo COMENTÁRIO número texto ÁREA DE INTERESSE nome PLATAFORMA id descrição EMPRESA nome endereço tipo de negócio EVENTO nome data descrição local custo REVISÃO: MODELAGEM DE DADOS CONCEITUAL BÁSICA Entidade é alguma coisa de significância( objeto significante) sobre a qual a informação precisa ser conhecida e mantida. Convenções da Diagramação de Entidades • • • • • Box arredondado (soft box) de qualquer tamanho O nome da entidade deve ser singular e único Nome da entidade no topo Opicional: nome sinônimo que deve ser representado entre parênteses Os nomes dos atributos logo abaixo Identificar e Modelar Entidades 1. 2. 3. 4. 5. 6. Examine os substantivos. Eles são objetos significantes? Nomeie cada entidade. Existe alguma informação ou interesse sobre a entidade que o negócio (empresa) precisa manter? Cada instância da entidade é unicamente identificável? Qual atributo ou atributos poderiam servir como um UID? Faça uma descrição disso: “Um empregado tem a importância de um assalariado da companhia. Por exemplo, Egberto da Silva e Maria do Carmo são EMPREGADOS.” Diagrame cada entidade e alguns de seus atributos. Revisão: Modelagem de Dados Conceitual Básica 36 O relacionamento é a associação bi-direcional, significante entre duas entidades, ou entre a entidade e ela mesma. Syntax da Relação Cada entidade1 { deve ser} nome do relacionamento {um ou mais} entidade2 {ou pode ser } {ou um único} Convenções do Diagrama um opcion al obr igatór io m uitos (pé de galin ha) Analizar e Modelar as Relações Entre as Entidades 1 2 3 4 5 Determine a existência do relacionamento. Nomeie cada direção da relação. Determine a opcionalidade de cada direção do relacionamento. Determine o grau de cada direção da relação. Leia o relacionamento para aprová-lo. Revisão: Modelagem de Dados Conceitual Básica-cont. Atributos são informações sobre uma entidade que precisa ser conhecida ou mantida. Convenções do Diagrama • Os nomes dos atributos são simples e mostrados abaixo do nome da entidade. • Listar os nomes dos atributos nos soft box de suas devidas entidades. 37 Analizar e Modelar Atributos 1 2 3 4 5 6 7 8 Identificar o candidato a atributo. Associar o atributo com a entidade. Nomear o atributo. Determinar a opcionalidade do atributo. Validar que o atributo é realmente um atributo e não um entidade. Quebrar os atributos agregados. Verificar o valor singular do atributo. Verificar que o atributo não é derivado. 38 Revisão: Modelagem de Dados Conceitual Básica-cont. Cada entidade deve ser unicamente indentificável. O Identificador Único(UID) é qualquer combinação de atributos e/ou relacionamentos que servem para unicamente identificar uma ocorrência de uma entidade. Convenções do Diagrama DEPARTAMENTO # CD_DEPARTAMENTO * NM_DEPARTAMENTO • # indica um atributo que é parte do UID da entidade. CONTA gerenciado por #nr_conta o gerente de BANCO #cd_banco • A barra UID indica que o relacionamento faz parte do UID (numero do banco e numero da conta compõem a UID da conta) . Identificar UIDs para cada entidade 1 2 3 Procurar candidatos atributos que audem a identificar uma entidade. Determinar a dependência da entidade sobre outras a ela relacionadas. Definir o UID para a entidade 39 NORMALIZAR O MODELO DE DADOS Normalização é um conceito de banco de dados relacional, mas seus princípios são aplicados na Modelagem de Dados Conceitual. Validar cada colocação de atributos usando as regras de normalização. Regra da Forma Normal Descrição Primeira Forma Normal Todos os atributos devem ter somente um valor para cada ocorrencia da entidade (valor simples). Segunda Forma Normal Um atributo deve depender por inteiro do UID (identificador único)da entidade Terceira Forma Normal Nenhum atributo não-UID pode depender de outro atributo não-UID, ou seja, atributo não - chave não deve depender de atributo não- chave. Um modelo de dados ER normalizado traduz-se automaticamente em um projeto de banco de dados relacional normalizado. Notas Rápidas • A Terceira forma normal é geralmente aceita com o objetivo de eliminar a redundância no projeto de banco de dados. • Formas normais maiores não são largamente usadas. 40 Normalizar o modelo de dados-cont. Regra da Primeira Forma Normal (1FN): Todos atributos devem assumir valores únicos para cada instância da entidade. Checagem da Validação • Validar que cada atributo tenha um valor para cada ocorrência da entidade. Nenhum atributo deve ter valores repetidos (mais de um valor). Exemplo A entidade CLIENTE esta na 1FN? Se não, como poderia ser convertido a uma 1FN? CLIENTE #*identificador *data de contato O atributo “ data de contato” tem múltiplos valores, portanto a entidade CLIENTE não é uma 1NF. Crie uma entidade CONTATO adicional com um RELACIONAMENTO vários para um. CONTATO #*data de contato o local o resultado para CLIENTE #*identificador o assunto do Se um Atributo tem Múltiplos valores, crie uma entidade adicional e a relacione com sua entidade original com um relacionamento vários para um. 41 Normalizar o Modelo de Dados-cont. Regra da Segunda Forma Normal(2FN): um atributo deve ser totalmente dependente do UID (IDENTIFICADOR ÚNICO ) da entidade. Checagem de validação • Verificar que o atributo é inteiramente dependente sobre o UID de sua entidade. Cada instância específica do UID deve determinar uma simples instância de cada atributo • Verificar que um atributo não dependente sobre apenas uma parte do seu UID da entidade. Exemplo Validar a colocação dos atributos da entidade CURSO CURSO #*cod. *nome *duração *taxa Cada instância de um código de curso especifica um valor para nome, duração e taxa. Os atributos estão apropriadamente colocados. Exemplo Validar a colocação de atributos para as entidades CONTA e BANCO. CONTA #*numero *balanço *data *agência gerenciado por o gerente da BANCO #*número ban banco *nome Cada instância de BANCO e número de conta determina valores específicos de balanço e data para cada conta. O atributo agência está mal colocado. Ele depende do BANCO mas não do número da conta. Isto não deveria ser um atributo de CONTA. Se um atributo não é inteiramente dependente do UID da entidade então está mal colocado e deve ser removido. 42 Normalizar o Modelo de Dados-cont. Regra da Terceira Forma Normal(3FN): Nenhum atributo não-UID pode ser dependente de outro atributo não-UID. Checagem de Validação • Validar que cada atributo não-UID não seja dependente de outro atributo nãoUID. • Mover qualquer atributo não-UID que depende de outro atributo não UID. Exemplo Algum dos atributos não-UID para esta entidade dependem de outros atributos nãoUID? PEDIDO #*id *data *id do cliente *nome do cliente *estado Os atributos nome do cliente e estado dependem do id do cliente. Crie outra entidade chamada CLIENTE com o UID id do cliente, e coloque os atributos afins. PEDIDO #*id *data para o mandante de CLIENTE #*identidade *nome *estado Nota Rápida • Se um atributo depende de um atributo não-UID, mova ambos para uma nova entidade relacionada. 43 EXERCÍCIO 4-1 O MER apresentado abaixo não está normalizado. Redesenhe-o produzindo um novo MER normalizado. Para isso verifique entidade por entidade se: 1- Não existem grupos repetitivos(1ªFN). 2- Todos os atributos dependem do UID por inteiro.(2ªFN). 3- Não existe nenhum atributo dependente de outro atributo não-UID. MATRÍCULA cod.grau cod.professor descrição do grau nome do curso ALUNO número nome sobrenome nascimento DISCIPLINA código nome cod.professor cod.departamento nome professor nome departamento 44 RESOLVER RELACIONAMENTOS M:M Atributos podem parecer associados com o relacionamento M:M. Resolver o relacionamento M:M pela adição de uma entidade intersecção com aqueles atributos. Exemplo Considere qo relacionamento M:M entre PRODUTO e VENDEDOR. Qual o preço atual de um específico PRODUTO de um específico VENDEDOR? preço atual parece ser um atributo do relacionamento entre PRODUTO e VENDEDOR. Atributos descrevem somente entidades. Se atributos descrevem um relacionamento, o relacionamento deve ser resolvido. 45 Resolver Relacionamentos M:M-cont. Substituir ou resolver um relacionamento M:M com uma nova Entidade Intersecção e duas relações M:1. Exemplo O relacionamento M:M entre PRODUTO e VENDEDOR pode ser resolvido pela adição de uma entidade intersecção ITEM DO CATÁLOGO. Preço atual é realmente um atributo desta entidade. ITEM CATÁLOGO *preço atual *quant. do pacote *unidade de medida VENDEDOR #*código *nome para fornecedor de para fornecido por PRODUTO #* id *nome *descrição Uma vez definida a entidade ITEM CATÁLOGO, requeridos os atributos: quantidade do pacote e unidade de medida também são atributos de ITEM CATÁLOGO. O UID para ITEM CATÁLOGO é composto pelos seus dois relacionamentos Notas Rápidas • Uma Entidade Intersecção é frequentemente identificada por seus relacionamentos originais - note a barra de UID. • Os relacionamentos vindos da entidade intersecção são sempre obrigatórios. • Estas entidades frequentemente representam o que realmente acontece no mundo dos negócios. • Estas costumam conter consumíveis como a quantidade usada e datas. Elas tendem a ser as maiores e mais voláteis entidades. 46 Resolver Relacionamentos M:M-cont. Posicionar Entidades Intersecção Layout do relacionamento M:M Layout da Entidade Intersecção i d ou entidade intersecção entidades referentes Notas Rápidas • A entidade referente é uma entidade que não tem o fim obrigatório conectado a ela • Quando o relacionamento M:M está resolvido, o layout do diagrama inteiro talvez precise ser arrastado. Resolver Relacionamentos M:M-cont. O UID de uma entidade intersecção é frequentemente composto de seus relacionamentos com as entidades originárias. Exemplo 47 Resolver a seguinte relacionamento M:M para acomodar esses requerimentos adicionais: “Trace a data em que cada aluno foi matriculado, a data em que completou o curso e o grau do aluno.” ALUNO #*id *sobrenome *nome o telefone matriculado em escolhido por CURSO #*código *nome o taxa o duração Solução Adicione a entidade intersecção MATRÍCULA e dois relacioonamentos M:1. MATRÍCULA *data da matrícula o data em que completou o grau para para matriculado em ALUNO #*id *sobrenome *nome o telefone escolhido por CURSO #*código *nome o taxa o duração MATRÍCULA tem os atributos data de matrícula, data em que completou e grau. O UID de matrícula é feito de seus relacionamentos com ALUNO e CURSO. Nota Rápida Este modelo guarda somente a última data em que o aluno foi matriculado em um específico curso. Se há necessidade de se manter várias matrículas, inclua o atributo data de matrícula como parte do UID. Resolver Relacionamentos M:M-cont. Um relacionamento com a entidade intersecção, para duas entidades originantes, pode não ser adequada(suficiente) para definir unicamente cada ocorrência da entidade intersecção. 48 Exemplo Resolva o seguinte relacionamento M:M para acomodar esses requerimentos adicionais. “Trace a data que cada empregado é designado ao projeto e a duração de cada um.” EMPREGADO #*id *nome designado a PROJETO #*número *título tarefa do Adicione uma entidade intersecção chamada TRABALHO DESIGNADO com atributos data da tarefa e duração. TRABALHO DESIGNADO #*data da tarefa *duração para para o assunto de prestado por EMPREGADO #*id *nome PROJETO #*número *título TRABALHO DESIGNADO é parcialmente identificado pelas suas relações com EMPREGADO e PROJETO, mas estas duas relações não são suficientes para identificar unicamente um TRABALHO DESIGNADO. Um empregado pode ter múltiplas tarefas para o projeto, com diferentes datas de designação. Portanto, o UID de TRABALHO DESIGNADO deve incluir o EMPREGADO relacionado, o PROJETO relacionado e o atributo DATA DA TAREFA. Resolver Relações M:M-cont. Uma vez definida a entidade intersecção, procure por atributos adicionais que descrevam a entidade intersecção. Exemplo Qual informação sobre o relacionamento entre PRODUTO e VENDEDOR precisa ser conhecida? “Nós precisamos traçar o preço atual de um específico PRODUTO vindo de um específico VENDEDOR.” 49 Resolver o seguinte relacionamento M:M para acomodar esses requerimentos adicionais. Adicione a entidade intersecção ITEM CATÁLOGO com um atributo de preço atual. Que informações precisam ser conhecidas sobre ITEM CATÁLOGO? “Nós também precisamos saber a quantidade do pacote e a unidade de medida para cada ITEM CATÁLOGO.” ITEM CATÁLOGO *preço atual *quant. do pacote *unidade de medida para fornecido por PRODUTO #* id *nome *descrição VENDEDOR #*código *nome para fornecedor de 50 Resolver Relacionamentos M:M-cont. Procurar por atributos que identificam, ou ajudam a identificar uma entidade intersecção. Exemplo Como você identifica cada ITEM CATÁLOGO? Você usa a combinação relacionada do código do VENDEDOR e o id do PRODUTO? “Não, nós temos um catálogo de todos os itens disponíveis , e cada um tem um único número de catálogo.” ITEM #*número catálogo Á *preço atual *quant. do pacote *unidade de medida VENDEDOR #*código *nome para fornecedor de para fornecido por PRODUTO #* id *nome *descrição De acordo com as regras do negócio, cada ITEM CATÁLOGO tem um único número catálogo. Então este deveria ser o UID da entidade ITEM CATÁLOGO. 51 Resolver Relacionamentos M:M-cont. Resolver todos os relacionamentos M:M ao fim da fase de Análise. Essa resolução forçada pode resultar em uma entidade relacionamento sem atributos. Exemplo Na situação da Video Locadora, o seguinte relacionamento M:M foi definido. FILME #*id *título o categoria estrelado por a estrela do ATOR #*código *nome artístico o nome real o data de nasc. Ao fim do estágio de análise, o usuário não tinha identificado quaisquer atributos que são associados com o relacionamento M:M. Resolver o relacionamento M:M com uma entidade intersecção sem atributos ATUAÇÃO DA ESTRELA para para estrelado por FILME #*id *título o categoria a estrela de ATOR #*código *nome artístico o nome real o data de nasc. Notas Rápidas • Uma entidade intersecção sem atributos é apenas uma lista de referência cruzada bi-direcional entre as ocorrências das entidades. • Uma entidade intersecção sem atributos é uma exceção à regra que uma entidade deve ter atributos para ser uma entidade. • O UID para uma entidade intersecção vazia é sempre composta das relações das duas entidades nas quais ela foi originada. 52 EXERCÍCIO 4-2 No MER do exercício Grupo de usuários da apostila anterior, existe um relacionamento de M:M entre as entidades MEMBRO e ÁREA DE INTERESSE. Resolva este relacionamento baseado nas seguintes informações adicionais: “Queremos também manter uma pequena descrição do interesse de cada membro numa área específica. Por exemplo, queremos documentar que um membro já tem um grande sistema financeiro que ele desenvolveu dentro de casa. Pode haver, porém, algum membro interessado numa certa área sem que descrevamos seu interesse.” EXERCÍCIO 4-3 Resolver o seguinte relacionamento M:M entre CLIENTE e PRODUTO. Adicione os atributos data do pedido, quantidade e preço. CLIENTE #*id *nome *sobrenome o solicitante de pedido por PRODUTO #*número * nome * unidade de medida 53 MODELO DE DADOS HIERÁRQUICO Representar os dados hierárquicos como um conjunto de relacionamentos M:1. Exemplo Modelar a estrutura de organização hierárquica como um conjunto de relacionamentos M:1. COMPANHIA TIME DIVISÃO DEPARTAMENTO DEPARTAMENTO DIVISÃO TIME COMPANHIA Modelo de Dados Hierárquico-cont. O UID para um conjunto de entidades hierárquicas pode ser propagado através de múltiplos relacionamentos. Exemplo Quais são os UIDs das entidades ANDAR, SUÍTE e QUARTO? 54 QUARTO #*id localizado dentro que contém SUÍTE #*número o inquilino localizado sobre que contém ANDAR #*número está contido que contém PRÉDIO #*id *nome *endereço O UID de QUARTO é o id do quarto e a SUÍTE em que está localizado. O UID de SUÍTE é o número da suíte e o andar em que está localizado. O UID de ANDAR é o número do andar e o PRÉDIO em que está localizado. 55 Modelo de Dados Hierárquico-cont. Considere a criação de atributos artificiais para ajudar a identificar entidades nas relações hierárquicas. Exemplo Em uma típica organização de estrutura, o que poderia unicamente identificar instâncias das entidades DIVISÃO, DEPARTAMENTO e TIME? TIME DEPARTAMENTO DIVISÃO COMPANHIA Cada TIME deveria ser identificado baseado em seus DEPARTAMENTO, DIVISÃO, COMPANHIA. Ou cada entidade poderia ter um único, independente e artificial código de identificação. Notas Rápidas • Estes únicos, independentes e artificiais codigos de identificação tendem a ser curtos no tamanho. • Se a estrutura hierárquica muda constantemente, use identificadores independentes e artificiais. 56 MODELO DE RELACIOINAMENTOS RECURSIVOS Um Relacionamento Recursivo é o relacionamento entre a entidade e ela mesma. Exemplo Veja o relacionamento recursivo no seguinte diagrama E-R. EMPREGADO #*número *nome *sobrenome o trabalho o salário o comissão gerenciado por gerente de Cada EMPREGADO pode ser gerenciado por um e somente um EMPREGADO. Cada EMPREGADO pode ser o gerente de um ou mais EMPREGADOS. Notas Rápidas • As convenções do diagrama E-R que mostra o relacionamento recursivo é conhecida como orelha de porco. • O loop pode aparecer em qualquer um dos lados do box. 57 Modelo de Relacionamentos recursivos-cont. Considere a representação hierárquica como um relacionamento recursivo. Exemplo Um hierarquia de negócio pode ser desenhada como um relacionamento recursivo. TIME dentro feito de DEPARTAMENTO ELEMENTO DA ORGANIZAÇÃO #*id *nome feito de dentro dentro feito de DIVISÃO dentro feito de COMPANHIA Notas Rápidas • Uma única entidade recursiva deve incluir todos os atributos de cada entidade individual. Idealmente, as entidades em cada nível hierárquico poderiam ter os mesmos atributos. • Um modelo de organização recursiva pode prontamente acomodar a adição ou subtração de organização de camadas. • Um modelo de organização recursiva não pode lidar com relações obrigatórias. Se cada ELEMENTO DA ORGANIZAÇÃO deve estar dentro de outro ELEMENTO DA ORGANIZAÇÃO, a organização hierárquica teria de ser infinita. • Um relacionamento recursivo deve ser opcional em ambas direções. 58 Modelo de Relacionamentos Recursivos-cont. Dados da Conta de Materiais podem ser modelados com várias entidades para cada categoria da “parte”, e um conjunto de relacionamentos entre cada uma destas entidades. Exemplo A organização da manufatura de um automóvel: partes elementares, submontagem, montagem e produtos. O seguinte diagrama E-R modela estes dados considerando cada uma destas categorias como uma entidade. Amostra de arruela, termostato, chip , capa do cinto PARTE feito de uma parte de uma parte de uma parte de Amostra de ventarola, módulo de carburador, afogador, motor feito de feito de SUBuma parte de Amostra de sistema de sistema de sistema de motor MONTAGEM uma parte de feito de uma parte de uma parte de uma parte de feito de feito de Amostra de carro, trator, feito de feito de PRODUTO uma parte de feito de feito de 59 Modelo de Relacionamentos Recursivos-cont. Modelo de dados Conta de Materiais como um relacionamento M:M recursivo. Exemplo Para a organização da manufatura de automóveis, considere todas as partes elementares, sub-montagem, montagem e produtos como instâncias de uma entidade chamada COMPONENTES. Então o complexo prévio do modelo E-R pode ser remodelado como um relacionamento recursivo simples. COMPONENTE #*identificador uma parte de feito de Cada COMPONENTE pode ser uma parte de um mais COMPONENTEs. Cada COMPONENTE pode ser feito de um ou mais COMPONENTEs. 60 Modelo de Relacionamentos Recursivos-cont. Resolver o relacionamento recursivo M:M com uma entidade intersecção e duas relacionamentos M:1 para diferentes instâncias de uma entidade original. Exemplo Considere a estrutura do modelo recursivo de Conta de Materiais. Este modelo traçará informações sobre quais componentes são parte da ventarola. Mas se uma arruela fizer parte da ventarola, traçaremos também como várias arruelas fazem parte de uma ventarola. parte de COMPONENTE #*identificador uma parte d feito de O atributo quantidade parece estar associado com o relacionamento recursivo. Resolver este relacionamento M:M recursivo pela adição da entidade intersecção REGRA DE MONTAGEM e duas relações M:M ligadas à entidade COMPONENTE. REGRA DE MONTAGEM terá um atributo de quantidade. REGRA DE MONTAGEM o quantidade para para feito de feito de COMPONENTE #*identificador As duas relações M:1 vindas da instância REGRA DE MONTAGEM serão associadas com diferentes instâncias da entidade COMPONENTE. Por exemplo, a instância REGRA DE MONTAGEM de arruela a ventarola terá um relacionamento M:1 com a instância COMPONENTE para arruela e um segundo relacionamento M:1 com a instância COMPONENTE para ventarola. EXERCÍCIO 4-4 61 Desenvolva dois modelos E-R representando a situação abaixo. Um deles na estrutura hierárquica e outro na estrutura recursiva. “Nossa companhia vende produtos em todo Brasil. Assim, dividimos o país em quatro grandes regiões: Sul, SP-Rio, Central e Norte. Cada região de vendas possui identificador único. Cada região ,por sua vez, está dividida em distritos de vendas. Por exemplo, a região Norte engloba os distritos Amazônia, Zona da Mata e Caatinga. Cada distrito também tem um código único. Cada distrito é composto de territórios de vendas. A Zona da Mata por exemplo, engloba os territórios: Costa Norte e Costa Leste. Já o distrito Amazônia engloba os territórios: Solimões-Manaus, Pará-Norte e Pará-Sul. Cada território está dividido em áreas de vendas: Por exemplo, Costa Norte engloba as áreas: Grande São Luiz, Grande Fortaleza etc. Cada vendedor é responsável por uma ou mais áreas de vendas, para qual ele possui uma cota. Também temos gerentes responsáveis por um ou mais distritos, e diretores responsáveis por uma ou mais regiões de vendas. O gerente responsável por um distrito também é responsável pelos territórios deste distrito. Nós não sobrepomos as responsabilidades dos funcionários: uma área de vendas é sempre da responsabilidade de apenas um vendedor. Além disso, as responsabilidades de nossos diretores e gerentes não se sobrepõem. As vezes, algum diretor, gerente ou vendedor está para deixar as empresa ou precisou ficar ausente por algum motivo. Nós identificamos todos nossos funcionários pelos seus IDs. MODELANDO PAPÉIS COM RELACIONAMENTOS Atenção com as entidades que representem papéis. Exemplo No modelo E-R para a Training Company, foi definida uma entidade INSTRUTOR e uma entidade ALUNO. Este modelo trabalha bem se um INSTRUTOR nunca for um ALUNO e se um aluno nunca for INSTRUTOR. Mas o que acontece se um INSTRUTOR é também um ALUNO? 62 MATRÍCULA *data da matrícula o data que completou o grau para para matriculado em ALUNO #*id * sobrenome *nome o telefone matriculado por CURSO #*código *nome o duração o taxa lecionado por o professor de INSTRUTOR #*id *sobrenome *nome o telefone Entidades que representam papéis podem dividir instâncias sobrepostas. Modelando Papéis com Relacionamentos-cont. Use relacionamentos para modelar papéis. Relacionamentos permitem uma simples entidade instância a assumir vários papéis. Exemplo Para a Training Company, definir a entidade pessoa que pode suportar os papéis de INSTRUTOR e/ou ALUNO. 63 REGRA DE MONTAGEM o quantidade para para aluno de PESSOA #*id *sobrenome *nome o telefone matriculado por instrutor de lecionado por CURSO #*código *nome o duração o taxa 64 MODELANDO SUBTIPOS Use subtipos para modelar tipos de entidades exclusivas que têm atributos e relações em comum. Exemplo “Uma empresa definiu dois tipos de funcionários: privilegiados e não-privilegiados. Para todos eles, traçar cada número, nome, sobrenome, e o departamento designado. Para os privilegiados traçar também seu salário. Para os não-privilegiados trace a quantia horária, a quantia total e membro da união.” Criar um super tipo FUNCIONÁRIO com dois subtipos. Cada FUNCIONÁRIO é também um FUNCIONÁRIO PRIVILEGIADO ou um FUNCIONÁRIO NÃOPRIVILEGIADO. FUNCIONÁRIO FUNCIONÁRIO PRIVILEGIADO *salário #*número *nome *sobrenome FUNCIONÁRIO NÃO-PRIVILEGIADO *quantia horária *quantia total membro de designado a feitode DEPARTAMENTO feito de UNIÃO Nota Rápida • Tome cuidado com as instâncias que podem ser os dois subtipos-a construção subtipo/supertipo é incorreta nestas situações. 65 Modelando Subtipos-cont. Um supertipo é uma entidade que tem subtipos. Um super tipo pode ser dividido em dois ou mais subtipos exclusivos e mútuos. Exemplo Um FUNCIONARIO é também um FUNCIONÁRIO PRIVILEGIADO ou um FUNCIONÁRIO NÃO-PRIVILEGIADO, mas não ambos. Um supertipo pode ter atributos e relacionamentos compartilhados entre seus subtipos. Exemplo Todos FUNCIONÁRIOs devem ter o atributo número, nome, sobrenome. Todos FUNCIONÁRIOs devem ser designados a um e somente um DEPARTAMENTO. Cada subtipo pode ter seus próprios atributos e relacionamentos. Exemplo O subtipo FUNCIONÁRIO PRIVILEGIADO tem um atributo salário. O subtipo FUNCIONÁRIO NÃO-PRIVILEGIADO tem atributos de quantia horária e quantia total, e um relacionamento com a entidade UNIÃO. Nota Rápida • Um subtipo sem atributos ou relacionamentos próprios pode ser um sinônimo da entidade supertipo e não um subtipo. 66 Modelando Subtipos-cont. Todas instâncias da entidade supertipo deve pertencer a uma e somente uma entidade subtipo. Subtipos devem formar um conjunto completo sem sobreposições. Exemplo Geralmente, um trabalho manual ou um trabalho de escritório, mas devem haver algumas exceções. TRABALHO OUTRO TRABALHO TRABALHO MANUAL TRABALHO DE ESCRITÓRIO Regras de Leitura de Supertipos “Cada entidade supertipo deve ser também um subtipo1 ou um subtipo2” Exemplo “Cada TRABALHO deve ser também um TRABALHO MANUAL ou um TRABALHO DE ESCRITÓRIO, ou OUTRO TRABALHO.” Regras da leitura de subtipos “...subtipo, que é um tipo do supertipo,...” Exemplo “...TRABALHO DE ESCRITÓRIO, que é um tipo de TRABALHO,...” Sempre use o termo OUTRO quando não se tem certeza sobre o complemento do conjunto. 67 Modelando Subtipos-cont. Subtipos podem ser subtipados adiante. Normalmente dois ou três níveis são adequados. Exemplo Definir adiante subtipos para a entidade subtipo AVIÃO. AERONAVE AVIÃO PROPULSÃO PLANADOR AVIÃO TURBINADO AVIÃO A JATO HELICÓPTERO CARGUEIRO OUTROS AVIÕES AVIÃO é um subtipo de AERONAVE e um supertipo de AVIÃO TURBINADO e PLANADOR. AVIÃO A JATO herda os atributos e relações de AVIÃO TURBINADO, AVIÃO E AERONAVE. 68 MODELANDO RELACIONAMENTOS EXCLUSIVOS Modelar dois ou mais relacionamentos mutuamente exclusivos vindos da mesma entidade usando um arco. Exemplo Uma CONTA BANCÁRIA qualquer deve ser apropriada a um INDIVÍDUO ou apropriada a uma COMPANHIA. Usar o arco para modelar este relacionamento. CONTA BANCÁRIA Adquirida pora o dono da INDIVÍDUO Adquirida por COMPANHIA o dono da Regras de Leitura das Relações Exclusivas “Cada entidadeA qualquer entidade1 relacionamento1 ou entidade2 relacionamento2.” Exemplo Cada CONTA BANCÁRIA deve ser adquirida por um e somente um INDIVÍDUO ou por uma e somente uma COMPANHIA. Convenções da Modelagem de Arcos • Os relacionamentos em um arco tem frequentemente o mesmo nome. • Os relacionamentos em um arco devem ser todas obrigatórias ou todas opcionais. • Um arco pertence a uma só entidade e devem incluir somente relacionamentos vindos desta entidade. • Uma entidade deve ter vários arcos, mas um relacionamento específico somente pode participar de um único arco. 69 Modelando Relacionamenots Exclusivos-cont. Escolha entre duas convenções para desenhar arcos. Convenção de Desenho1-Um Arco com Pontos Opcionais Um ponto no arco é usado para significar que um relacionamento pertence ao arco. Convenção de Desenho2-Um Arco sem Pontos Qualquer relacionamento cruzado pelo arco pertence a ele. Uma quebra no arco indica que o relacionamento não está incluído no arco. 70 EXERCÍCIO 4-5 Desenvolva um MER baseado nas seguintes informações: “A companhia Right-Way Rental Truck aluga pequenos caminhões e trailers para uso local e/ou one way. Temos 347 pontos de aluguéis (escritórios) no Oeste dos EUA. Nossa frota possui um total de 5780 veículos, incluindo vários tipos de caminhões e trailers. Precisamos implementar um sistema para controlar os contratos de locação e alocação de veículos. Cada escritório aluga veículos que estão em estoque para clientes prontos para tomarem posse do veículo. Não fazemos reservas e nem especulamos quando o cliente vai retornar um veículo alugado. A matriz gerencia a distribuição e direciona a transferência de veículos de um escritório a outro. Cada escritório possui um nome e um número de três dígitos que o identifica. Também mantemos o endereço de cada escritório. Cada escritório funciona como uma base para os veículos e cada veículo está baseado em um único escritório. Cada veículo possui um código, situação de registro e número de licença. Temos diferentes tipos de veículos: truck 36, truck 24, truck 10, trailer comum e motorhome. Usamos códigos para identificar cada tipo de veículo. Para cada veículo, guardamos a última data de manutenção e a data do vencimento da licença. Com relação aos caminhões, precisamos guardar quantos quilômetros o odômetro está marcando, a capacidade do tanque e se o veículo possui ou não um rádio. Para grandes viagens, os clientes preferem caminhões equipados com rádio. Assim que alugamos um caminhão, guardamos a quilometragem corrente. Este procedimento é repetido quando o caminhão é devolvido. A maioria dos contratos de aluguéis são para pessoas físicas, apesar da gente também fazer contratos com empresas. Alugamos uma porcentagem de nossos caminhões e trailers para empresas. Para cada nova companhia cadastrada, fornecemos um código e guardamos seu nome e endereço. Para nós da matriz não nos interessa mais qualquer outras informações sobre elas. Para cada cliente pessoa física, mantemos seu nome, telefone residencial, endereço, número da carteira de habilitação e a data do vencimento da habilitação. Além disso, se o cliente danificou o veículo ou não pagou a conta nós o taxamos de “inválido” e nunca mais alugaremos veículos para el outra vez. Cada contrato de locação é feito para apenas um cliente (físico ou jurídico) e apenas um veículo. Claro que temos clientes que alugam mais de um veículo ao mesmo tempo, mas fazemos um contrato para cada locação. Aliás, cada contrato é identificado por um número de contrato e pelo número de escritório do qual o veículo foi retirado. Também guardamos a data do contrato, a duração (esperada) da locação, o número do escritório em que o veículo é devolvido, o valor do depósito, a taxa de locação diária e a taxa de quilometragem. Para trailers não controlamos a quilometragem. IMPORTANTE: não queremos automatizar o lado financeiro, apenas os contratos de locação.” 71 MODELANDO DADOS NO TEMPO Adicione entidades e relacionamentos ao modelo E-R para acomodar dados históricos. Perguntar ao Usuário: • É necessário uma auditoria? • Os valores dos atributos podem mudar no tempo? • As relações podem mudar no tempo? • Você precisa examinar dados antigos? • Você precisa manter versões prévias? Nota Rápida • Validar quaisquer requerimentos para armazenamento de dados históricos com o usuário. Armazenar dados históricos desnecessários pode ser muito CARO. 72 Modelando Dados no tempo. Criar uma entidade adicional para mapear o valor de um atributo no tempo. Exemplo Uma firma de consultoria precisa manter informações sobre seus contratos. Cada contrato tem um único id de contrato, eles precisam manter a descrição do contrato e o status do contrato (aberto, fechado, ou suspenso). Inicialmente a seguinte entidade CONTRATO foi modelada. CONTRATO #*id *descrição *valor do status *data efetiva A entidade CONTRATO acima suporta um único valor de status corrente para CONTRATO. A lei da firma quer traçar as datas em que cada um foi aberto, foi fechado e foi suspenso. Para modelar valores de status excedentes, adicione uma entidade STATUS. STATUS #*data efetiva *valor o estado de de CONTRATO #*id *descrição *valor do status *data efetiva O UID entidade STATUS é relacionado ao CONTRATO e a data efetiva. Nota Rápida • Usar uma única entidade para gravar os valores no tempo dos vários atributos associados com uma entidade (tanto como o CONTRATO). Modelando Dados no tempo. Adicione uma nova entidade para comportar um relacionamento que pode mudar no tempo. Exemplo: 73 Um proprietario de imóveis deseja registrar dados de locação de seus apartamentos. O modelo abaixo registra apenas o locatário atual de um apartamento. APARTAMENTO #*codigo *endereço PESSOA #*id *ultimo_nome *primeiro_nome Alugado por O locatário de Adicione a entidade “histórico de alugueis” para capturar os valores do relacionamento de locação no tempo. Histórico de locação #*da_data_de 0 para_data_de para PESSOA #*id *ultimo_nome *primeiro_nome para O locatário de Locado por APARTAMENTO #*codigo *endereço Modelando Dados no tempo - cont. Uma entidade intersecção é frequentemente usada para guardar informações sobre relações que mudam no tempo. Exemplo Uma sociedade profissional quer mapear a relação entre as companhias e seus membros . Há um relacionamento M:M entre cada membro e cada companhia. 74 MEMBRO #*id *sobrenome *nome contratado por o contratante de COMPANHIA #*código *nome Adicione uma entidade intersecção, HISTÓRICO DO EMPREGO, para traçar cada contratação dos empregados no tempo e as datas destes empregos. HISTÓRICO DO DO EMPREGO #*a partir da data o até a data para para empregado por MEMBRO #*id *sobrenome *nome contratante de COMPANHIA #*código *nome Pela inclusão do atributo “ a partir da data” UID de HISTÓRICO DO EMPREGO, este modelo traçará vários termos do EMPREGO em uma única empresa por um único empregado. EXERCÍCIO 4-6 Modificar o MER do exercício 3-6 (locadora de vídeo) para acomodar as seguintes informações adicionais que seguem: “Nós realmente precisamos manter o histórico de nossos aluguéis. Cada vez que um cliente aluga uma fita queremos manter a data do aluguel e a data do retorno. Mantendo esse histórico de aluguel, seremos capazes de analisar o padrão de nossos aluguéis. Poderemos determinar quantas fitas cada cliente aluga e quantas vezes um cliente devolveu a fita com atraso. Seremos capazes de saber quantas fitas em particular foram usadas e então saberemos quando retirar cada fita. Também seremos capazes de analisar as preferências de filmes de nossos clientes.” 75 CLIENTE #*número * nome * sobrenome o telefone ESTRELA EM CARTAZ o locatário para para estrelado por alugada por FITA #*número *formato a cópia de em FILME #*id *título o categoria estrelando em ATOR #*código *nome artístico o nome real o data de nascimento 76 MODELANDO RELACIONAMENTOS COMPLEXOS Atenção aos anéis de relacionamentos M:M. Exemplo Desenvolver um modelo E-R para o histórico de emprego. Para cada pessoa guarde o cargo ocupado, companhia em que trabalhou e a data em que cargo foi ocupado. Uma pessoa pode ocupar vários cargos dentro de uma empresa ao longo de uma carreira. Inicialmente o seguinte modelo foi definido. ocupante de PESSOA #*id *sobrenome *nome POSIÇÃO #*título do trabalho o descrição ocupado por contratado incluido no por o empregado de o empregado de COMPANHIA #*código *nome A data do cargo parece ser um atributo do relacionamento. Então resolva cada relação M:M. PESSOA #*id *sobrenome *nome contratado em para HISTÓRIA DO CARGO POSIÇÃO #*título do trabalho o descrição para ocupado por o assunto de contratado em para HISTÓRIA COMPANHIA HISTÓRIA ORGANIZAÇÃO para para o empregado para o empregado para COMPANHIA #*código *nome Os atributos data do cargo pertencem a qual entidade intersecção? Todos eles? Nenhum deles? Modelando Relacionamentos Complexos-cont. 77 Modelando um relacionamento entre três ou mais entidades como uma Entidade Intersecção com relacionamento obrigatórios com estas entidades. Exemplo O histórico de um emprego de uma pessoa é na real um relacionamento de 3 direções entre entidades PESSOA, COMPANHIA e CARGO. Usar uma única entidade intersecção chamada HISTÓRICO DO EMPREGO para modelar este relacionamento. HISTÓRICO DO EMPREGO #*datado de * datado para em em COMPANHIA #*código empregador *nome de para incluído CARGO #*título *descrição uma parte de PESSOA #*id *sobrenome *nome Um relacionamento complexo é uma relação entre três ou mais entidades. Notas Rápidas • Uma entidade intersecção em um relacionamento complexo sempre tem relações obrigatórias com as entidades que estão relacionadas. • Para uma entidade intersecção representar um relacionamento complexo, siga as regras da modelagem E-R básica para nomear as entidades e analisar e modelar suas relações, seus atributos e seu UID. • Considerar suas relações obrigatórias como candidatas à inclusão no seu UID. EXERCÍCIO 4-7 No MER do exercicio 3-10 (grupo de usuários) um relacionamento M:M foi modelado entre as entidades MEMBRO e PLATAFORMA. Revise o relacionamento baseando-se nas seguintes informações: “Não, nós realmente não precisamos saber qual plataforma de computador que cada membro esta usando. Em vez disso, que necessitamos saber é quais produtos ORACLE(RDBMS, POR_C, etc) cada membro esta usando e em quais plataformas de computador. Não é necessário manter a versão especifica de cada produto, seu nome é suficiente. 78 Usuário de MEMBRO *nome *sobrenome 0 cargo 0 anuidades recebidas * endereço 0 fone 0 tipo 0 PLATAFORMA #*id * descrição Usado por EXERCÍCIO 4-8 Desenvolva um modelo para o seguinte negócio: “Eu sou o sócio senior de uma grande e diversificada empresa de advogacia. Minha empresa, Bailey e Associados, trata de uma grande variedade de casos, incluindo trafico, violações, disputas domesticas, questões civis, e casos de homicidios. Nos temos pago um administrador de banco de dados para organizar e mapear vários dados porque a empresa cresceu mais rápido que imaginavamos e agora há casos caindo um atras do outro. Nossa empresa é constituida de departamentos como homicidio, roubo, etc, e cada caso é encaminhado para um departamento particular por razões administrativas. Advogados são tambem lotados em departamentos específicos , mas isto somente para efeito de apropriação de despesass e pagamento, pois um advogado pode trabalhar em casos de outros departamentos. Nos necessitamos uma lista de eventos par um dado caso(essencialmente uma historia para o caso) que inclua um relação de eventos e a data que cada evento tornou-se efetivo. Casos tem que ser identificados por um único numero o qual aparece numa lista com cada data e descrição do evento. Eventos tem codigos especiais, como A para abertura, P para perdido, J para julgamento, e deve ali ser sempre um estado de evento para cada caso. Nós queremos guardar a trilha de informações importantes associadas com o caso incluindo o departamento relacionado e uma breve descrição( com Jones versus Jones). Após um caso ter sido fechado, ele pode ser reaberto numa data futura. Nós atribuimos para casos reabertos novo numero , mas nos precisamos associar o novo numero com o anterior. Advogados podem ser envolvidos em vários casos da mesma maneira varia s pessoas podem ser envolvidas em vários casos. Por exemplo, Jones pode ser um Juiz em um caso e uma testemunha num outro. Nos estamos interessados em guardar as participações e os papeis que eles exerceram no contexto de um particular caso. Envolvimentos devem ser identificados pelo seu nome e a data de nascimento, através de sistema de numeração única. Os tipos de pessoas que podem ser 79 envolvidas nos casos incluem Juizes(JU), Testemunhas oculares (TO), defensores(DF), e naturalmente Advogados (AD). Por exemplo, nos temos um caso de assassinato, e estamos trabalhando na defesa. Um advogado é designado para o caso, há um juiz presidindo o caso e tambem uma testemunha ocular. Então há quatro pessoas que participam deste caso, e nos precisamos saber tudo a respeito delas. Neste contexto, estamos vendo o advogado simplesmente como parte do caso, e não como uma conta. Para registrar os vários papéis que pessoas podem assumir, considere que elas podem participar em diferentes papeis em diferentes casos, mas apenas num único papel em cada caso . 80 81 Modelo Relacional O Modelo Relacional (MR) foi inicialmente introduzido por Codd (1977) e representa os dados em um banco de dados como uma coleção de relações (tabelas). Observe exemplo na figura 1. EMPREG Matrícula 111 222 333 444 321 123 001 Nome PEDRO MARIA JOAO ANA CARLOS CLAUDIA MARCOS Sexo M F M F M F M Salário R$ 1.000,00 R$ 2.000,00 R$ 120,00 R$ 120,00 R$ 150,00 R$ 359,00 R$ 120,00 Figura 1 – Exemplo de relação (tabela) Cada linha é denominada tupla; o nome de uma coluna é chamado de atributo; a tabela é chamada de relação. Um domínio D é uma coleção de valores atômicos (que não podem ser divididos). Um domínio está associado a colunas de tabelas. Considere o seguintes exemplos: Matrícula: conjunto de valores de três dígitos, numéricos, positivos e inteiros. Nome: conjunto de nomes de pessoas; Salário: conjunto de valores numéricos monetários, entre 120,00 e 2000,00. Um esquema de relação é usado para descrever uma relação. Um esquema de relação R, denotado por R(A1, A2, ..., An), é um conjunto de atributos R = {A1, A2, ..., An}. Cada atributo possui um domínio denotado por dom(Ai ). Cada atributo Ai é o nome do papel de um domínio na relação (por exemplo, o atributo nome refere-se ao papel do domínio de conjunto de nomes de pessoas). O grau de uma relação é o número de atributos n de seu esquema de relação. A relação EMPREG, que possui 4 atributos (grau = 4), pode ser representada segundo o seguinte esquema de relação: EMPREG (Matrícula, Nome, Sexo, Salário) Uma relação r (instância de relação) do esquema de relação R(A1, A2, ..., An), também denotado por r(R), é um conjunto de n-tuplas r = {t1, t2, ..., tm}. O esquema da relação descreve a estrutura da relação; a relação (ou instância da relação) é o conjunto de valores de dados em um determinado instante do mundo real (Observe que, na definição de relação, não se especifica qualquer ordenação para as tuplas de uma relação). Cada n-tupla é uma lista ordenada de valores t = <v1, v2, ..., vn>, onde cada valor vi, 1 < i < n, é um elemento de dom(Ai ) ou um valor nulo. Uma relação r(R) é um subconjunto do produto cartesiano dos domínios que definem R (o produto cartesiano especifica todas as possíveis combinações de valores dos domínios): r(R) ⊆ ( dom(A1) X dom(A2) X ...... X dom(An) ) 82 Se a cardinalidade de um domínio D é | D |, assumindo todos os domínios com finitos, o número total de tuplas do produto cartesiano é | dom(A1) | * | dom(A2) | * ...... * | dom(An) | A relação, ou instância da relação, é modificada com o tempo, para refletir as alterações do mundo real. O esquema de uma relação é mais estático do que a instância da relação (a alteração do esquema da relação ocorre, por exemplo, quando um novo atributo é adicionado). Vários atributos podem ter o mesmo domínio, mas em diferentes papéis. Por exemplo, os atributos telefone residencial e telefone comercial possui o mesmo domínio, mas indicam papéis distintos. Cada valor em uma tupla é um valor atômico. Portanto, atributos compostos e multivalorados não são permitidos. Atributos multivalorados devem ser representados através de relações separadas. Atributos compostos são representados somente pelos atributos componentes. Adicionalmente, valores nulos são aplicados em atributos de tuplas nos casos de valores não conhecidos e valores não aplicáveis. 2. Atributos Chave de uma Relação Todas as tuplas de uma relação devem ser distintas. Assim, duas tuplas não podem ter a mesma combinação de valores para todos os seus atributos. O subconjunto mínimo de atributos de uma relação onde não existem duas tuplas com a mesma combinação de valores para tais atributos é dito chave da relação (É comum ocorrer várias chaves candidatas para chave da relação). O valor dos atributos chave pode ser usado para identificar unicamente uma tupla em uma relação. Os atributos chave de uma relação constituem uma propriedade do esquema da relação, e não variam a medida em que a relação se modifica (inclusão e exclusão de tuplas). Os atributos selecionados para constituir a chave de um relação são comumente denominados de chave primária da relação (primary key - PK); a chave primária identifica cada tupla da relação. 3. Esquema e Instância de Banco de Dados Relacional Um esquema de banco de dados relacional S é um conjunto de esquemas de relação S = {R1, R2, ..., Rm} e um conjunto de restrições de integridade. Uma instância de banco de dados relacional (ou banco de dados relacional) DB de S é um conjunto de instâncias de relação DB = {r1, r2, ..., rm}, onde ri é uma instância de Ri, e cada instância de relação deve satisfazer as restrições de integridade do esquema de banco de dados relacional. EMPREG Nome Matric DEPTO NumDepto Endereço Sexo Salário DataNasc NumDepto MatricSuperv NomeDepto Figura 2 – Exemplo de esquema de banco de dados relacional 4. Restrições de Integridade em um Esquema de BD Relacional 83 A restrição de integridade de entidade indica que nenhum valor de chave primária pode assumir valor nulo (adicionalmente, valores para a chave primária devem ser únicos em uma relação), pois a chave primária é utilizada para identificar cada tupla de uma relação. A restrição de integridade referencial é uma restrição que é especificada entre duas relações, sendo utilizada para manter a consistência associada a tuplas de duas relações (uma tupla em uma relação está relacionada com uma tupla em outra relação). A integridade referencial entre relações é implementada através de chave estrangeira (foreign key FK). Considere dois esquemas de relação R1 e R2, onde um conjunto de atributos em R1 é denominado chave estrangeira (FK) se satisfaz as seguintes condições: Os atributos da FK (chave estrangeira) em R1 tem o mesmo domínio dos atributos PK (chave primária) em R2. O valor de FK em uma tupla t1 de R1 pode assumir os seguintes valores: • valor de PK de alguma tupla t2 de R2 (t1[FK] = t2[PK]), ou • valor nulo. Em um banco de dados com muitas relações, usualmente existirão muitas restrições de integridade referencial. Restrições de integridade referencial tipicamente surgem dos relacionamentos associados às entidades. Como exemplo, observe o atributo NumDepto no esquema de relação EMPREG; este atributo é uma chave estrangeira (FK), que referencia a chave primária (PK) no esquema de relação DEPTO, e implementa uma associação entre empregado e departamento (um empregado trabalha para um departamento). Cada tupla de EMPREGADO possui um valor para o atributo NumDepto que identifica um departamento. 5. Álgebra Relacional A álgebra relacional consiste em um conjunto de operações utilizadas para manipular relações. Uma consulta em um banco de dados que segue o modelo relacional é realizada através da aplicação de operações da álgebra relacional; por exemplo, uma consulta pode selecionar algumas tuplas de uma relação (os empregados de sexo masculino) e, adicionalmente, combinar tais tuplas com tuplas de outra relação (os empregados de sexo masculino e seus respectivos dependentes). Importante O resultado de cada operação da álgebra relacional é uma nova relação, que pode ser manipulada por outras operações da álgebra relacional. Assim, as operações da álgebra relacional são realizadas sobre relações inteiras (não em uma tupla (linha) da relação; o resultado dessas operações é encarado como uma nova relação. 5. Operação de Seleção A operação de seleção é utilizada para selecionar um subconjunto das tuplas de uma relação (linhas de uma tabela), a partir de uma condição de seleção. A seguinte notação pode ser utilizada, onde a operação de seleção é representada pela letra minúscula grega sigma (σ): σ <condição de seleção> (<nome da relação>) Para selecionar os empregados de sexo masculino, a partir da relação EMPREG da figura 1, aplica-se σ Sexo=’M’ (EMPREG) resultando na relação Matrícula 111 333 Nome PEDRO JOAO Sexo M M Salário R$ 1.000,00 R$ 120,00 84 321 001 CARLOS MARCOS M M R$ 150,00 R$ 120,00 Observe que a relação resultante possui os mesmos atributos da relação utilizada na operação. Na <condição de seleção>, pode-se utilizar os operadores de comparação { = , < , > , ≠ , ≤ , ≥ }. Outros operadores são também utilizados: NOT, AND e OR; a operação σ (Sexo=’M’) AND (Salário > 120.00) (EMPREG) resulta na relação Matrícula 111 321 Nome PEDRO CARLOS Sexo M M Salário R$ 1.000,00 R$ 150,00 Na verdade, a operação de seleção é aplicada para cada tupla (linha) da relação, com o intuito de compor a relação resultante (conjunto resposta da operação). A operação de seleção é unária; isto é, é aplicada em uma única relação. O número de tuplas da relação resultante é sempre menor ou igual ao número de tuplas da relação utilizada na operação. A operação de seleção é comutativa: σ <cond 1> (σ <cond 2> (R) ) = σ <cond 2> (σ <cond 1> (R) ) Pode-se combinar operações em cascata em uma única operação que utiliza o operador AND: σ <cond 1> (σ <cond 2> (R) ) = σ <cond 1> AND <cond 2> (R) 6. Operação de Projeção A operação de projeção é utilizada para selecionar alguns atributos de uma relação (colunas de uma tabela), descartando os demais atributos. Considere a seguinte notação: π <lista de atributos> (<nome da relação>) Para selecionar somente o nome e o salário de empregados, a partir da relação EMPREG da figura 1, a operação π Nome, Salário (EMPREG) resulta na relação Nome Salário PEDRO R$ 1.000,00 MARIA R$ 2.000,00 JOAO R$ 120,00 ANA R$ 120,00 CARLOS R$ 150,00 CLAUDIA R$ 359,00 MARCOS R$ 120,00 A operação de projeção remove implicitamente as tuplas duplicadas presentes na relação resultante; tal situação pode ocorrer quando não são selecionados os atributos de chave primária da relação (imagine uma operação de projeção das colunas salário e sexo). O número de tuplas na relação resultante é sempre menor ou igual ao número de tuplas da relação utilizada na operação (devido a eliminação de tuplas duplicadas). A operação de projeção não é comutativa: π <lista 1> (π <lista 2> (R) ) ≠ π <lista 2> (π <lista 1> (R) ) A operação π <lista 1> (π <lista 2> (R) ) será igual a π <lista 1> (R), somente se <lista 2> possui os atributos de <lista 1>; caso contrário, um erro é caracterizado. 85 A operação T ← π Nome, Salário (σ Sexo=’M’ (EMPREG) ) resulta na relação T com o nome e o salário dos empregados de sexo masculino (operações de seleção e projeção). A referida operação pode ser apresentada da seguinte forma: S ← σ Sexo=’M’ (EMPREG) T ← π Nome, Salário (S) 7. Operação de Produto Cartesiano A operação de produto cartesiano é uma operação binária que combina as tuplas de ambas as relações envolvidas (tais relações não necessitam ser união-compatíveis). Considere duas relações R (A1, A2, ..., An) e S (B1, B2, ..., Bm); o resultado do produto cartesiano consiste em uma relação Q com n + m atributos: Q (A1, A2, ..., An, B1, B2, ..., Bm), nesta ordem. A relação resultante Q possui uma tupla para cada possível combinação de tuplas de R e S. Como exemplo, considere as relações da figura 3: EMPREG Matríc 111 222 123 001 Nome Sexo PEDRO M MARIA F CLAUDIA F MARCOS M Salário R$ 1.000,00 R$ 2.000,00 R$ 359,00 R$ 120,00 Dep VE EN VE EN DEPTO CodDep VE EN NomeDep VENDAS ENGENHARIA Figura 3 – Exemplo de banco de dados com 2 tabelas. O produto cartesiano, denotado por EMPREG X DEPTO, resulta na relação Matríc Nome Sexo Salário Dep CodDep NomeDep 111 PEDRO M R$ 1.000,00 VE VE VENDAS 111 PEDRO M R$ 1.000,00 VE EN ENGENHARIA 222 MARIA F R$ 2.000,00 EN VE VENDAS 222 MARIA F R$ 2.000,00 EN EN ENGENHARIA 123 CLAUDIA F R$ 359,00 VE VE VENDAS 123 CLAUDIA F R$ 359,00 VE EN ENGENHARIA 001 MARCOS M R$ 120,00 EN VE VENDAS 001 MARCOS M R$ 120,00 EN EN ENGENHARIA Observe que a relação resultante não possui significado prático, pois relaciona cada empregado com todos os departamentos (inclusive os departamentos que o empregado não está associado). Assim, é necessário aplicar a operação de seleção na relação resultante do produto cartesiano, relacionando cada empregado ao seu departamento associado. Para obter somente dados sobre os empregados e seus respectivos departamentos, pode-se escrever: σ Dep = ‘VE’ AND CodDep = ‘VE’ (EMPREG X DEPTO) ou σ EMPREG.Dep = ‘VE’ AND DEPTO.CodDep = ‘VE’ (EMPREG X DEPTO) 86 8. Operações de União, Interseção e Diferença As operações de união, interseção e diferença são ditas binárias, ou seja, são aplicadas em duas relações. Para entender tais operações, considere a existência das relações R e S, referentes aos alunos matriculados nos anos de 1996 e 1997, respectivamente. As relações que participam de tais operações devem ser união-compatíveis, significando que as relações R (A1, A2, ..., Nn) e S (B1, B2, ..., Bn): devem ter a mesma quantidade de atributos; e dom(Ai) = dom(Bi), para 1 ≤ i ≤ n. A operação de união, denotada por R ∪ S, resulta em uma relação que inclui todas as tuplas das relações R e S, onde as tuplas duplicadas serão eliminadas. Assim, R ∪ S resulta nos alunos que foram matriculados em 1996 ou em 1997. A operação de interseção, denotada por R ∩ S, resulta em uma relação que inclui todas as tuplas presentes em ambas as relações. Assim, R ∩ S resulta nos alunos que foram matriculados em 1996 e em 1997. A operação de diferença, denotada por R − S, resulta em uma relação que inclui todas as tuplas de R que não estão presentes em S. Assim, R − S resulta nos alunos que foram matriculados em 1996 e que não se matricularam em 1997. As operações de união e interseção são comutativas: R∪S = S∪R e R∩S = S∩R A operação de diferença não é comutativa: R−S ≠ S−R Observe que R ∩ S = R – (R – S) 9. Operação de Renomeação Para efetuar uma operação binária que envolva duas tabelas iguais, utiliza-se o operador de renomeação para eliminar possíveis ambigüidades. A expressão ρ EMPREG2 (EMPREG) renomeia a relação EMPREG para EMPREG2. A consulta “qual o empregado de maior salário ?” pode ser solucionada primeiramente buscando o maior salário e, então, pesquisando dados do(s) empregado(s) que possui(em) tal salário. Na expressão EMPREG X ρ EMPREG2 (EMPREG) o operador ρ renomeia EMPREG para EMPREG2 com o intuito de efetuar um produto cartesiano entre duas imagens da relação empregado. A expressão σ EMPREG.Salario < EMPREG2.Salario (EMPREG X ρ EMPREG2 (EMPREG) ) resulta em linhas do produto cartesiano onde o salário de EMPREG é sempre menor que o salário de EMPREG2; assim, cada linha de EMPREG é combinada com as linhas de EMPREG2 com maior salário. Pode-se concluir que no resultado do produto cartesiano não aparecerá o maior salário na imagem EMPREG, somente na imagem EMPREG2. A expressão S π EMPREG.Salario (σ EMPREG.Salario < EMPREG2.Salario (EMPREG X ρ EMPREG2 (EMPREG) ) ) resulta em uma relação que não inclui o maior salário (removendo implicitamente linhas duplicadas), como observado a seguir: 87 Salário R$ 1.000,00 R$ 120,00 R$ 150,00 R$ 359,00 Para obter o maior salário, pode-se utilizar a seguinte operação de diferença T π Salario (EMPREG) - S Assim, a consulta “qual o empregado de maior salário ?” poderia ser solucionada com a expressão: π Matric, Nome (σ EMPREG.Salario = T.Salario (EMPREG X T ) ) 10. Operação de Junção (Join) A operação de junção (join) é utilizada para combinar tuplas relacionadas de duas relações. Essa operação é fundamental pois permite processar relacionamentos entre relações. Para relacionar cada empregado com o seu departamento associado, a operação de junção (join), denotada por EMPREG Dep = CodDep DEPTO, a partir da figura 3, resulta na relação Matríc 111 222 123 001 Nome Sexo Salário PEDRO M R$ 1.000,00 MARIA F R$ 2.000,00 CLAUDIA F R$ 359,00 MARCOS M R$ 120,00 Dep VE EN VE EN CodDep VE EN VE EN NomeDep VENDAS ENGENHARIA VENDAS ENGENHARIA De forma didática, a operação de junção (join) consiste na aplicação da operação de seleção na relação resultante do produto cartesiano entre relações. A operação acima poderia ser apresentada como σ Dep = CodDep (EMPREG X DEPTO) Assim, a junção (join) resulta nas combinações de tuplas que satisfazem a condição, enquanto que o produto cartesiano resulta em todas as possíveis combinações de tuplas. Uma operação de junção (join) entre as relações R e S é apresentada como R <condição> AND <condição> AND ... AND <condição> S para <condição> igual a Ai θ Bj onde: Ai é atributo de R Bj é atributo de S Ai e Bj possuem o mesmo domínio θ consiste em uma da operações { = , < , ≤ , > , ≥ , ≠ } Um equijoin consiste em um join (junção) que utiliza o operador de igualdade (=) na condição de junção. O exemplo apresentado acima consiste em um equijoin. Um natural join consiste em um equijoin sem repetição de colunas envolvidas na condição de junção. O exemplo acima apresentado não constitui um natural join, pois ocorre tal repetição de condição no resultado da operação (Dep e CodDep). Para alguns autores, um natural join entre duas relações R e S é também denotado por R S. Um outer join mantém no resultado da operação as linhas que não satisfazem a condição de um natural join. Como exemplo, considere a relação abaixo que consiste no resultado de um outer join: Matríc 111 222 123 001 Nome PEDRO MARIA CLAUDIA MARCOS Sexo M F F M Salário Depto R$ 1.000,00 VE R$ 2.000,00 EN R$ 359,00 VE R$ 120,00 EN NomeDependente PEDRO FILHO < null > < null > MARCOS JUNIOR 88 A relação acima é resultado de um outer join entre as relações EMPREGADO e DEPENDENTE. Observe que os empregados 222 e 123, apesar de não possuírem dependentes, estão presentes nesta relação resultante. 11. Operação de Divisão Considere a consulta: “Qual o nome das livrarias que vendem todos os livros da editora LIVROS MODERNOS ??”. A expressão X σ NomeEd = ‘LIVROS MODERNOS’ (EDITORA ) obtém dados da referida editora. A expressão S π ISBN (X LIVRO ) retorna o código dos livros (ISBN) editados pela editora LIVROS MODERNOS. A expressão T π NomeLivraria, ISBN (LIVRARIA VENDE_LIVRO ) retorna linhas com o nome de livraria e código de livro que é vendido por tal livraria. A expressão T MODERNOS. ÷ S retorna os nomes de livrarias que vendem todos os livros da editora LIVROS 89 Modelo Relacional (cont...) Neste ponto, apresentaremos de forma sucinta alguns dos passos envolvidos ao mapeamento do Modelo Entidade Relacionamento para o Modelo Relacional. Os aspectos explorados neste documento deverão ser enriquecidos em análises complementares. Vale ressaltar que, para melhor entender os elementos apresentados, deve-se conhecer aspectos teóricos dos modelos envolvidos. 1. Para cada tipo de entidade E regular (não fraca) no esquema ER, cria-se uma relação R que inclui todos os atributos simples de E. Para os atributos compostos, deve-se incluir somente os atributos simples componentes. Deve-se selecionar um dos atributos chave de E (se existirem vários candidatos) como chave primária de R. 2. Para cada tipo de entidade fraca W no esquema ER, com tipo de entidade E que a identifica, criase uma relação R e inclui-se todos os atributos simples de W (e atributos simples componentes) como atributos de R. Adicionalmente, inclui-se como atributos de chave estrangeira (FK) em R os atributos de chave primária do tipo de entidade E (que identifica a entidade fraca). A chave primária (PK) de R é combinação da chave primária do tipo de entidade E com a chave parcial do tipo de entidade fraca W. 3. Para tipo de relacionamento 1:1 binário R no esquema ER, identificam-se as relações S e T que correspondem aos tipos de entidade que participam de R. Escolhe-se uma das relações e inclui-se como chave estrangeira (FK) dessa relação a chave primária (PK) da outra relação (por exemplo, inclui-se como FK em S a PK de T) (é melhor escolher um tipo de entidade com participação total em R) . Adicionalmente, todos os atributos simples (e atributos simples componentes) do tipo de relacionamento R devem ser incluídos em S. 4. Para cada tipo de relacionamento R binário 1:N, identifica-se a relação S que representa o tipo de entidade que participa do lado N do tipo de relacionamento. Inclui-se como chave estrangeira (FK) em S a chave primária da relação T que representa o outro tipo de entidade participante em R. Adicionalmente, inclui-se quaisquer atributos simples (e atributos simples componentes) do tipo de relacionamento R como atributo de S. 5. Para cada tipo de relacionamento R binário M:N, cria-se uma nova relação S para representar R. Inclui-se como atributos de chave estrangeira (FK) em S as chaves primárias das relações que representam os tipos de entidades participantes; tal combinação irá formar a chave primária de S. Inclui-se quaisquer atributos simples (e atributos simples componentes) de R como atributos de S. 6. Para cada atributo multivalorado A, cria-se uma nova relação R que inclui um atributo correspondente para A mais o atributo chave primária K da relação que representa o tipo de entidade ou tipo de relacionamento que tem A como um atributo. A chave primária (PK) de R é a combinação de A e K. Se o atributo multivalorado é composto, inclui-se seus atributos componentes. 7. Para cada tipo de relacionamento R, envolvendo n tipos de entidade, n > 2, cria-se uma nova relação S para representar R. Inclui-se como atributos de chave estrangeira (FK) em S as chaves primárias (PK) das relações que representam os tipos de entidade participantes. Adicionalmente, inclui-se quaisquer atributos simples de R (e atributos simples componentes) como atributos de S. A chave primária (PK) de S será a combinação de todas as chaves estrangeiras que referenciam as relações representando os tipos de entidades participantes (observe que se a restrição de participação (min, max) de um dos tipos de entidade E participante em R for max = 1, então a chave primária de S pode ser o único atributo de chave estrangeira (FK) que referencia tal relação). 90 Modelo Relacional (cont...) 1. Generalização/Especialização Através do conceito de generalização/especialização é possível atribuir propriedades particulares a um subconjunto das ocorrências (especializadas) de um tipo de entidade genérico. Observe o diagrama a seguir, onde um triângulo isósceles é utilizado para representar o conceito: CodCli Nome CLIENTE PES. FÍSICA CPF DataNasc PES. JURÍDICA Sexo CGC Ramo Figura 1 – Exemplo de generalização/especialização. Uma especialização deve ser usada quando sabe-se que as classes especializadas possuem propriedades (atributos, relacionamentos, generalizações, especializações) particulares. Na figura 1, uma pessoa física possui os atributos CPF e Sexo; uma pessoa jurídica possui os atributos CGC e Ramo de Atividade. Adicionalmente, as entidades especializadas herdam os atributos da entidade genérica. Uma forma de traduzir generalização/especialização para o modelo relacional, consiste em criar uma relação para o tipo de entidade genérica e, para cada tipo de entidade especializada, criar uma relação que inclua uma coluna para cada atributo desse tipo de entidade e uma coluna referente ao atributo chave do tipo de entidade genérica, que será o atributo chave da relação; tal atributo também será caracterizada como chave estrangeira. Da figura 1, pode-se obter: CLIENTE (CodCli, Nome, TipoPes) PES_FIS (CodCli, CPF, Sexo, DataNasc) PES_FIS (CodCli) referencia CLIENTE PES_JUR (CodCli, CGC, RamoAtiv) PES_JUR (CodCli) referencia CLIENTE Uma outra alternativa, preferida em generalização exclusiva (uma entidade genérica está associada a uma única entidade especializada) e total (cada entidade genérica deve pertencer a uma entidade especializada), consiste em criar uma relação para cada tipo de entidade especializada, que inclui os atributos desse tipo de entidade e do tipo de entidade genérica. Da figura 1, pode-se obter: PES_FIS (CodCli, Nome, CPF, Sexo, DataNasc) PES_JUR (CodCli, Nome, CGC, RamoAtiv) A segunda alternativa é preferida em generalização exclusiva (uma entidade genérica está associada a uma única entidade especializada) e total (cada entidade genérica deve pertencer a uma entidade especializada) 2. Entidade Associativa 91 Em algumas situações, pode-se concluir que é desejável permitir associação de uma entidade a um relacionamento. Considere que uma associação entre autor e livro, significando que um livro pode possui vários autores e um autor pode possuir a autoria de diversos livros. Ainda, deve-se saber as referências bibliográficas utilizadas por cada autor na autoria de cada livro. Considere o diagrama na figura 2: AUTOR LIVRO AUTORIA I BIBLIOGRAFIA Figura 2 – Exemplo de entidade associativa. Observe que AUTORIA é um tipo de relacionamento entre AUTOR e LIVRO. A associação entre BIBLIOGRAFIA e AUTORIA, através do tipo de relacionamento I, trata autoria como um tipo de entidade; tal característica é denominada entidade associativa. Uma entidade associativa pode ser tratada como uma entidade fraca, simplificando o modelo e facilitando sua transição para o modelo relacional, conforme a figura 3: AUTOR II AUTORIA III LIVRO I BIBLIOGRAFIA Figura 3 – Modelo equivalente à figura 2. Assim, o modelo da figura 3 poderia ser traduzido para o modelo relacional seguindo as regras anteriormente apresentadas, considerando tipo de entidade fraca e cardinalidade de tipo de relacionamento. 92 93 SQL Uma linguagem procedural fornece uma descrição detalhada de COMO um tarefa é realizada, operando sobre um registro ou uma unidade de dados a cada vez. Exemplos: Pascal, COBOL, etc. Uma linguagem não procedural é uma descrição de O QUE se deseja; o sistema deverá determinar a forma de fazer; a linguagem SQL é um exemplo dessa classe de linguagem. O contexto de atuação da SQL concentra-se em tabelas com as características: • Dados são gravados em um banco de dados feito de tabelas. • programa pede ao SQL que retorne dados para ele, sem qualquer preocupação com a estrutura física ou localização dos dados. • A estrutura das tabelas é definida dentro do banco de dados, não em cada programa. • A ordem das tabelas dentro do banco de dados não é importante,. Elas são identificadas por nome. • A ordem das colunas dentro de uma tabela não é importante. Elas são identificadas por nome. • A ordem das linhas dentro de uma tabela não é importante. Elas são identificadas pelos valores em suas colunas (chaves). • Os dados são sempre apresentados como uma tabela, independente da estrutura interna do banco de dados. O bom entendimento da álgebra relacional é uma questão fundamental no aprendizado de SQL. Uma consulta complexa pode parecer impossível, até que um dia você comece a pensar em operar sobre conjuntos de dados. Certas descobertas somente ocorrerão se você estiver sensibilizado com a filosofia relacional. A SQL surgiu no início da década de 70, por uma iniciativa da IBM. Nos últimos anos tornou-se a linguagem mais popular para acesso a bancos de dados, juntamente com a difusão de SGBDs relacionais. Existem iniciativas de padronizar a SQL, surgindo padrões SQL-86, SQL-89 e, mais recentemente, SQL-92. De forma geral, os SGBDs implementam padrão SQL e acrescentam características específicas ao padrão; cada SGBD procura incluir elementos que o possam diferenciar de concorrentes. Assim, podese observar diversos nomes para a SQL; por exemplo, Transact SQL para o SQL SERVER e PL SQL para ORACLE. Em nossa estudo, procuraremos apresentar SQL tão portável quanto possível, mas as instruções apresentadas poderão ser implementadas no SGBD SQL SERVER. 1. Elementos da SQL Em oportunidade anterior, vimos que SGBD é um software de propósito geral para: DEFINIÇÃO Implementação de esquema de banco de dados; ou seja, gravação da descrição de dados no banco de dados; ou seja, criação da instância “vazia” do banco de dados. CONSTRUÇÃO carga inicial do banco de dados; ou seja, criação da instância inicial do banco de dados. MANIPULAÇÃO uso do banco de dados, através de operações de consulta e atualização do diaa-dia. • Para a fase de definição, comandos SQL são responsáveis pela criação de tabelas, índices, regras, etc. Esta classe de comandos é conhecida como DDL (Data Definition Language). • A fase de construção é essencialmente aplicada através dos comandos de atualização (basicamente, comando INSERT). Alguns SGBDs trazem rotinas dedicadas a esta fase, na forma de programas e utilitários. • A fase de manipulação é aplicada com os comandos de atualização (INSERT, UPDATE e DELETE) e consulta (SELECT). Outros comandos podem ser observados: controle de transação, controle de acesso etc. 94 2. Esquema do Banco de Dados DEMO Em nosso banco de dados DEMO, o seguinte esquema pode ser caracterizado: DEPTO ( NumDep, Nome, MatrEmpr, DataInicGer ) DEPTO ( MatrEmpr ) REFERENCIA EMPR ( MatrEmpr ) PROJ PROJ ( NumProj, Nome, Local, NumDep ) ( NumDep ) REFERENCIA DEPTO ( NumDep ) EMPR EMPR EMPR ( MatrEmpr, PriNome, LetNome, UltNome, Ender, Sexo, Salario, DataNasc, NumDep, MatrSup ) ( NumDep ) REFERENCIA DEPTO ( NumDep ) ( MatrSup ) REFERENCIA EMPR ( MatrEmpr ) DEPEND DEPEND ( MatrEmpr, Nome, Sexo, DataNasc, Parent ) ( MatrEmpr ) REFERENCIA EMPR ( MatrEmpr ) TRABALHA_EM ( MatrEmpr, NumProj, Horas ) TRABALHA_EM ( MatrEmpr ) REFERENCIA TRABALHA_EM ( NumProj ) REFERENCIA EMPR ( MatrEmpr ) PROJ ( NumProj ) DEPTO_LOCAL ( NumDep, Local ) DEPTO_LOCAL ( NumDep ) REFERENCIA DEPTO ( NumDep ) Figura 1 – Esquema do banco de dados DEMO 3. Exemplo de Criação de Tabelas (DDL) TIPOS DE DADOS Cada SGBD implementa um conjunto de tipos de dados para a definição de atributos. Por exemplo, no SQL SERVER alguns dos tipos de dados são: Classe de Valores Valores Binários Cadeia de Caracteres Data e Hora Valores Numéricos Exatos Valores Numéricos Aproximados Valores Inteiros Valores Monetários Valores de Imagem e Texto Dados Especiais Tipo de Dado binary (n) varbinary (n) char (n) varchar (n) Datetime smalldatetime decimal (p[,s]) numeric (p[,s]) float (n) real int smallint tinyint money smallmoney text image bit timestamp Figura 2 – Alguns tipos de dados do SQL SERVER CRIAÇÃO DA TABELA EMPR Alternativa 1: CREATE TABLE EMPR ( MatrEmpr char(06) NOT NULL ,PriNome varchar(30) NOT NULL ,LetNome char(01) NULL ,UltNome varchar(30) NOT NULL ,Ender varchar(40) NULL ,Sexo char(01) NOT NULL CHECK (Sexo = ‘M’ OR Sexo = ‘F’) ,Salario smallmoney NULL ,DataNasc smalldatetime NOT NULL ,NumDep smallint NOT NULL ,MatrSup char(10) NULL ,PRIMARY KEY (MatrEmpr) ,FOREIGN KEY (NumDep) REFERENCES DEPTO (NumDep) ,FOREIGN KEY (MatrSup) REFERENCES EMPR (MatrEmpr) ) Alternativa 2: 95 CREATE TABLE EMPR ( MatrEmpr char(06) NOT NULL ,PriNome varchar(30) NOT NULL ,LetNome char(01) NULL ,UltNome varchar(30) NOT NULL ,Ender varchar(40) NULL ,Sexo char(01) NOT NULL CHECK (Sexo = ‘M’ OR Sexo = ‘F’) ,Salario smallmoney NULL ,DataNasc smalldatetime NOT NULL ,NumDep smallint NOT NULL ,MatrSup char(10) NULL ,PRIMARY KEY (MatrEmpr) ) ALTER TABLE EMPR ADD FOREIGN KEY (NumDep) REFERENCES DEPTO (NumDep) ALTER TABLE EMPR ADD FOREIGN KEY (MatrSup) REFERENCES EMPR (MatrEmpr) Observações: • A sentença ‘CHECK (Sexo = ‘M’ OR Sexo = ‘F’)’ restringe o conjunto de valores para o dado Sexo. • A alternativa 2 utiliza a instrução ALTER TABLE para definir chaves estrageiras. CRIAÇÃO DA TABELA DEPTO CREATE TABLE DEPTO ( NumDep smallint NOT NULL ,Nome char(30) NOT NULL ,MatrEmpr char(06) NOT NULL ,DataInicGer smalldatetime NOT NULL DEFAULT getdate() ,PRIMARY KEY (NumDep) ,FOREIGN KEY (MatrEmpr) REFERENCES EMPR (MatrEmpr) ) Observações: • A sentença ‘DEFAULT getdate()’ atribui um valor default para o dado DataInicGer; um valor default é aquele que é assumido quando nenhum outro valor for explicitamente atribuído. No SQL SERVER, a função ‘getdate()’ retorna a data e hora atuais; no ORACLE, tal função chama-se ‘SYSDATE’. 96 SQL (2) 1. Consulta de Dados – Estrutura Básica A consulta em bancos de dados é efetuada através do comando SELECT. Uma sintaxe simplificada para este comando é: SELECT lista-de-dados FROM lista-de-tabelas WHERE condição-de-seleção Onde: lista-de-dados = refere-se às colunas que existirão no conjunto resposta da consulta. lista-de-tabelas = refere-se às tabelas que serão utilizadas como fonte de dados para a consulta. condição-de-seleção = será utilizada para a seleção de linhas da(s) tabela(s) consultada(s). A consulta SELECT * FROM EMPR retorna todas as linhas da tabela EMPR (todas as colunas). O uso de * (asterisco) após a cláusula SELECT implica que alterações na estrutura de uma tabela podem modificar o resultado da consulta; por exemplo, se uma nova coluna é incluída em uma tabela, o resultado da consulta irá incluir a nova coluna. A consulta SELECT * FROM EMPR WHERE Sexo = ‘M’ AND Salario > 500 retorna todas as linhas da tabela EMPR onde a condição composta ‘Sexo = M AND Salario > 500’ é satisfeita (todas as colunas). A consulta SELECT MatrEmpr, PriNome, UltNome FROM EMPR WHERE Sexo = ‘M’ AND Salario > 500 retorna todas as linhas da tabela EMPR onde a condição composta ‘Sexo = M AND Salario > 500’ é satisfeita; somente as colunas MatrEmpr, PriNome e UltNome estão presentes no resultado da consulta. Esta construção para o comando SELECT seleciona as colunas de uma consulta, e define a seqüência de apresentação dessas colunas. A consulta ‘Qual a matrícula dos empregados sem endereço cadastrado ?’ poderia ser implementada pelo comando SELECT MatrEmpr FROM EMPR WHERE Ender = NULL Observe que na cláusula WHERE existe uma condição que referencia explicitamente um valor nulo (NULL). 97 2. Consulta de Dados – Breves Dicas • • • • • • Inicie com a cláusula SELECT, e escreva uma lista do que você necessita para o conjunto resposta. Isso fornece a você uma meta e constitui o que deve ser apresentado ao usuário. Ponha todas as tabelas contendo as tabelas necessárias para complementar a lista SELEC dentro da cláusula FROM. Excessos podem ser removidos adiante. Todo o trabalho está na cláusula WHERE. Pense sobre a solução do problema em termos de conjuntos. As vezes, inverter a ordem da palavras ajuda; por exemplo, em vez de “Dê-me os carros de cor vermelha”, diga “Vermelha é a cor de todos os carros que eu preciso”. As vezes, negar o que se deseja pode ajudar; por exemplo, em vez de “Dê-me os carros que atendem a todos os requisitos de teste”, diga “Eu não quero aqueles carros que falharam em quaisquer dos critérios de teste”. Esteja atento a sua lógica. Diferentemente de linguagens procedurais, SQL requer que todos o trabalho seja feito em uma única expressão, que pode ser complexa. Lembre-se que valores nulos (NULLS) podem ocorrer em todos os possíveis lugares. 3. Consulta de Dados – Alteração de Identificação de Colunas A consulta SELECT MatrEmpr, PriNome, UltNome FROM EMPR WHERE Sexo = ‘M’ AND Salario > 500 poderia retornar o seguinte conjunto resposta, onde os nomes de coluna são os mesmos da tabela de origem: MatrEmpr 981234 981232 981212 PriNome JOSE LEO PAULO UltNome SILVA CARDOSO VIEIRA A consulta SELECT MatrEmpr ‘Matricula’, PriNome ‘Primeiro Nome’, UltNome ‘Ultimo Nome’ FROM EMPR WHERE Sexo = ‘M’ AND Salario > 500 retorna o seguinte conjunto resposta, que possui novos nomes de coluna: Matricula 981234 981232 981212 Primeiro Nome JOSE LEO PAULO Ultimo Nome SILVA CARDOSO VIEIRA OBSERVAÇÕES: • A primeira coluna do conjunto resposta teve seu nome modificado de MatrEmpr para Matricula. Esta mudança poderia ser efetuada de 4 formas distintas: (I) MatrEmpr ‘Matricula’ (II) MatrEmpr Matricula (III) ‘Matricula’ = MatrEmpr (IV) Matricula MatrEmpr As alternativas (II) e (IV) somente podem ser utilizadas se o novo nome de coluna for um identificador; por exemplo, a expressão PriNome Primeiro Nome não pode ser utilizada, mas a expressão PriNome Primeiro_Nome é possivel, alterando o nome de coluna de PriNome para Primeiro_Nome. 98 4. Consulta de Dados – Inclusão de Valores Constantes A consulta SELECT ‘Os dados do empregado são:’, MatrEmpr, PriNome, UltNome FROM EMPR WHERE Sexo = ‘M’ AND Salario > 500 poderia retornar o seguinte conjunto resposta, onde a primeira coluna possui um valor constante: Os dados do empregado são: Os dados do empregado são: Os dados do empregado são: MatrEmpr 981234 981232 981212 PriNome JOSE LEO PAULO UltNome SILVA CARDOSO VIEIRA 5. Consulta de Dados – Computação de Valores A consulta SELECT MatrEmpr, PriNome, UltNome, Salario, Salario * 1.1 NovoSavario FROM EMPR WHERE Sexo = ‘M’ AND Salario > 500 poderia retornar o seguinte conjunto resposta, onde a coluna NovoSalario possui o valor do salário original acrescido de 10 %: MatrEmpr 981234 981232 981212 PriNome JOSE LEO PAULO UltNome SILVA CARDOSO VIEIRA Salario 600 700 800 NovoSalario 660 770 880 OBSERVAÇÕES: • • Se a computação envolver algum operador com valor nulo, o resultado da operação também será nulo. A ordem de precedência envolve inicialmente as operações de multiplicação (*), divisão (/) e módulo (%), seguidas das operações de adição (+) e subtração (-); o uso de parêntesis na expressão aritmética pode alterar essa ordem de precedência. 6. Consulta de Dados – Computação na Seleção de Linhas A consulta SELECT MatrEmpr, PriNome, UltNome, Salario, Salario * 1.1 NovoSavario FROM EMPR WHERE Sexo = ‘M’ AND Salario > 500 AND (Salario + 60) < (Salario * 1.1) poderia retornar o seguinte conjunto resposta, onde a condição de seleção de linhas possui uma computação de valores: MatrEmpr 981232 981212 PriNome LEO PAULO UltNome CARDOSO VIEIRA Salario 700 800 NovoSalario 770 880 99 SQL (3) 1. Seleção de Linhas Através de Operadores de Comparação A cláusula WHERE especifica um critério para a seleção de linhas. Os seguintes operadores de comparação estão disponíveis: Operador = > < >= <= <> !> !< Descrição igual a maior do que menor do que maior ou igual a menor ou igual a diferente de não maior do que não menor do que OBSERVAÇÕES: • A cláusula NOT pode ser utilizada para negar o valor da condição; por exemplo: WHERE NOT Sexo = ‘M’ 2. Seleção de Linhas Através de Faixa de Valores A cláusula BETWEEN especifica um critério para a seleção de linhas, através da definição de uma faixa de valores. SINTAXE: SELECT lista-de-colunas FROM tabela WHERE expressão [ NOT ] BETWEEN expressão AND expressão O comando SELECT MatrEmpr, PriNome, UltNome FROM EMPR WHERE Salario BETWEEN 500 AND 1000 seleciona a matrícula, primeiro nome e último nome dos empregados com salário entre 500 e 1000, inclusive. OBSERVAÇÕES: • A faixa de valores definida por BETWEEN e AND inclui os valores limites da faixa; • O uso de expressão BETWEEN x AND y não possui a mesma semântica de expressão > x AND expressão < y pois a cláusula BETWEEN define uma faixa de valores, onde os valores limites dessa faixa estão incluídos no intervalo; • A cláusula NOT pode ser utilizada para negar o valor da condição. 100 3. Seleção de Linhas Através de Lista de Valores No presente contexto, a cláusula IN permite a seleção linhas a partir da comparação de um valor com um conjunto de valores presentes em uma lista. SINTAXE: SELECT lista-de-colunas FROM tabela WHERE expressão [ NOT ] IN lista-de-valores O comando SELECT MatrEmpr, PriNome, UltNome FROM EMPR WHERE Salario IN (500, 600, 700) seleciona a matrícula, primeiro nome e último nome dos empregados com salário igual a 500, 600 ou 700. OBSERVAÇÕES: • A cláusula NOT pode ser utilizada para negar o valor da condição. 4. Seleção de Linhas Através de Padrões de Caracteres A cláusula LIKE pode ser utilizada para selecionar linhas através de combinação de padrões de caracteres. Os seguintes caracteres especiais são utilizados na definição de padrões de caracteres: Caracteres Especiais % _ [] [^] Descrição qualquer string (cadeia) de zero ou mais caracteres qualquer caractere (um único caractere) define uma lista de valores para um único caractere, para observar se um caractere está presente nessa lista define uma lista de valores para um único caractere, para observar se um caractere não está presente nessa lista Para um melhor entendimento, considere os exemplos abaixo: ‘P%’ ‘%P’ ‘%P%’ ‘_P%’ ‘[CP]%’ ‘[^CP]%’ ‘%SILVA%’ cadeia que inicia com o caractere ‘P’ cadeia que termina com o caractere ‘P’ cadeia que possui o caractere ‘P’ cadeia cujo segundo elemento é o caractere ‘P’ cadeia que inicia com os caracteres ‘C’ ou ‘P’ cadeia que não inicia com os caracteres ‘C’ ou ‘P’ cadeia que possui a seqüência SILVA SINTAXE: SELECT lista-de-colunas FROM tabela WHERE { expressão [ NOT ] LIKE expressão | [ NOT ] expressão LIKE expressão } O comando SELECT MatrEmpr, PriNome, UltNome FROM EMPR WHERE PriNome LIKE ‘R%O’ seleciona a matrícula, primeiro nome e último nome dos empregados cujo primeiro nome inicia com a letra R e termina com a letra O. OBSERVAÇÕES: • A cláusula NOT pode ser utilizada para negar o valor da condição. 101 5. Eliminação de Linhas Duplicadas A cláusula DISTINCT elimina linhas duplicadas no resultado de uma consulta, caso existam. SINTAXE: SELECT [ DISTINCT | ALL ] lista-de-colunas FROM tabela WHERE condição O comando SELECT DISTINCT MatrEmpr FROM DEPEND retorna a matrícula dos empregados que possuem dependentes; observe que se um empregado possui mais de um empregado, sua matrícula aparece uma única vez no resultado da consulta. OBSERVAÇÕES: • Uma duplicação de linha é somente caracterizada se todos as colunas da referida linha são iguais às colunas de alguma linha já existentes na tabela; • A cláusula ALL especifica que todas as linhas do resultado de uma consulta serão consideradas, independentes de ocorrências de duplicação; essa é conduta default para o comando SELECT; • No contexto de eliminação de linhas duplicadas, uma ocorrência de valor nulo é considerado igual a outro valor nulo. 6. Ordenação do Resultado de uma Consulta A cláusula ORDER BY ordena o resultado de uma consulta de acordo com uma ou mais colunas. SINTAXE: SELECT [ DISTINCT | ALL ] lista-de-colunas FROM tabela WHERE condição ORDER BY coluna [ ASC | DESC ] [ , coluna [ ASC | DESC ] ... ] O comando SELECT MatrEmpr, PriNome, UltNome FROM EMPR ORDER BY PriNome, UltNome apresentada uma relação de empregados, ordenada pelo primeiro nome e último nome. OBSERVAÇÕES: • A cláusula ASC determina a ordenação ascendente a partir da coluna especificada; a conduta dessa cláusula é encarada como default; • A cláusula DESC determina a ordenação descendente a partir da coluna especificada; • Se mais de uma coluna é especificada após a cláusula ORDER BY, a ordenação será aninhada; • A posição relativa de uma coluna após a cláusula SELECT pode ser usada na referência de colunas para ordenação; no exemplo SELECT MatrEmpr, PriNome, UltNome FROM EMPR ORDER BY 2, 3 a ordenação será efetuada a partir das colunas PriNome e UltNome, nessa ordem. 102 SQL (4) 1. Consulta de Dados em Várias Tabelas: Produto Cartesiano O comando SELECT permite que uma consulta solicite dados de várias tabelas; inúmeras composições podem ser realizadas a partir de dados de várias tabelas. Este item concentra-se em uma operação denominada Produto Cartesiano, conforme sintaxe abaixo: SINTAXE: SELECT lista-de-colunas FROM tabela [ , tabela ... ] Considere as seguintes tabelas: DEPTO NumDep 01 02 Nome VENDAS ENGENHARIA MatrEmpr 981222 981234 DataInicGer 01/10/1998 01/11/1998 PROJ NumProj P01 P03 P02 Nome DRENAGEM JUROS ZERO PAVIMENTACAO Local Plano Piloto Toda Cidade Planaltina NumDep 02 01 02 O comando SELECT * FROM DEPTO, PROJ resulta em NumDep 01 01 01 02 02 02 Nome VENDAS VENDAS VENDAS ENGENHARIA ENGENHARIA ENGENHARIA MatrEmpr 981222 981222 981222 981234 981234 981234 DataInicGer 01/10/1998 01/10/1998 01/10/1998 01/11/1998 01/11/1998 01/11/1998 NumProj P01 P03 P02 P01 P03 P02 Nome DRENAGEM JUROS ZERO PAVIMENTACAO DRENAGEM JUROS ZERO PAVIMENTACAO Local Plano Piloto Toda Cidade Planaltina Plano Piloto Toda Cidade Planaltina NumDep 02 01 02 02 01 02 Vale ressaltar que a coluna NumDep na tabela PROJ determina o departamento que controla um projeto. No conjunto de dados resultante, observa-se que cada linha da tabela DEPTO é concatenada com cada linha da tabela PROJ; assim, o conjunto resultante possui Ne x Nj linhas, onde Ne e Nj constituem a quantidade de linhas das tabelas DEPTO e PROJ, respectivamente. Embora o usuário que realizou a consulta possa ter tido a intenção de associar cada projeto com o departamento que o controla, a construção do exemplo não é adequada para tal necessidade. OBSERVAÇÕES: • É possível qualificar o nome de uma coluna, através da construção tabela.coluna. Exemplo 1: SELECT DEPTO.NumDep, DEPTO.Nome, PROJ.NumProj, PROJ.Nome FROM DEPTO, PROJ 103 Exemplo 2 (equivalente ao exemplo 1; apenas atribui sinônimo (alias) para cada tabela: D e P para as tabelas DEPTO e PROJ, respectivamente): SELECT D.NumDep, D.Nome, P.NumProj, P.Nome FROM DEPTO D, PROJ P • Na prática, a operação de produto cartesiano é pouca utilizada. 2. Consulta de Dados em Várias Tabelas: Junção (Join) Um Join (Junção) entre tabelas consiste, basicamente, na seleção de algumas linhas resultantes do produto cartesiano entre essas tabelas. Essa seleção consiste na utilização da cláusula WHERE, conforme sintaxe abaixo: SINTAXE: SELECT lista-de-colunas FROM tabela [ , tabela ... ] WHERE condição O comando SELECT * FROM DEPTO D, PROJ P WHERE D.NumDep = P.NumDep resulta em NumDep 01 02 02 Nome VENDAS ENGENHARIA ENGENHARIA MatrEmpr 981222 981234 981234 DataInicGer 01/10/1998 01/11/1998 01/11/1998 NumProj P03 P01 P02 Nome JUROS ZERO DRENAGEM PAVIMENTACAO Local Toda Cidade Plano Piloto Planaltina NumDep 01 02 02 No conjunto de dados resultante, observa-se que as linhas resultantes satisfazem a condição de junção: D.NumDep = P.NumDep (ou seja, um subconjunto do resultado do produto cartesiano). OBSERVAÇÕES: • Simplificando, o relacionamento entre tabelas é implementado através da presença de dados de coluna(s) de outra(s) tabela(s) no elenco de colunas de uma tabela; por exemplo, os dados da coluna NumDep da tabela DEPTO está presente na tabela PROJ em uma coluna também denominada NumDep. Aplicando boas regras de projeto, chamadas de regras de normalização, é possível utilizar operações de join de forma eficiente; • Qualquer operador de comparação pode ser utilizado na aplicação de um join. 3. Equijoin e Natural Join Um equijoin consiste em um join onde utiliza-se o operador de igualdade na comparação de colunas, e todas as colunas das tabelas envolvidas são incluídas no conjunto resposta da consulta. EXEMPLO DE EQUIJOIN: SELECT * FROM DEPTO D, PROJ P WHERE D.NumDep = P.NumDep No exemplo acima, a coluna NumDep aparece duas vezes no elenco de colunas resultantes, pois esta coluna está presente nas tabelas DEPTO e PROJ. Um natural join consiste em um equijoin sem qualquer repetição de colunas. A seguir, o exemplo de equijoin é alterado para caracterizar um exemplo de natural join. EXEMPLO DE NATURAL JOIN: SELECT D.NumDep, D.Nome, P.NomProj, P.Nome, P.Local FROM DEPTO D, PROJ P WHERE D.NumDep = P.NumDep 104 OBSERVAÇÕES: • O utilização de natural joins é um recurso para explorar a integridade referencial entre tabelas. Nos exemplos, o relacionamento entre as tabelas DEPTO e PROJ é implementado através da chave estrangeira NumDep na tabela PROJ. 4. Self-join Um Self-join é um join onde somente uma tabela está envolvida. Considere a tabela: EMPR MatrEmpr 981222 981225 981230 981250 PriNome JOSE LIA JOAO ANA LetNome M H Null Null UltNome SILVA NEVES CHAVES CARDOSO Ender CENTRO BARRA PRAIA CENTRO Sexo M F M F Salario 500.00 1200.00 1600.00 1000.00 DataNasc 01/12/1979 01/12/1975 01/10/1981 12/12/1976 NumDep 01 01 02 01 MatrSup 981225 981230 null 981225 O comando SELECT E.MatrSup, E.PriNome, E.UltNome, E.MatrSup, S.PriNome SupPriNome, SultNome SupUltNome FROM EMPR E, EMPR S WHERE E.MatrSup = S.MatrEmpr resulta em MatrEmpr 981222 981225 981250 PriNome JOSE LIA ANA UltNome SILVA NEVES CARDOSO MatrSup 981225 981230 981225 SupPriNome LIA JOAO LIA SupUltNome NEVES CHAVES NEVES A consulta associa dados de um empregado com dados de seu supervisor. Observe que as instâncias da tabela EMPR são referenciadas como E e S (E está associada ao empregado e ao supervisor). Em nosso contexto, um alias consiste em um sinônimo dado a uma tabela para referenciar cada instância envolvida. Observe que o empregado 981230 não aparece no resultado da consulta, pois ele não possui supervisor direto. 5. Join em Múltiplas Tabelas A operação de join pode ser aplicada em diversas tabelas. Considere a tabela TRABALHA_EM, que implementa a associação de empregados a projetos (cardinalidade N:N): TRABALHA_EM MatrEmpr 981222 981225 981222 981250 981250 NumProj P01 P02 P02 P01 P03 Horas 6 5 8 4 4 O comando SELECT E.MatrEmpr, E.PriNome, E.UltNome, P.NumProj, P.Nome, EP.Horas FROM EMPR E, PROJ P, TRABALHA_EM EP WHERE E.MatrEmpr = EP.MatrProj AND J.NumProj = EP.NumProj resulta em MatrEmpr 981222 981225 981222 981250 981250 PriNome JOSE LIA JOSE ANA ANA UltNome SILVA NEVES SILVA CARDOSO CARDOSO NumProj P01 P02 P02 P01 P03 Nome DRENAGEM PAVIMENTACAO PAVIMENTACAO DRENAGEM JUROS ZERO Horas 6 5 8 4 4 105 No exemplo, são consultados dados de empregado e de projetos em que este empregado trabalha. Observe que apesar de nenhuma coluna da tabela TRABALHA_EM estar presente no resultado da consulta, esta tabela é utilizada na operação de join. 6. Outer Join Em uma operação de equijoin, somente são incluídas as linhas que satisfazem a condição especificada na cláusula WHERE. Entretando, pode ser desejável que o conteúdo das colunas de uma tabela seja incluído no resultado da consulta. O comando SELECT E.MatrSup, E.PriNome, E.UltNome, E.MatrSup, S.PriNome SupPriNome, SultNome SupUltNome FROM EMPR E, EMPR S WHERE E.MatrSup *= S.MatrEmpr resulta em MatrEmpr 981222 981225 981230 981250 PriNome JOSE LIA JOAO ANA UltNome SILVA NEVES CHAVES CARDOSO MatrSup 981225 981230 Null 981225 SupPriNome LIA JOAO Null LIA SupUltNome NEVES CHAVES Null NEVES A consulta associa dados de um empregado com dados de seu supervisor. Observe a presença do operador *=, indica que todos os dados solicitados da tabela EMPR (instância de empregado, não de supervisor) serão incluídos no resultado da consulta, independente se o empregado possui supervisor. Um outer join é implementado através dos operadores =* e *=, onde a posição do asterisco indica qual tabela exibirá todos os dados selecionados, independente da condição que implementa o join ser avaliada como verdadeira ou falsa. 106 SQL (5) 1. Funções Agregadas - Sumário de Dados Funções agregadas são utilizadas para obter informações resumidas sobre a(s) tabela(s) consultada(s). As seguintes funções estão disponíveis: Função AVG COUNT COUNT MAX MIN SUM Parâmetros [ ALL | DISTINCT ] expressão [ ALL | DISTINCT ] expressão * expressão expressão [ ALL | DISTINCT ] expressão Comentário média das ocorrências de valores de uma expressão número de ocorrências de valores de uma expressão número de linhas selecionadas maior valor dentre as ocorrências de uma expressão menor valor dentre as ocorrências de uma expressão soma das ocorrências de valores de uma expressão O comando SELECT COUNT(*), AVG(Salario), MAX(Salario), COUNT(MatrSup) FROM EMPR resulta em 4 1075.00 1600.00 3 onde é solicitada quantidade de empregados, o salário médio dos empregados, o maior salario e a quantidade de empregados que possuem supervisor direto (MatrSup <> null). OBSERVAÇÕES: • A cláusula DISTINCT denota que ocorrências de valores repetidos não serão consideradas na aplicação da função agregada; ou seja, COUNT (DISTINCT Salário) informa a quantidade de faixas salariais (quantidade de salários distintos). • Somente um única é retornada quando se utiliza função agregada. 2. Agrupamento de Dados Uma tabela pode ser dividida em grupos de acordo com algum critério. Por exemplo, os empregados podem ser agrupados por sexo. A cláusula GROUP BY divide uma tabela em grupos. Funções agregadas são comumente utilizadas em agrupamento de dados, produzindo um valor para cada grupo. SINTAXE: SELECT lista-de-colunas FROM tabela WHERE condição GROUP BY [ ALL ] expressão [ , expressão ] [ HAVING condição ] O comando SELECT Sexo, COUNT(*), SUM(Salario), AVG(Salario) FROM EMPR GROUP BY Sexo resulta em Sexo F 2 2200.00 1100.00 M 2 2100.00 1050.00 No exemplo, são apresentados o sexo de empregado e, para cada sexo, a quantidade de empregados, o somatório de salários e a média de salário. Considere a tabela de dependentes: DEPEND 107 MatrEmpr 981222 981225 981222 981225 981250 Nome MARIA JOANA PEDRO MARIA PAULO Sexo F F M F M DataNasc 01/01/1989 01/01/1990 12/12/1998 11/11/1995 10/10/1996 Parent FILHO FILHO FILHO FILHO FILHO A consulta “Quais os empregados que possuem mais de 1 dependente ?” poderia ser respondida pelo comando SELECT MatrEmpr, COUNT(*) QtdeDepend FROM DEPEND GROUP BY MatrEmpr HAVING COUNT(*) > 1 resulta em MatrEmpr QtdeDepend 981222 2 981225 2 No exemplo, a tabela é dividida em grupos, onde cada grupo deve possuir linhas com o mesmo valor de MatrEmpr (ou seja, separa em cada grupo as linhas de cada empregado). A expressão SELECT MatrEmpr, COUNT(*) computa a quantidade de linhas em cada grupo (ou seja, a quantidade de dependentes para cada empregado) e a expressão HAVING COUNT(*) > 1 seleciona os grupos que possuem mais de uma linha. OBSERVAÇÕES: • Para fins didáticos, considere a sequência a seguir: 1) se a cláusula WHERE for utilizada, a consulta se inicia pela seleção de linhas solicitadas; 2) as linhas selecionadas são agrupadas, segundo os argumentos associados à cláusula GROUP BY; 3) se a cláusula HAVING for utilizada, a condição associada a essa cláusula é avaliada para a seleção de grupos; 4) as informações solicitadas na cláusula SELECT são extraídas de cada grupo selecionado, e fornecidas para o usuário; • Expressões associadas às cláusulas GROUP BY e WHERE não devem possuir funções agregadas; • A cláusula ALL inclui todos os grupos da consulta, independente da condição associada à cláusula HAVING. 108 SQL (6) 1. Subconsultas Uma subconsulta consiste em um comando SELECT posicionado dentro de um outro comando SQL. Em alguns casos, uma consulta pode requerer dados de uma outra consulta para ser processada. EXEMPLO 1: Como exemplo, considere a questão: Que empregado possui o maior salário ? Esta simples pergunta pode ser respondida através do seguinte comando SQL: SELECT MatrEmpr, PriNome, UltNome, Salario FROM EMPR WHERE Salario = <valor do salário mais alto> Observe que a informação <valor do salário mais alto> está indefinida, sendo necessário consultá-la no banco de dados; nesse caso, o maior valor para a coluna Salário da tabela EMPR pode ser obtido através do comando: SELECT MAX(Salario) FROM EMPR A construção sintática resultante, com um comando SELECT embutido em outro comando SELECT, é alcançada a partir da instrução: SELECT MatrEmpr, PriNome, UltNome, Salario FROM EMPR WHERE Salario = (SELECT MAX(Salario) FROM EMPR) EXEMPLO 2: Qual é o percentual de salário de cada empregado, em relação a soma geral de salários de todas os empregados ? SELECT MatrEmpr, PriNome, UltNome, Salario, 100 * Salario / (SELECT SUM(Salario) FROM EMPR) FROM titles Neste exemplo, pode-se observar que a consulta mais interna está associada à cláusula SELECT, diferentemente do exemplo anterior. Para cada empregado, é calculado um percentual de salário a partir da consulta mais interna, a qual informa o salário total de todas os empregados. OBSERVAÇÕES: • Instruções SELECT que possuem uma ou mais subconsultas são freqüentemente denominadas consultas aninhadas; • Os resultados da consulta mais externa são baseados nos resultados da consulta mais interna; • Uma subconsulta que retorna um conjunto de valores somente pode ser usada se associada à cláusula WHERE (diferentemente de subconsultas que retornam somente um valor). 109 Neste ponto, exploraremos as palavras IN, ANY, ALL e EXISTS, presentes na cláusula WHERE. SINTAXE PARA CLÁUSULA WHERE: WHERE expressão [ NOT ] IN ( subconsulta ) WHERE expressão operador-de-comparação [ ANY | ALL ] ( subconsulta ) WHERE [ NOT ] EXISTS ( subconsulta ) EXEMPLO 3: SELECT MatrEmpr, PriNome, UltNome FROM EMPR WHERE MatrEmpr IN (SELECT DISTINCT MatrEmpr FROM DEPTO) O exemplo acima seleciona os dados dos empregados que gerenciam algum departamento. O uso da cláusula IN resulta em observar se o que valores do atributo MatrEmpr da tabela EMPR estão presentes na lista resultante da subconsulta. EXEMPLO 4: SELECT MatrEmpr, PriNome, UltNome FROM EMPR WHERE EXISTS (SELECT MatrEmpr FROM DEPTO WHERE DEPTO.MatrEmpr = EMPR.MatrEmpr) O exemplo acima é semanticamente idêntico ao exemplo 3, ou seja, produz o mesmo conjunto resposta da consulta do exemplo 3. A cláusula EXISTS testa se a subconsulta produz alguma linha; se isso ocorrer, a condição é avaliada como verdadeira. OBSERVAÇÕES: • A cláusula IN associada a uma subconsulta resulta em testar se um valor está presente entre os valores produzidos pela subconsulta; se isso ocorrer a condição é avaliada como verdadeira, e, em caso contrário, a condição é avaliada como falsa; • A cláusula ANY possui semântica similar à cláusula IN, onde a condição será verdadeira se pelo menos um elemento da lista satisfizer a comparação; • A uso da cláusula ALL difere do uso da cláusula ANY, pois a condição somente será verdadeira se a comparação for satisfeita para todos os elementos da lista; • Com a cláusula EXISTS, a condição será verdadeira se a subconsulta retornar algum valor (pelo menos um elemento será produzido); • A cláusula NOT pode ser utilizada para negar o valor da condição. 110 2. Subconsultas Correlatas Em muitos casos, a implementação de subconsultas resulta na execução da subconsulta e, posteriormente, o comando SQL que possui a subconsulta é realizado. Pode ocorrer que a subconsulta utilize dados do comando SQL mais externo em sua sintaxe; neste caso, diz-se que a execução da subconsulta depende do comando SQL mais externo, caracterizando uma subconsulta correla. EXEMPLO: SELECT MatrEmpr, PriNome, UltNome FROM EMPR WHERE 1 < (SELECT COUNT(*) FROM TRABALHA_EM WHERE TRABALHA_EM.MatrEmpr = EMPR.MatrEmpr) O comando acima solicita a relação de empregados que trabalham em mais de um projeto. A subconsulta apresentada não pode ser executada independentemente do comando SQL a que pertence. A informação EMPR.MatrEmpr é necessária para a realização da subconsulta, e essa informação será diferente para cada linha da tabela EMPR. Para cada linha da tabela EMPR ocorre a execução da subconsulta, que é necessária à cláusula WHERE do comando SQL mais externo. OBSERVAÇÕES: • A avaliação da consulta mais interna depende da consulta mais externa, pois a primeira referencia dados da segunda. 111 SQL (7) 1. Atualização de Dados A atualização de dados envolve a inclusão, remoção e modificação dos dados de uma tabela, respectivamente através dos comandos INSERT, DELETE e UPDATE. Uma questão envolvida em atualização de dados é a manutenção da consistência do banco de dados. Por exemplo, uma manutenção em uma tabela pode requerer a atualização de dados em outra(s) tabela(s), significando que a consistência de dados só será alcançada com a atualização em conjunto das tabelas. As regras de integridade definidas no banco de dados constituem uma poderosa ferramenta para a manutenção da consistência de dados, impedindo a atualização de dados que não sigam as regras definidas. Outro recurso importante para a manutenção de consistência de dados refere-se à definição de transações de atualização. Por default, cada comando de atualização (INSERT, DELETE ou UPDATE) é encarado como uma única transação. A SQL fornece suporte para a definição de transações através do agrupamento de vários comandos de atualização. Permissões para atualização de dados podem ser atribuídas aos usuários do banco de dados. Assim, usuários não autorizados ficam impedidos de modificar o banco de dados, evitando as atualizações indevidas e conservando a consistência de dados. Nesta seção introduzimos os comandos de atualização de dados, e esses comandos devem ser utilizados de acordo com as políticas de consistência de dados do banco de dados envolvido. 2. Inclusão de Dados A adição de dados em uma tabela envolve o uso do comando INSERT. Basicamente, duas formas estão disponíveis para a inserção de dados: o usuário referencia explicitamente os dados que devem ser inseridos em uma tabela, ou os dados a serem inseridos serão fornecidos a partir de uma subconsulta. SINTAXE 1: INSERT [ INTO ] tabela [ ( coluna [ , coluna ... ] ) ] VALUES ( expressão [ , expressão ... ] ) EXEMPLO 1: INSERT INTO PROJ (NumProj, Nome, Local, NumDep) VALUES (‘P01’, ‘DRENAGEM’, ‘BARRA’, 2) No exemplo, é inserida uma linha na tabela PROJ, onde são referenciadas as colunas NumProj, Nome, Local e NumDep; as demais colunas, se existirem, irão assumir o valor NULL ou, se especificado na definição de dados, valores default serão assumidos. SINTAXE 2: INSERT [ INTO ] tabela [ ( coluna [ , coluna ... ] ) ] subconsulta EXEMPLO 2: Considere a existência de uma tabela denominada EMPR_NOVOS, a qual possui dados de novos empregados: INSERT INTO EMPR SELECT * FROM EMPR_NOVOS 112 No exemplo, o resultado da subconsulta constitui o conjunto de dados a serem inseridos. Assim, todas as linhas da tabela EMPR_NOVOS são incluídas na tabela EMPR. OBSERVAÇÕES: • O conjunto de dados a serem inseridos deve obedecer as restrições de integridades definidas, incluindo colunas obrigatórias, compatibilidade de tipos de dados e valores valores permitidos. Tal observação aplica-se à referência explícita de valores e ao uso de subconsultas. 3. Exclusão de Dados A exclusão de dados em uma tabela envolve o uso do comando DELETE. Para efetuar essa operação, deve-se especificar que conjunto de linhas será afetado pelo comando. SINTAXE: DELETE tabela [ FROM tabela [ , tabela ... ] [ WHERE condição ] EXEMPLO 1: DELETE EMPR WHERE MatrEmpr = ‘981212’ No exemplo, é removida a(s) linha(s) da tabela EMPR, onde a condição MatrEmpr = ‘981212’ for avaliada como verdadeira. EXEMPLO 2: DELETE EMPR FROM EMPR, DEPTO WHERE EMPR.MatrEmpr = DEPTO.MatrEmpr AND DEPTO.MatrEmpr = ‘981212’ No exemplo, uma operação de join está embutida no comando DELETE, envolvendo as tabelas EMPR e DEPTO; essa operação é utilizada na seleção de linhas a serem removidas. O comando acima exclui do banco de dados quaisquer informações de empregados que trabalhem para o departamento gerenciado pelo empregado de matrícula igual a ‘981212’. OBSERVAÇÕES: • O uso da cláusula WHERE determina que linhas de uma tabela serão removidas; • SE A CLÁUSULA WHERE NÃO FOR UTILIZADA, TODAS AS LINHAS DA TABELA ENVOLVIDA SERÃO REMOVIDAS; • O uso das cláusula FROM e WHERE implementa uma operação de join que será utilizada para determinar as linhas afetadas pela operação. 4. Modificação de Dados A modificação dos dados de uma tabela é realizada através do comando UPDATE. Para efetuar essa operação deve-se especificar que conjunto de linhas será afetado pelo comando. SINTAXE: UPDATE tabela SET coluna = expressão [ , coluna = expressão ... ] [ FROM tabela [ , tabela ... ] [ WHERE condição ] EXEMPLO 1: UPDATE EMPR SET MatrSup = NULL WHERE Salario > 1900.00 113 No exemplo, são alteradas linhas da tabela EMPR, atribuindo NULL para a matrícula do supervisor direto; somente são modificados os dados de empregados onde Salario > 1900,00. EXEMPLO 2: UPDATE EMPR SET Salario = Salario * 1.1 FROM EMPR, DEPTO WHERE DEPTO.MatrEmpr = EMPR.MatrEmpr No exemplo, uma operação de join está embutida no comando UPDATE, envolvendo as tabelas EMPR e DEPTO; essa operação é utilizada na seleção de linhas a serem alteradas. O comando acima altera a tabela EMPR, adicionando 10% ao salário (SET Salario = Salario * 1.1), considerando somente os empregados que gerenciam departamentos. OBSERVAÇÕES: • O uso da cláusula WHERE determina que linhas de uma tabela serão modificadas; • SE A CLÁUSULA WHERE NÃO FOR UTILIZADA, TODAS AS LINHAS DA TABELA ENVOLVIDA SERÃO ALTERADAS; • O uso das cláusula FROM e WHERE implementam uma operação de join que será utilizada para determinar as linhas afetadas pela operação. 114 ARQUITETURAS DO SISTEMA DBMS O tipo de sistema computador no qual rodam os banco de dados, pode ser dividido em quatro categorias ou plataformas: Centralizada, PC, Cliente/Servidor e Distribuído. Os quatro diferem , principalmente no local onde realmente ocorre o processamento dos dados. A arquitetura do próprio DBMS não determina, necessariamente, o tipo de sistema computador no qual o banco de dados precisa rodar; contudo, certas arquiteturas são mais convenientes(ou mais comuns) para algumas plataformas do que para outras. Plataformas Centralizadas Em um sistema centralizado, todos os programas rodam em um computador "hospedeiro" principal, incluindo o DBMS, os aplicativos que fazem acesso ao banco de dados e as facilidades de comunicação que enviam e recebem dados dos terminais dos usuários. Os usuários têm acesso ao banco de dados através de terminais conectados localmente ou discados(remotos), conforme aparece na figura 1. Minicomputador ou Mainframe Terminais Locais Modem Modem Terminal Remoto Geralmente os terminais são "mudos", tendo pouco ou nenhum poder de processamento e consistem somente de uma tela, um teclado e do hardware para se comunicar com o hospedeiro. O advento dos microprocessadores levou ao desenvolvimento de terminais mais inteligentes, onde o terminal compartilham um pouco da responsabilidade de manipular o desenho da tela e a entrada do usuário. Embora os sistemas de mainframe e de minicomputador sejam as plataformas principais para sistemas de banco de dados de grandes empresas, os baseados em PC também se podem se comunicar com sistemas centralizados através de combinações de hardware/software que emulam(imitam) os tipos de terminais utilizados com um hospedeiro em particular. Todo o processamento de dados de um sistema centralizado acontece no computador hospedeiro e o DBMS deve estar rodando antes que qualquer aplicativo possa ter acesso ao banco de dados. Quando um usuário liga um terminal, normalmente vê uma tela de log-in; o usuário introduz um ID de conexão e uma password, a fim de ter acesso aos aplicativos do hospedeiro. Quando o aplicativo de banco de dados é inicializado, ele envia a informação de tela apropriada para o terminal e 115 responde com ações diferentes, baseadas nos toques de tecla dados pelo usuário. O aplicativo e DBMS, ambos rodando no mesmo hospedeiro, se comunicam pela área de memória compartilhada ou de tarefa do aplicativo, que são gerenciadas pelo sistema operacional do hospedeiro. O DBMS é responsável pela movimentação dos dados nos sistemas de armazenamento de disco, usando os serviços fornecidos pelo sistema operacional. A figura 2 apresenta um modo possível de interação desses aplicativos: os aplicativos se comunicam com os usuários pelos terminais e com o DBMS; o DBMS se comunica com os dispositivos de armazenamento (que podem ser discos rígidos, mas não estão limitados a isso) e com os aplicativos. 116 Para/de terminais Sistema operacional (I.e., UNIX) Aplicativo de banco de dados DBMS Disk Para armazenamento em disco Aplicativo de banco da dados Memó ria do compu tador Outros aplicativos . . . Disk Fluxo de dados Disk Para/de terminais Comunicação entre os aplicativos O DBMS que roda no sistema hospedeiro pode ser baseado em qualquer um dos quatro modelos. Contudo, os modelos hierárquico e relacional são os mais comuns. Nos mainframes, o DBMS é normalmente baseado no IMS da IBM, que é um banco de dados hierárquico. Recentemente , entretanto, mais e mais mainframes estão rodando DBMSs baseados no modelo relacional, principalmente o DB2 da IBM. As principais vantagens de um sistema centralizado são a segurança centralizada e a capacidade de manipular enormes quantidades de dados em dispositivos de armazenamento. Os sistemas centralizados também podem suportar vários usuários simultaneamente; é comum, para um banco de dados em um mainframe IBM, suportar até 1000 usuários de uma vez. As desvantagens geralmente estão relacionadas aos custos de aquisição e manipulação desses sistemas. Os grandes sistemas de mainframe e de minicomputadores exigem facilidades de suporte específicas, como o habitual centro de dados com pisos elevados, sistemas de refrigeração e grandes sistemas de controle climático. Normalmente é necessário um staff de operadores e programadores altamente treinados para manter o sistema ativo e funcionando, com considerável custos adicionais de pessoal. Finalmente , o 117 preço de aquisição de hardware de grandes sistemas centralizados freqüentemente atinge milhões de dólares e a manutenção é também onerosa. Atualmente , as empresas têm optado cada vez mais por minicomputadores dimensionados para departamento, como o Micro Vax da DEC e o AS/400 da IBM, pois não custam tanto e são bem suportados como sistemas centralizados, e , geralmente, não exigem um ambiente especial. Esses sistemas são mais convenientes para pequenas empresas com poucos usuários(não mais do que 200) ou para aplicativos de banco de dados que só interessam a um único departamento de uma grande empresa (isto é um minicomputador que roda aplicativos de engenharia só pode interessar ao departamento de projetos). Os computadores menores também pode ser colocado em rede com outros minicomputadores e mainframes, para que todos os computadores possam compartilhar dados. Sistemas de Computador Pessoal Os computadores pessoais (PCs) apareceram no final dos anos 70 e revolucionaram a maneira de ver e utilizar computadores. Um dos primeiros sistemas operacionais de sucesso para PCs foi c CP/M(Control Program for Microcomputers), da Digital. O primeiro DBMS baseado em PC de sucesso , dBase II, da Ashtan-Tate, rodava sob CP/M. Quando a IBM lançou o primeiro PC baseado no MS-DOS, em 1981, a Ashton-Tate portou o dBASE para o novo sistema operacional. Desde então, o dBASE gerou versões mais novas, compatíveis e parecidas e DBMSs competitivos que têm provado, à comunidade de processamento de dados, que os PCs podem executar muitas das tarefas dos grandes sistemas. Quando um DBMS roda em um PC, este atua como computador hospedeiro e terminal. Ao contrário dos sistemas maiores, as funções do DBMS e do aplicativo de banco de dados são combinadas em um único aplicativo. Os aplicativos de banco de dados em um PC, manipulam a entrada do usuário, a saída da tela e o acesso aos dados do disco. Combinar essas diferentes funções em uma unidade, dá ao DBMS muito poder, flexibilidade e velocidade; contudo, normalmente ao custo da diminuição da segurança e da integridade dos dados. Os PCs originaram-se como sistemas stand-alone, mas, recentemente, muitos têm sido conectados em redes locais (LANs). Em uma LAN, os dados, e normalmente os aplicativos do usuário, residem no servidor de arquivo um PC que roda um sistema operacional de rede (NOS) especial, como o NetWare da Novell ou o LAN Manager da Microsoft. O servidor de arquivo gerencia o acesso aos dados compartilhados pelos usuários da rede em seus discos rígidos e, freqüentemente, da acesso a outros recursos compartilhados, como impressoras . Embora uma LAN permita aos usuários de bancos de dados baseados em PC, compartilhar arquivos de dados comuns, ela não muda o funcionamento do DBMS significativamente. Todo o processamento de dados real ainda é executado no PC que roda o aplicativo de banco de dados. O servidor de arquivo somente procura em seus discos os dados necessários para o usuário e envia esses dados para o PC, através do cabo da rede. Os dados são, então, processados pelo DBMS que está rodando no PC e quaisquer mudanças no banco de dados exige, do PC, o envio de todo o arquivo de dados de volta ao servidor de arquivo, para ser novamente armazenado no disco. Essa troca esta mostrada na figura 3. Embora o acesso de vários usuários a dados compartilhados seja uma vantagem, existe uma desvantagem significativa, de um DBMS baseado em LAN, relativa à rapidez ou ao poder do servidor de arquivo, terem seu desempenho limitado pelo poder do PC que está rodando o DBMS real. Quando vários usuários estão tendo acesso ao banco de dados, os mesmos arquivos precisam ser enviados do servidor para cada PC que está tendo acesso a eles. Esse tráfego ampliado pode diminuir a velocidade da rede. 118 pc pc cabo de Rede Arquivo de dados alterado enviado ao Servidor Arquivo de dados enviado ao PC pc Servidor de Arquivos A única melhoria necessária para um DBMS multiusuário, em relação a um monousuário, é a capacidade de manipular, simultaneamente, as alterações dos dados realizados por vários usuários. Normalmente isso é feito por algum tipo de esquema de bloqueio, no qual o registro ou o arquivo de dados que um usuário está atualizando ou alterando, é bloqueado para evitar que os outros usuários também o alterem. A maioria dos DBMSs, baseada em LAN, disponível hoje em dia, são simplesmente versões multiusuários de sistemas de banco de dados stand-alone comuns, contudo, os tipos de esquemas de bloqueio variam bastante e podem afetar significativamente o desempenho de um banco de dados multiusuário. A maioria dos DBMSs baseada em PC é projetada no modelo relacional, mas o fato de o DBMS não estar separado do aplicativo de banco de dados significa que muitos (senão a maioria) dos princípios relacionais não estão implementados. Os componentes ausentes mais notáveis são os que tratam da integridade dos dados. A maior parte dos bancos de PC permite acesso direto aos arquivos de dados, fora do DBMS que os criou. Isso cria uma situação, na qual podem ser feitas alterações nos arquivos, violadores Das regras pelas quais o aplicativo assegura a integridade dos dados. Tal violação pode até tornar ilegível o arquivo de dados para o DBMS. Por essa razão os bancos de dados de PC baseados num modelo relacional, são descritos mais precisamente, como semi-relacionais. Alguns dos bancos de dados de PC semi-relacionais mais comuns, disponíveis hoje em dia, incluem o R:Base da Microrim, o dBASE IV da Borland (a Borland adquiriu a Ashton-Tate no final de 1991) e seus muitos "clones", como o FoxPro da Microsoft, o Paradox da Borland, o DataEase da DataEase International e o Advanced Revelation, da Revelation Technologies. Conforme mencionado anteriormente, os bancos de dados de PC mais limitados, normalmente são baseados no modelo do sistema de gerenciamento de arquivo. Também existem DBMSs, baseados em PC, derivados do modelo em rede como o DataFlex, da Data Access Corporation e o db- Vista III, da Raima Corporation. A maioria dos sistemas de banco de dados multiusuário baseado em PC, manipula o mesmo número de usuários dos sistemas centralizados menores. Entretanto, os problemas decorrentes da manipulação de várias transações simultâneas, do aumento no tráfego da rede e do limite do poder de processamento dos PCs que rodam o DBMS, provocam o aumento da complexibilidade e a degradação no desempenho, à medida que o número de usuários se multiplica. A solução desenvolvida para essas limitações é o sistema de banco de dados Cliente/Servidor. BANCOS DE DADOS CLIENTE/SERVIDOR Na sua forma mais simples, um banco de dados Cliente/Servidor (C/S) divide o processamento de dados em dois sistemas: o PC cliente, que roda o aplicativo de banco de dados, e o servidor, que roda totalmente ou parte do DBMS real. O servidor de arquivo da rede local continua a oferecer recursos compartilhados, como espaço em disco para os aplicativos e impressoras. O servidor de 119 banco de dados pode rodar no mesmo PC do servidor de arquivo ou (como é mais comum) em seu próprio PC. O aplicativo de banco de dados do PC cliente, chamado sistema front-end, manipula toda a tela e o processamento de entrada/saída do usuário. O sistema back-end do servidor de banco de dados manipula o processamento dos dados e o acesso ao disco. Por exemplo, um usuário do front-end gera um pedido (consulta) de dados do servidor de banco de dados, e o aplicativo front-end envia, para o servidor, o pedido pela rede. O servidor de banco de dados executa a pesquisa real e retorna somente os dados que respondem a pergunta do usuário, conforme aparece na figura 4. Consulta Servidor de Banco de Dados Resultado da consulta pc pc cabo de Rede pc A vantagem imediata de um sistema C/S é óbvia: dividir o processamento entre dois sistemas reduz a quantidade do tráfego de dados no cabo da rede. Em um dos casos tipicamente confusos sobre o significado de um mesmo termo que às vezes encontramos no campo da computação, a definição de Cliente/Servidor é aparentemente o contrário dos sistemas baseados em UNIX, rodando a interface gráfica X-Windows. A divisão no processamento é a mesma do sistema C/S baseado em PC, mas o front-end é chamado servidor no XWindows, pois fornece os serviços de apresentação e de interface do usuário. O sistema back-end, no qual roda o DBMS, é referido como cliente dos serviços fornecidos pelo sistema front-end. O número de sistemas C/S está aumentando rapidamente-novos sistemas estão sendo projetados e divulgados quase mensalmente. Embora os sistemas clientes normalmente rodem em PC, o sevidor do banco de dados pode rodar de um PC a um mainframe. Mais e mais aplicativos de frontend estão aparecendo, incluindo desde os que ampliam o escopo dos DBMSs baseados em PC tradicionais, até os servidores de banco de dados. A maior desvantagens dos sistemas de bancos de dados descritos até aqui é que eles exigem o armazenamento dos dados em um único sistema. Isso pode ser um problema para empresas grandes que precisam suportar usuários do banco de dados espalhados em uma área geográfica extensa ou que precisem compartilhar parte de seus dados departamentais com outros departamentos ou com um hospedeiro central. É necessário um modo de distribuir os dados entre os vários hospedeiros ou localidades, o que levou ao desenvolvimento dos sistemas de processamento distribuído. 120 Como Selecionar APIS API significa “Aplication Program Interface”. É um protocolo de comunicação entre o frontend ou a lógica de negócio e o banco de dados. Os fornecedores de Servidores de Banco de Dados costumam prover uma interface de mais alto nível para comunicação com seus servidores. Estas APIs são específicas para cada produto. Exemplos : SQL Net da Oracle DB/Library da Microsoft/Sybase. Como cada servidor, geralmente, possui sua própria API, quando uma aplicação cliente quer acessar servidores diferentes é preciso escolher entre as seguintes alternativas: • APIs específicas para cada SGBD.; • Interface comum; • Gateway. Acessando servidores diferentes com APIS específicas para cada SGBD É uma alternativa que prevê que a utilização de uma API específica para cada servidor diferente que vier a ser acessado pela aplicação cliente. Se precisar acessar banco de dados diferentes, necessitará carregar na memória APIs diferentes. Vantagens: • Performance • Tuning individual Desvantagens • Incompatibilidade de transações • Necessidade de mais de uma API cliente Acessando servidores diferentes com interface comum É uma alternativa onde uma API, situada no lado cliente, provê um protocolo único para acesso aos diferentes servidores. Esta API irá carregar os “drives” específicos de cada servidor para estabelecer a comunicação. Exemplo : ODBC(Open DataBase Comunication) da Microsoft. 121 Vantagens: • O cliente só fala a lingua, ODBC, que traduz os comandos para cada API cliente Desvantagens: • Tuning individual impossível; • Desempenho. A Microsoft admite uma perda de 30% utilizando ODBC Acessando servidores diferentes com gateways Os gateways são produtos que possibilitam a comunicação entre uma aplicação cliente, desenvolvida para um certo servidor, com outro servidor específico, sem que a aplicação cliente seja modificada.. Exemplos : MicroDecision Ware, Gupta SQLHost, Oracle Gateway. Vantagens: • Só uma API cliente • Desempenho bom Desvantagens: • Tuning para apenas um servidor • Gateways custam caro ODBC (Open DataBase Comunication) Conectividade de Banco de Dados Aberto ODBC é uma API da Microsoft que facilita a interoperabilidade entre o Windons e outros bancos de dados. Para usar o ODBC as ferramentas de aplicação devem ser habilitadas para aceitar este padrão. Os servidores de banco de dados por outro lado deve aceitar chamadas no padão ODBC. Para que um aplicativo possa acessar vários servidores de bancos de dados, vários esforços foram feitos. Um dos mais bem sucedidos resultou na criação, pela Microsoft, do ODBC -Open Data Base Connectivity. 122 Usando um drive ODBC, um programa escrito em qualquer linguagem de programação pode acessar uma enorme variedade de servidores de banco de dados. Além disso, o programador não precisa se preocupar com os comandos específicos de consulta á base de dados. Ele deselvolve seu aplicativo e o ODBC se encarrega de encaminhar as consultas. Devido a facilidade do padrão ODBC, a maioria dos produtores de software oferece conectividade por meio dele. O ODBC foi baseado nas especificações do SQL Access Group e do X Open, duas organizações que estabelecem padrões técnicos de conectividade. Desenvolvido inicialmente para Windows, ele foi lançado em 1992 e, hoje, se encontra na terceira geração. A arquitetura ODBC tem quatro componentes básicos. O primeiro é o próprio aplicativo, que executa o processamento no cliente e emite as chamadas de consulta aos dados. O gerenciador de drives, um arquivo do tipo DLL que a Microsoft fornece com seus sistemas operacionais, carrega os controladores de acordo com a solicitação da aplicação. O terceiro elemento é o drive ODBC, que processa as chamadas de função, submete requisições SQL a fonte de dados e remete o resultado ao aplicativo. A estrutura se completa com fonte de dados, a origem das informações que o usuário quer acessar, normalmente um banco de dados relacional. Existem dois tipos de drives ODBC - monocamada e multicamadas. O drive do tipo monocamada processa as chamadas do ODBC e os comandos SQL. Ele assume, assim, parte da funcionalidade que caberia, em princípio, à fonte de dados. Esse tipo de driver é normalmente utilizado para acessar bases de dados que não sejam compatíveis com o padrão SQL, como as do tipo xBase. Os comandos SQL são processados pelos próprios drives, que transmitem a consulta ao gerenciador de banco de dados na forma de uma operação básica de arquivo. Um driver do tipo multicamadas envia as requisições diretamente ao servidor, que se encarrega de processá-las: Esse driver permite que a aplicação, o gerenciador de drives e o próprio controlador ODBC fiquem em uma máquina cliente, enquanto o gerenciador de banco de dados roda em outra máquina - o servidor. Quando o banco de dados é compatível com SQL, o driver apenas repassa, a ele, comandos nessa linguagem. No caso de sistemas não compatíveis, o gerenciador de banco de dados terá fazer um trabalho extra de tradução dos comandos. Além dos fabricantes de banco de dados, surgiram diversas empresas especializadas em driveers ODBC. Embora os produtos de todas essas companhias atendem às mesmas especificações, cada um deles pode apresentar melhor ou pior desempenho que os demais. Observa-se, também que há outros 123 fatores, além do driver ODBC, que têm grande influência no desempenho do sistema. Entre esses fatores estão o protocolo de rede, o gerenciador de banco de dados e o hardware. Apesar da sua ampla aceitação, o ODBC ganhou a fama de ser um método muito lento de acesso aos dados. Por isso, muitas empresas preferem construir aplicativos usando os comandos nativos do gerenciador de banco de dados para comunicação entre o cliente e o servidor. Recentes testes foram realizados por uma empresa americana Resource Group, sob a liderança de Ken Norht, autor do livro Windows Multi-DBMS Programing. Nessa avaliação, foram usados os mesmos micros clientes, servidores, rede, tabelas e declarações SQL para avaliar o desempenho do ODBC e compará-los com o acesso em modo nativo. Comparações - Um exame dos resultados dos 27 testes revela que, em 11 deles, o drive nativo se saiu melhor. Nas outras 16 operações, a vitória foi do ODBC. Desses 16 testes em que o ODBC foi melhor do que o acesso nativo, a diferença foi maior que 10% em 7 Dos 11 testes em que o acesso foi mais rápido, em apenas 2 a diferença foi maior que 10%. No Oracle 7 o tempo de acesso via ODBC foi 2% mais rápido que o acesso nativo.. No Informix, o ODBC foi 1% mais rápido em média. No Sybase a diferença foi de 13% a fovor do ODBC. Com estes números acaba o mito do mau desempenho do ODBC. O uso do driver ODBC pode economizar muito tempo e dinheiro no desenvolvimento de aplicativos multiplataformas. O sucesso dessa implementação vai depender não só do uso do driver correto, mas de um conjunto de escolhas acertadas de hardware e software. Interfaces Gráficas (GUIs) As interfaces gráficas(GUIs) contribuíram para os sistemas cliente/servidor porque os tornaram mais fáceis de serem usados e aumentaram a produtividade. Os recursos de GUI, como multitarefa, cumutação de tarefas e intercâmbio de dados entre aplicativos, também contribuíram para que esses sistemas ficassem mais atraentes. Um sistema não precisa ter GUI para ser classificado como um sistema cliente/servidor - no qual um módulo cliente conectado por rede a um módolo servidor constitui os componentes essenciais. No entanto, as GUIs são usadas com freqüência em sistemas cliente/servidor, devido os seus benefícios. Os gastos associados às GUIs incluem treinamento de usuários finais e custos da construção de uma GUI. Se uma empresa quiser uma GUI personalizada para uma aplicativo interno, seus analistas de desenvolvimento e programadores devem construí-la. O desenvolvimento de uma GUI consiste em programação direcionada por eventos, na qual os programas reagem às ações de usuários finais. Isso é diferente do código gerado por programação 124 sequencial tradicional. Há várias abordagens diferentes para desenvolvimento de interfaces gráficas internas. Dez Considerações Importantes sobre GUIs A) As GUIs podem aumentar a produtividade tornando os sistemas mais fáceis de usar o oferecendo recursos como multitarefa e intercâmbio de dados entre os aplicativos. B) A facilidade de uso não é automática; alguns treinamentos preparatórios para os usuários serão necessários. C) As GUIs podem levar bastante tempo para serem construídas - usar ferramentas de contrução de GUIs acelera o processo. D) Falta de consistência nas GUIs pode confundir, irritar e frustar os usuários finais. E) Um guia de estilos confere a uma GUI sua “aparencia visual”. F) Padrões internos devem ser adotados para garantir que um guia de estilo escolhido ou um estilo desenvolvido pela empresa esteja obedecido. G) Transformar um sistema existente em front-end com uma GUI - embora seja uma técnica que gera controvésias - pode ser útil em sistemas de utilização complexa. H) O software GUI do Windows da Microsoft e do Presentation Maneger da IBM reside em um plataforma de cliente; mas, no sistema X Windows para UNIX, um servidor oferece gerenciamento de vídeo para a GUI. I) Há ferramentas disponíveis para construir interfaces “genéricas” que são “portáveis” para uma ampla variedade de estruturas. J) Os usuários finais podem ter diferentes GUIs, como X Windows e Windows da Microsoft, operando simultaneamente em seus micros. SISTEMAS DE PROCESSAMENTO DISTRIBUÍDO Uma forma simples de processamento distribuído já existe a alguns anos. Nessa forma limitada, os dados são compartilhados entre vários sistemas hospedeiros, através de atualizações enviadas pelas conexões diretas (na mesma rede) ou por conexões remotas, via telefone ou via linhas de dados dedicadas. Um aplicativo rodando em um ou mais dos hospedeiros, extras a parte dos dados alterados durante um período de tempo definido pelo programador e, então, transmite os dados para um hospedeiro centralizado ou para outros hospedeiros do circuito distribuído. Os outros bancos de dados são, então, atualizados para que todos os sistemas estejam sincronizados. Esse tipo de processamento de dados distribuído normalmente ocorre entre computadores departamentais ou entre 125 LANs e sistemas hospedeiros. Após o dia de trabalho, os dados vão para um grande microcomputador central ou para um hospedeiro mainframe. Embora esse sistema seja ideal para compartilhar parte dos dados entre diferentes hospedeiros, ele não responde ao problema do acesso, pelo usuário, aos dados não armazenados em seus hospedeiros locais. Os usuários devem mudar suas conexões para os diferentes hospedeiros, a fim de ter acesso aos vários bancos de dados, lembrando-se, entretanto, de onde está cada banco. Combinar os dados dos bancos de dados existentes em hospedeiros, também apresenta alguns sérios desafios para os usuários e para os programadores. Há ainda, o problema dos dados duplicados; embora os sistemas de armazenamento em disco tenham diminuído de preço através dos anos, fornecer vários sistemas de disco para armazenar os mesmos dados pode ficar caro. Manter todos os conjuntos de dados duplicados em sincronismo, aumenta a complexidade do sistema. A solução para esses problemas está emergindo da tecnologia do acesso "sem costura" a dados, denominada processamento distribuído. No sistema de processamento distribuído o usuário pede dados do hospedeiro local; se este informar que não possui os dados, sai pela rede procurando o sistema que os tenha. Em seguida, retorna os dados ao usuário, sem que este saiba que foram trazidos de um sistema desconhecido exceto, talvez, por um ligeiro atraso na obtenção dos dados. A figura 5 ilustra uma forma de sistema de processamento distribuído. Primeiramente, o usuário cria e envia uma busca de dados para o servidor do banco de dados local. O servidor, então, envia, para o mainframe (possivelmente através de um gateway ou de um sistema de ponte que une as duas redes), o pedido dos dados que não possui. Ele responde à consulta. Finalmente, o servidor do banco de dados local combina esse resultado com os dados encontrados em seu próprio disco e retorna a informação ao usuário. O ideal é que esse sistema distribuído também possa funcionar de outro modo: os usuários de terminal conectado diretamente ao mainframe podem ter acesso aos dados existentes nos servidores de arquivos remotos. O projeto e a implementação dos sistemas de processamento distribuído é um campo muito novo. Muitas partes ainda não estão no lugar e as soluções existentes nem sempre são compatíveis uma com as outras. 126 BIBLIOGRAFIA .ELMASRI, Ramez e NAVATHE, ShamKant B. Sistemas de Banco de Dados - Fundamentos e Aplicações. Ed. LTC. Rio de Janeiro, 2000. .KORTH, Henry F. & SILBERSCHATZ, Abraham. Sistemas de Bancos de Dados, São Paulo. Ed. Makron Books, 1999. .DATE, C.J., Introdução a Sistemas de Bancos de Dados, Rio de Janeiro. Ed. Campus, 1991. .BOCHENSKI, Barbara. Implementando Sistemas Cliente/Servidor de Qualidade, São Paulo. Ed. Makron Books, 1995. .CHEN, P.; Modelagem de Dados: A abordagem em entidade-relacionamento para projeto lógico. São Paulo. Ed. McGraw-Hill, 1990.