Escolar Documentos
Profissional Documentos
Cultura Documentos
Pagani
Banco de Dados
1.68
ndice
1 Introduo...............................................................................................................................................4 1.1 Um pouco de histria...........................................................................................................................4 1.2 Conceitos bsicos..................................................................................................................................6 1.3 Exerccios..............................................................................................................................................8 2 Modelo conceitual de dados ..................................................................................................................9 2.1 Cardinalidade dos relacionamentos.................................................................................................11 2.2 Auto-relacionamento ........................................................................................................................14 2.3 Atributos ............................................................................................................................................14 2.3.1 Atributos do relacionamento ........................................................................................................15 2.4 Agregao ..........................................................................................................................................16 2.4.1 Restries para o uso da agregao ..............................................................................................18 2.5 Generalizao e Especializao........................................................................................................18 2.6 Dicas para a criao do Diagrama de Entidades e Relacionamentos...........................................20 2.7 Exerccios............................................................................................................................................20 3 Estudo de caso (parte 1).......................................................................................................................21 3.1 Relatrio da anlise............................................................................................................................22 3.2 Estudo de caso modelo conceitual de dados.................................................................................22 4 Modelos lgicos de dados......................................................................................................................27 4.1 Modelo hierrquico............................................................................................................................28 4.2 Modelo em rede..................................................................................................................................31 4.3 Modelo relacional...............................................................................................................................32 4.1 Exerccios............................................................................................................................................34 5 Projeto de banco de dados relacional..................................................................................................34 5.1 Chaves.................................................................................................................................................34 5.1.1 Restries de integridade...............................................................................................................36 5.1.2 Exerccios.........................................................................................................................................37 5.2 Normalizao......................................................................................................................................37 5.2.1 Primeira forma normal..................................................................................................................38 5.2.2 Dependncia funcional....................................................................................................................40 5.2.3 Segunda forma normal...................................................................................................................41 5.2.4 Terceira forma normal...................................................................................................................42 5.2.5 Outras formas normais...................................................................................................................44 5.2.6 Roteiro para a normalizao das tabelas......................................................................................44 5.2.7 Exerccios.........................................................................................................................................44 6 Estudo de caso (parte 2) Modelo lgico de dados............................................................................45 7 SQL.........................................................................................................................................................48 7.1 Elementos da linguagem SQL...........................................................................................................48 7.1.1 Palavras-chaves...............................................................................................................................49 7.1.2 Comandos........................................................................................................................................49 7.1.3 Tipos de dados.................................................................................................................................50 7.1.4 Operadores......................................................................................................................................50 7.2 Notao................................................................................................................................................51 7.3 SQL como linguagem de definio de dados...................................................................................51 7.3.1 Criao de tabelas...........................................................................................................................51 7.3.2 Eliminao de tabelas.....................................................................................................................51 7.4 SQL como linguagem de manipulao de dados.............................................................................52 7.4.1 Acesso aos dados de uma tabela....................................................................................................52 7.4.2 Trabalhando com mais de uma tabela simultaneamente............................................................53 7.4.2.1 Qualificadores e apelidos.............................................................................................................53 7.4.2.2 Encadeamento incondicional......................................................................................................54 7.4.2.3 Encadeamento condicional..........................................................................................................55 7.4.2.4 Encadeamento natural.................................................................................................................56 7.4.2.5 Encadeamento no simtrico......................................................................................................57 7.4.2.6 Encadeamento com mais de duas tabelas..................................................................................57 7.4.3 Insero de dados em uma tabela..................................................................................................57 7.4.4 Modificao dos dados de uma tabela...........................................................................................58 7.4.5 Eliminao de linhas de uma tabela..............................................................................................58 7.4.6 Um pouco mais sobre a clusula where........................................................................................59 7.4.7 Exerccios.........................................................................................................................................61
Banco de Dados
2.68
8 Modelo fsico de dados..........................................................................................................................61 8.1 Vises...................................................................................................................................................62 9 Estudo de caso (parte 3) Modelo fsico de dados.............................................................................63 10 Bancos de dados distribudos e arquitetura cliente/servidor..........................................................66 10.1 Bancos de dados distribudos..........................................................................................................66 10.2 Arquitetura cliente/servidor...........................................................................................................66 Bibliografia................................................................................................................................................67
Banco de Dados
3.68
1 Introduo
Nos primrdios da informtica, numa poca em que a utilizao de computadores para processar dados ainda no era chamada de informtica, os programas serviam para resolver apenas problemas cientficos. A grande maioria dos problemas cientficos tinha caractersticas comuns: poucos dados de entrada e de sada e grande quantidade de clculos (posteriormente os computadores foram aplicados para a soluo de problemas cientficos que manipulam grandes quantidades de dados). Assim sendo, havia pouca necessidade de armazenar dados. O que era muito bom para a poca, pois no havia muitos recursos para armazenar dados (os discos ainda no haviam sido inventados). Com a evoluo do computador outras aplicaes foram sendo desenvolvidas. Novas aplicaes requerendo novos e melhores recursos, novos recursos possibilitando a criao de novas aplicaes. E continuamos nisso at hoje.
separada dos programas e cada programa que utilizasse aquele arquivo efetuava a incluso da descrio do arquivo correspondente durante a fase de compilao do programa. Vamos exemplificar fazendo uma analogia com um programa escrito na linguagem Pascal. Consideremos o programa a seguir, onde foram omitidas todas as partes que no so essenciais para o nosso exemplo: program exemplo; var funcionario: record id_funcionario: string; nome_funcionario: string; salario: real; end; begin ... end. Neste exemplo estamos considerando que a varivel funcionario corresponde descrio do registro do arquivo funcionario, que contm os dados dos funcionrios. Na implementao desta alternativa, a declarao da varivel funcionario seria codificada em um arquivo separado. Cada programa que precisasse trabalhar com o arquivo funcionario, no lugar da declarao da varivel funcionario, como acima, usaria um comando semelhante a: #include funcionario e o programa se transformaria em: program exemplo; #include funcionario begin ... end. No lugar do compilador usado normalmente para a linguagem Pascal, seria usada uma verso alterada, que teria como funo efetuar a substituio dos comandos #include pelos trechos correspondentes antes de iniciar a compilao do programa. O processo de substituio ocorria antes de iniciar o processo de compilao e, por isso, dava-se a um comando do tipo do comando #include o nome de comando de prprocessador (quem conhece a linguagem C e suas derivadas deve estar reconhecendo o comando... vem daquela poca). Portanto, para usar um arquivo, bastava inserir no local apropriado do programa o comando para efetuar a incluso da sua descrio e compilar o programa. Cada vez que o programa era compilado, usava a verso mais recente da descrio. Quando ocorria uma alterao na descrio de um arquivo, bastava que os programas que utilizassem aquele arquivo fossem novamente compilados. Entretanto, era preciso que todos os programas que usassem o arquivo fossem compilados com a nova verso. E era preciso ter um bom controle sobre isso, uma vez que no havia meio de obrigar e garantir tal fato (ainda no havia sistemas de controle automtico de verses). Mas j foi um bom comeo.
Banco de Dados
5.68
A partir deste pequeno passo, evolumos bastante, tanto do ponto de vista prtico como do ponto de vista terico. Por um lado, temos os Sistemas Gerenciadores de Bancos de Dados (SGBD), cada vez mais seguros, melhores e com mais recursos. Por outro lado, temos uma teoria, que avana cada vez mais, para nos auxiliar a projetar e implementar de forma cada vez mais rpida, fcil e segura, os bancos de dados necessrios para as nossas aplicaes, sejam elas pequenas aplicaes mono-usurio para um computador pessoal funcionando isoladamente, at grandes e complexas aplicaes para milhares de usurios simultneos utilizando computadores dos mais diversos tamanhos ligados em rede. Os SGBD partiram do pioneiro IMS da IBM (Information Management System da IBM, primeiro gerenciador de banco de dados) chegando hoje aos bancos de dados relacionais e caminhando para os bancos de dados baseados em objetos. Com relao ao projeto do banco de dados partimos da descrio de arquivos para atender a uma nica aplicao at chegarmos ao conceito de modelagem de dados ao nvel conceitual independente das aplicaes, cujo exemplo mais popular hoje o Modelo de Entidades e Relacionamentos (MER). Ao longo deste trabalho procuraremos, sempre que possvel, apresentar o contexto em que ocorreu cada mudana, para tornar mais fcil a compreenso do sentido e dos motivos de determinada evoluo.
Cada SGBD implementa de modo particular a maneira como armazena os dados, controla o acesso aos dados, interage com o usurio do sistema, prov a segurana dos
Banco de Dados
6.68
dados etc. A esse conjunto de programas e modo de implementao damos o nome de arquitetura do sistema de banco de dados. Falamos acima em usurio do banco de dados. Em princpio, um usurio de um sistema de banco de dados qualquer pessoa (ou grupo de pessoas) que interage com o sistema. Dependendo do tipo de interao, podemos classificar os usurios em diversas categorias: Usurio (como so comumente conhecidos) Neste grupo esto todos os que realizam operaes de manipulao de dados armazenados no banco de dados. A esto includos os programadores de aplicaes (que desenvolvem aplicaes que manipulam dados do banco de dados), os usurios sofisticados (que utilizam algum tipo de linguagem de consulta, diferente das linguagens de programao tradicionais, que lhes permitem acessar diretamente o banco de dados), os usurios especializados (que interagem com o banco de dados atravs dos programas desenvolvidos pelos programadores de aplicaes) e os usurios encarregados de inserir e atualizar os dados do banco de dados usando, tambm, programas desenvolvidos pelos programadores de aplicaes (ao contrrio dos usurios sofisticados e dos usurios especializados, que desejam extrair informaes dos dados armazenados no banco de dados). Administrador Neste grupo esto todos os que so responsveis pelo controle do sistema. A esto includos o administrador de dados (que define que dados devem ser armazenados no banco de dados, como estes dados devem se relacionar e define a poltica de acesso aos dados armazenados no banco de dados) e o administrador do SGBD (encarregado de vrias tarefas diretamente ligadas operao do SGBD, tais como a sua instalao, definio da estrutura de armazenamento e da estratgia de acesso aos dados, implementao da poltica de concesso de autorizao de acesso nos mais diversos nveis, definio e implementao de controles de integridade dos dados, definio e implementao de estratgias de segurana dos dados, monitoramento do desempenho do sistema executando, inclusive, alteraes na estrutura fsica do banco de dados e reorganizao dos arquivos para garantir o nvel de funcionamento desejvel). A interao dos usurios com o sistema de banco de dados feita por meio de linguagens especiais, pois, infelizmente, no podemos nos comunicar com o SGBD atravs de uma linguagem natural como o Portugus ou mesmo o Ingls. Estas linguagens se dividem em Linguagem de Definio de Dados (LDD em portugus ou DDL Data Definition Language em ingls) e Linguagem de Manipulao de Dados (LMD em portugus ou DML Data Manipulation Language). Uma LDD utilizada pelo administrador do SGBD para definir os arquivos que comporo o banco de dados e mesmo para promover a reorganizao do banco de dados quando necessrio. Uma LMD utilizada pelos usurios que precisam manipular os dados armazenados no banco de dados. Os programadores de aplicaes embutem os comandos da LMD nos seus programas. Os usurios sofisticados usam diretamente uma LMD. Como vimos, os demais usurios acessam os dados atravs de programas desenvolvidos pelos programadores de aplicaes. Atualmente, a LMD mais utilizada a SQL (Structured Query Language Linguagem de Consulta Estruturada). Hoje em dia, praticamente todos os SGBD seguem o modelo relacional, com algumas poucas tentativas com o modelo de SGBD baseado em objetos. Porm, antes que o modelo relacional predominasse, dois outros modelos eram tambm usados. O Banco de Dados 7.68
modelo hierrquico e o modelo em rede (que no tem nada a ver com rede de computadores). Mais adiante voltaremos a falar nestes modelos. O que interessa agora que na poca em questo, muitas vezes ao se projetar uma aplicao usando banco de dados, no se sabia a priori que tipo de SGBD seria usado. Era preciso, ento, encontrar uma forma de projetar o banco de dados que servisse para qualquer modelo de SGBD. A soluo encontrada foi distanciar a descrio dos dados necessrios para a aplicao dos arquivos usados no SGBD. Criouse ento o conceito de modelos de dados, que so as descries dos dados, e separaram-se os modelos em modelo conceitual, modelo lgico e modelo fsico. O modelo conceitual uma descrio de alto nvel, mais prxima da realidade da aplicao a que se destina o banco de dados. Assim, o modelo criado fica independente do SGBD que ser utilizado. Dentre as diversas alternativas de mtodo para a criao do modelo conceitual, destacou-se o Modelo de Entidade e Relacionamentos (MER) que se tornou muito popular e o mais usado atualmente. Por esse motivo ao tratarmos, mais adiante, de modelagem conceitual de dados falaremos apenas do MER. O modelo lgico consiste na traduo do modelo conceitual de dados criado na primeira fase para um dos modelos de SGBD (hierrquico, em rede ou relacional). Esta etapa era necessria devido grande diferena entre as arquiteturas dos trs modelos de SGBD. O modelo fsico consiste na traduo do modelo lgico para um SGBD especfico. Isso porque havia mais de um fornecedor de SGBD de um mesmo modelo (em rede, por exemplo) e cada um usava uma LDD (Linguagem de Definio de Dados) diferente. Hoje, apesar da predominncia do SGBD relacional, permanece a separao entre os modelos conceitual e lgico e fsico, pois facilita o projeto do banco de dados. A passagem do modelo conceitual para o modelo lgico ficou mais simples, pois temos apenas o modelo relacional, da mesma forma que do modelo lgico para o modelo fsico, devido quase padronizao das LDD.
1.3 Exerccios
1) Defina: sistema de bancos de dados; banco de dados; sistema de gerenciamento de banco de dados. 2) Quais as vantagens e desvantagens da utilizao de um sistema de banco de dados? 3) Defina: linguagem de definio de dados; linguagem de manipulao de dados. 4) Como se classificam os usurios do banco de dados e quais as suas funes? 5) Defina: modelo conceitual de dados; modelo lgico de dados; modelo fsico de dados.
Banco de Dados
8.68
Fig. 2.1: Dados cadastrais de um funcionrio. Poderamos ser tentados a criar um nico arquivo para esses dados, com um registro para cada funcionrio (nos primeiros tempos da informtica era mais ou menos assim que era feito). Essa soluo, entretanto, acarreta vrios problemas. No vamos nos aprofundar nesses problemas agora. Vamos citar apenas um para exemplificar: os dados relativos aos dependentes. Se deixarmos espao para trs dependentes, quando aparecer um funcionrio com mais de trs dependentes, o nosso banco ter que ser reestruturado. Se deixarmos espao para dez dependentes, estaremos gastando espao no arquivo, pois, certamente, haver poucos funcionrios com tantos dependentes. Fizemos analogia com um arquivo apenas para facilitar a compreenso do tipo de problemas que foram encontrados pelos primeiros estudiosos da tecnologia de banco de dados e o porqu das solues adotadas. Como estamos querendo criar o modelo conceitual dos nossos dados, no nos preocuparemos (e nem devemos nos deixar influenciar) com a forma como os dados sero armazenados. Na modelagem conceitual queremos apenas entender e descrever os dados necessrios e como esses dados devem ser tratados. Tambm do nosso estudo, conclumos que os funcionrios esto ligados a departamentos e participam de projetos.
Banco de Dados
9.68
Portanto, sabemos por enquanto que precisamos armazenar dados sobre os funcionrios, os departamentos e os projetos. Para ns, o conjunto de todos os funcionrios ser uma entidade no nosso modelo. Da mesma forma, os departamentos e os projetos sero entidades no nosso modelo. Descobrimos, ento, trs entidades que chamaremos de funcionrios, departamentos e projetos. E, o que essas trs entidades tm em comum? Elas representam objetos do mundo real. Ora, mas departamento um objeto? Sim, pois, para nossa anlise consideramos objetos os seres, os fatos, as coisas e os organismos sociais. Assim, um funcionrio (um ser) um objeto, um departamento (um organismo social) um objeto etc. Mesmo se for apenas uma idia que s existe no papel, tal como uma conta-corrente bancria, tambm ser considerada um objeto neste contexto. Podemos, ento, definir uma entidade como uma representao abstrata de um conjunto de objetos (no sentido que definimos acima) do mundo real. A entidade funcionrios representa os funcionrios da empresa (o conjunto dos funcionrios) e dizemos que um funcionrio especfico uma ocorrncia (um exemplar) da entidade funcionrios.
funcionrios
Fig. 2.3: Relacionamento entre as entidades funcionrios e departamentos. Banco de Dados 10.68
Criar um modelo conceitual de dados para um banco de dados usando o Modelo de Entidade e Relacionamentos (MER) consiste, ento, em identificar as entidades, seus atributos e relacionamentos. Para representar o modelo conceitual usaremos o Diagrama de Entidades e Relacionamentos (DER). No DER usaremos a seguinte simbologia: as entidades sero representadas por retngulos e os relacionamentos por losangos, como na figura a seguir.
Funcionrios Lotaes Departamentos
Fig. 2.4: Exemplo de um Diagrama de Entidades e Relacionamentos. Com essa figura queremos representar que existe um relacionamento entre a entidade funcionrios e a entidade departamentos. Os nomes no interior das figuras indicam que os funcionrios esto lotados nos departamentos. Normalmente omitimos do DER os atributos. Caso haja necessidade de represent-los, usaremos a seguinte simbologia:
Funcionrios
Data Nascimento Nome Matrcula
Fig. 2.5: A entidade funcionrios representada com alguns atributos. importante notar que podemos ter mais de um relacionamento entre duas entidades quaisquer. Podemos, por exemplo, ter os seguintes relacionamentos entre as entidades funcionrios e departamentos:
Funcionrios Lotaes Departamentos
Gerencia
A resposta : depende. No caso do relacionamento entre funcionrios e departamentos, normalmente todo funcionrio est lotado em algum departamento, apesar de que, podemos ter alguma empresa em que determinados funcionrios, assessores da presidncia, por exemplo, no estaro vinculados a nenhum departamento (no adequado criar um departamento fictcio para acomodar essa situao). Portanto, depende do contexto que estivermos analisando. Se analisarmos o relacionamento do ponto de vista da entidade departamentos, veremos que um departamento est relacionado com vrios funcionrios (h vrios funcionrios lotados em cada departamento). quantidade de elementos de cada entidade que pode participar de um relacionamento damos o nome de cardinalidade do relacionamento e representamos por meio de nmeros no diagrama, como mostrado a seguir:
Funcionrios
Lotaes
Departamentos
Fig. 2.7: Representao da cardinalidade entre relacionamentos. No diagrama acima estamos representando que, atravs do relacionamento Lotaes, vrios elementos da entidade Funcionrios podem estar ligados a um elemento da entidade Departamentos. No sentido inverso, um departamento pode estar ligado a vrios funcionrios. Note-se que no estamos interessados em saber exatamente quantos funcionrios esto ligados a cada departamento, pois esse nmero pode variar de um departamento para outro. Assim, dizemos que o relacionamento da ordem de 1:N (de 1 para N) no sentido Departamentos para Funcionrios (um departamento pode estar relacionado a vrios funcionrios) e de N:1 no sentido Funcionrios para Departamentos. Como veremos adiante, em certas situaes interessante indicar um limite mnimo e um limite mximo. Apenas para exemplificar, consideremos o relacionamento entre os alunos e as turmas de uma escola. Neste caso pode ser necessrio indicar um limite mximo para o nmero de alunos em cada turma. No normal um funcionrio estar lotado em mais de um departamento ao mesmo tempo. Entretanto, se considerarmos o relacionamento entre os funcionrios e os projetos, no incomum o fato de um funcionrio participar de mais de um projeto. Neste caso dizemos que o relacionamento de N:N:
Funcionrios
Participaes
Projetos
Fig. 2.8: Relacionamento de N:N. Para determinar a cardinalidade de um relacionamento, examinamos primeiro em uma direo. No relacionamento Lotaes, por exemplo, deveramos nos perguntar: um funcionrio se relaciona com um ou mais departamentos? Como cada funcionrio est lotado em apenas um departamento, o relacionamento de Funcionrios com Departamentos ser de 1:1. No sentido inverso, a pergunta seria: um departamento se relaciona com um ou mais funcionrios? Como teremos vrios funcionrios lotados em cada departamento, o relacionamento de Departamentos com Funcionrios ser de 1:N.
Banco de Dados
12.68
Invertendo, para efetuar a leitura sempre da esquerda para a direita, teremos a cardinalidade 1:1 em um sentido (cada funcionrio alocado a um nico departamento) e N:1 no outro sentido (cada departamento com vrios funcionrios). Tomamos, ento, os maiores valores e ficaremos com a cardinalidade N:1 para o relacionamento Alocaes entre as entidades Funcionrios e Departamentos. Poderamos representar graficamente essa situao com a seguinte figura para o relacionamento Locaes: Funcionrio Um funcionrio 1 Muitos funcionrios N N Departamento Um departamento 1 Um departamento 1 N
Fig. 2.9: Determinando a cardinalidade de um relacionamento. Na literatura sobre bancos de dados h vrias nomenclaturas para a cardinalidade (formas de representar a cardinalidade) no DER. Utilizamos essa por acharmos mais simples e intuitiva. Voltando s entidades Funcionrios e Departamentos, temos um outro relacionamento: o que indica que um determinado funcionrio o gerente do departamento. Podemos representar esse relacionamento da seguinte forma:
Funcionrios
Gerencia
Departamentos
Fig. 2.10: Relacionamento: funcionrio gerencia departamento. Neste caso dizemos que o relacionamento da ordem 1:1 (a cardinalidade do relacionamento 1:1), pois um funcionrio gerente de um departamento apenas e cada departamento tem apenas um gerente. Em certas situaes interessante indicar os limites para o relacionamento. Por exemplo, podemos querer indicar que um departamento pode ter vrios funcionrios, mas no pode haver nenhum departamento sem funcionrio. Nestes casos indicaremos entre parnteses os limites mnimo e mximo da cardinalidade:
(1,N) Funcionrios Lotaes 1 Departamentos
Fig. 2.11: Limitando a cardinalidade. Considerando que no relacionamento gerencia entre as entidades funcionrios e departamentos todo departamento tem um e apenas um gerente, e nem todos os funcionrios so gerentes, a melhor representao seria:
1 Funcionrios Gerencia (0,1) Departamentos
Banco de Dados
13.68
Se quisermos indicar que cada departamento deve ter no mnimo um funcionrio, mas que podemos ter funcionrios que no esto lotados em nenhum departamento usaramos:
(0,1) Departamentos
2.2 Auto-relacionamento
No exemplo anterior consideramos o fato de um funcionrio gerenciar um departamento. Essa situao representada no nosso modelo atravs do relacionamento Gerencia entre as entidades Funcionrios e Departamentos. Uma outra situao ocorre quando queremos indicar que um funcionrio o gerente de outros funcionrios. Neste caso teremos um relacionamento entre um funcionrio e outros funcionrios, isto , um relacionamento entre a entidade Funcionrios e ela prpria. A este tipo de relacionamento chamamos auto-relacionamento e representamos:
Gerenciamento de pessoal Gerencia gerenciado
1 Funcionrios
Fig. 2.14: Auto-relacionamento. Neste caso, um funcionrio gerencia vrios outros (relacionamento 1:N) e vrios funcionrios so gerenciados por um funcionrio (relacionamento N:1). Nos outros relacionamentos (funcionrio gerencia departamento, por exemplo) o tipo do relacionamento era evidente, o que no ocorre no auto-relacionamento. Para evitar ambigidade, o papel exercido pelas ocorrncias no relacionamento (Gerencia/ Gerenciado) indicado no diagrama no caso do auto-relacionamento. Outro exemplo de auto-relacionamento a situao em que queremos representar o fato de uma pea produzida por uma empresa ser constituda de outras peas.
2.3 Atributos
Como j dissemos, os atributos so os dados usados para representar os objetos de uma entidade. Assim, na entidade Funcionrios poderamos ter os atributos matrcula, nome e data do nascimento:
Funcionrios
Data Nascimento Nome Matrcula
Fig. 2.15: A entidade funcionrios representada com alguns atributos. Banco de Dados 14.68
Se examinarmos o formulrio Dados Cadastrais do Funcionrio (repetido a seguir) que obtivemos ao estudar o ambiente da nossa aplicao de banco de dados, notaremos que os atributos correspondem, de certa forma, aos campos do formulrio. Dados Cadastrais do Funcionrio Matrcula: Data Nasc.: Est. Civil: Endereo: Data Adm.: Nome: Cargo: Dependentes Data Nasc.: Nome: Nacionalidade: RG: CIC: Telefone: Salrio: Sexo:
Fig. 2.16: Dados cadastrais de um funcionrio. Alm desses trs atributos, podemos ter outros, como vemos no formulrio. A escolha dos atributos que vamos incluir no nosso modelo vai depender das necessidades da nossa aplicao. O interessante a observar aqui que os atributos podem possuir caractersticas diferentes. O atributo nome possui um nico valor para cada objeto da nossa entidade. A um atributo deste tipo classificamos como atributo mono-valorado. J um atributo como endereo, que formado por outros sub-atributos, classificamos como atributo composto. Um atributo multivalorado aquele que possui diversos valores para o mesmo objeto como, por exemplo, o atributo nome do dependente, que possui um valor para cada dependente. Um atributo determinante o que possui um valor distinto para cada objeto da entidade e, portanto, identifica de maneira inequvoca o objeto. Ao conjunto de valores que um atributo pode assumir chamamos domnio do atributo. O atributo sexo, por exemplo, ter como domnio o conjunto {M,F} (quem se sentir excludo poder acrescentar outros valores ao conjunto ao efetuar a sua modelagem).
Fornecedores
Fornece
Produtos
A cardinalidade do relacionamento , sem sombra de dvida, da ordem N:N (um fornecedor pode fornecer vrios produtos e um mesmo produto pode ser fornecido por vrios fornecedores). Examinemos agora os atributos (apenas os essenciais para o nosso exemplo). Na entidade fornecedores poderamos ter: Cdigo do fornecedor e Nome do fornecedor. Na entidade produtos teramos: Cdigo do produto e Descrio do produto. E se quisermos representar a quantidade, e tambm o preo, de um determinado produto fornecido por um dos fornecedores? Esses atributos estariam vinculados a qual entidade: fornecedores ou produtos? Na realidade a nenhuma das duas entidades, pois eles so atributos do relacionamento fornece.
Fornecedores
Fornece
Produtos
Descrio do produto Cdigo do produto
Fig. 2.18: Atributos do relacionamento. O problema que surge : como determinar se um atributo est associado a uma entidade ou a outra entidade do relacionamento ou se um atributo do relacionamento? Existe um mtodo prtico para nos auxiliar nesta tarefa. No exemplo acima no h dvida quanto aos atributos cdigo do fornecedor, nome do fornecedor, cdigo do produto e descrio do produto. Examinemos, ento, os atributos quantidade fornecida e preo do produto. Como um fornecedor pode fornecer vrios produtos, fixamos um fornecedor e fazemos variar o produto. Se mudarmos de fornecedor a quantidade fornecida (ou o preo) permanece fixa ou sofre alterao? Se permanecer fixa o atributo da entidade fornecedores, caso contrrio, no . No presente caso, os atributos quantidade fornecida e preo do produto no permanecem fixos, portanto, no so atributos da entidade fornecedores. Em seguida, invertemos o teste. Fixamos um produto e fazemos variar o fornecedor. Novamente, se o atributo em questo (quantidade fornecida e preo do produto) no sofrer alterao, ento um atributo da entidade produtos. Caso contrrio, no . De novo, no presente caso, os atributos quantidade fornecida e preo do produto sofrem alterao. Portanto, no so atributos da entidade produtos. Como quantidade fornecida e preo do produto no so atributos da entidade fornecedores e nem da entidade produtos so, ento, atributos do relacionamento fornece, existente entre as entidades fornecedores e produtos.
2.4 Agregao
Consideremos a situao de uma escola onde cada professor pode lecionar vrias disciplinas e cada aluno pode estar matriculado em vrias disciplinas. Em princpio, teramos um relacionamento triplo:
Alunos A-D-P Disciplinas
Professores
Examinando melhor o exemplo, vemos que um professor leciona para vrios alunos uma determinada disciplina. Ou seja, para uma determinada disciplina os alunos tm um nico professor. Por outro lado, um determinado grupo de alunos pode ter aulas com um mesmo professor, porm em disciplinas diferentes. Portanto, o professor no se relaciona diretamente com alunos e com disciplinas e sim com o relacionamento entre alunos X disciplinas. A representao das entidades sob forma de conjuntos mostrando as ocorrncias de cada um nos ajuda a entender melhor a situao:
a1 a2 a3 a4 a5 a6 alunos d1 d2 d3 d4 disciplinas
P1
P2
P3
P4
Fig. 2.20: Relacionamento entre 3 entidades representado como conjuntos. Observando a figura acima podemos notar que alguns alunos no participam de nenhum relacionamento (A3 e A5), assim como algumas disciplinas (D3) e alguns professores (P3). Entretanto, sempre que temos um relacionamento ele envolve simultaneamente uma ocorrncia de cada entidade. Entretanto, o Modelo de Entidades e Relacionamentos no permite o relacionamento entre relacionamentos. Para contornar essa restrio, lanamos mo da agregao. A agregao uma abstrao atravs da qual relacionamentos so tratados como entidades de nvel superior.
Alunos N Cursa N Disciplinas
professores
N Leciona 1 Professores
Fig. 2.21: Exemplo de agregao. Neste diagrama mostramos que a entidade professores se relaciona com o relacionamento cursa existente entre as entidades alunos e disciplinas. As cardinalidades esto representadas na figura. Um aluno pode cursar vrias disciplinas e uma disciplina pode ter vrios alunos (cardinalidade N:N). Um professor pode lecionar vrias disciplinas para vrios grupos de alunos (aqui devemos considerar o par: Banco de Dados 17.68
disciplina X grupo de alunos) e cada grupo de alunos matriculado em uma disciplina tem apenas um professor (cardinalidade 1:N).
Leciona
Professores
Fig. 2.22: Este exemplo no forma agregao. Entretanto, essa representao no mostra o relacionamento entre professores e alunos.
Banco de Dados
18.68
Estas situaes podem ser modeladas por meio do recurso de especializao (tambm chamado de particionamento de conjunto):
Clientes
Nome Endereo
Classif. fiscal
CPF
Pessoas fsicas
Pessoas jurdicas
CGC
Fig. 2.23: Exemplo de especializao. Estamos representando neste exemplo que a entidade clientes possui os atributos nome e endereo e que particionada em dois conjuntos: pessoas fsicas e pessoas jurdicas. O conjunto pessoas fsicas possui o atributo cpf e o conjunto pessoas jurdicas possui o atributo cgc. No sentido a partir do conjunto clientes para os conjuntos pessoas fsicas e pessoas jurdicas dizemos que ocorre uma especializao. No sentido inverso, generalizao. Quando as ocorrncias da entidade particionada (clientes, no presente caso) se dividem completamente nos diversos sub-conjuntos, dizemos que ocorre uma especializao total. o que acontece neste exemplo. Os clientes so pessoas fsicas ou so pessoas jurdicas. Ningum fica de fora. Veremos a seguir um exemplo em que apenas algumas ocorrncias da entidade participam de um relacionamento. Este exemplo (figura 2.24) servir, tambm, para mostrar um caso de especializao parcial. Neste exemplo estamos representando que apenas os engenheiros participam do relacionamento com a entidade projetos. Como, seguramente, h na entidade funcionrios alguns funcionrios que no so motoristas e nem engenheiros, est configurado um caso de especializao parcial.
Funcionrios
Categoria funcional
Motoristas
Engenheiros
Nmero da CNH
Participa
Projetos
criao
do
Diagrama
de
Entidades
Dissemos no incio do tpico Modelo conceitual de dados que devemos estudar o ambiente onde o banco de dados ser usado e as necessidades de informao que se espera suprir com o mesmo. Basicamente o que procuramos identificar so as entidades e os relacionamentos entre elas. Examinando o texto que produzimos para descrever o ambiente que encontramos, podemos usar as seguintes dicas para ajudar a identificar os componentes do nosso modelo: a) a presena de um substantivo geralmente indica uma entidade: os engenheiros participam de projetos; b) a presena de um verbo uma forte indicao de um relacionamento: os engenheiros participam de projetos.
2.7 Exerccios
1) Construa um DER (Diagrama de Entidades e Relacionamentos) para um hospital com um conjunto de pacientes e um conjunto de mdicos. A cada paciente so associados os registros de diversos exames. 2) Construa um DER para uma companhia de seguros de automveis com um conjunto de clientes, onde cada um possui um certo nmero de carros. Cada carro tem um nmero de acidentes associados a ele. 3) Desenhe um exemplo para cada um dos relacionamentos apresentados a seguir, mostrando as ocorrncias em cada um deles:
a) 1 Gerenciamento de pessoal N
Gerencia
gerenciado
Funcionrios
b) N Compe N
Composta
Componente
Peas
4) O diagrama a seguir mostra o relacionamento entre trs entidades. Como o Modelo de Entidades e Relacionamentos no permite este tipo de relacionamento, refaa-o e desenhe o DER correspondente.
Banco de Dados
20.68
Cidades
C-D-P
Distribuidores
Produtos
5) Explique a diferena entre uma entidade (conjunto-entidade) e uma ocorrncia (instncia) de uma entidade. 6) O que o papel de uma entidade em um relacionamento? Quando necessrio especific-lo? 7) Considere que em uma empresa um dependente de um empregado possa ser tambm um empregado. Como voc modelaria essa situao? 8) Complete o diagrama abaixo para especificar o seguinte:
Departamentos
Controla
Compe
Alunos
Cursa
Cursos
a) Um curso no pode estar vazio, isto , deve possuir alguma disciplina em seu currculo; b) Um aluno, mesmo que no inscrito em nenhum curso, deve permanecer por algum tempo no banco de dados; c) Um aluno pode fazer mais de um curso.
Banco de Dados
21.68
O ponto de partida ser o relatrio que descreve a empresa que se pretende informatizar, produzido pela equipe de analistas aps uma srie de entrevistas com os gerentes e outros funcionrios da empresa. O processo de obteno dessas informaes foge do escopo deste trabalho e, portanto, no ser abordado.
Devemos examinar melhor a frase e extrair dela as informaes fundamentais, que podem ser resumidas na frase: fornecedores fornecem produtos. Os substantivos fornecedores e produtos podem ser entidades e o verbo fornecem pode ser um relacionamento. Fornecedores e produtos so entidades do mundo real. Mas, como ter certeza de que devem ser includas no nosso modelo? muito simples. Basta verificarmos se precisamos guardar no nosso sistema dados sobre estas entidades. Seguramente precisaremos guardar dados sobre os fornecedores: entre outros, seu nome e endereo. E tambm sobre os produtos: sua descrio, unidade de medida etc. Podemos ver que h um relacionamento entre os fornecedores e os produtos: o fato daqueles fornecerem produtos. Sobre esse relacionamento precisamos de, pelo menos, um dado: o preo do produto fornecido por cada fornecedor. Portanto, conclumos que fornecedores e produtos so entidades que devem constar do DER e tambm o relacionamento fornece entre essas entidades.
Fornecedores
Fornece
Produtos
Fig. 3.1: Incio do DER para o estudo de caso. As cardinalidades do relacionamento esto indicadas no diagrama: um fornecedor pode fornecer vrios produtos e um produto pode ter mais de um fornecedor. Os atributos foram omitidos e s sero representados quando se fizerem necessrios. Nem sempre acertamos de primeira. No decorrer da criao do DER vamos sentindo a necessidade de acrescentar outras entidades e relacionamentos e, at mesmo, excluir algumas entidades e alterar outros relacionamentos. Isso normal no processo. Examinando novamente o relatrio da anlise construmos a seguinte lista de provveis entidades (voc provavelmente construiria uma lista um pouco diferente): clientes (pessoas ou empresas que compram na AdD) vendedores (funcionrios da AdD que efetuam vendas para os clientes) almoxarifes (funcionrios da AdD que controlam o estoque) motoristas (funcionrios da AdD que efetuam as entregas dos produtos comprados pelos clientes)venda (relao de produtos vendidos por um vendedor a um cliente) entrega (relao de produtos entregues aos clientes por um motorista) fornecedores (empresas que vendem produtos para a AdD) produtos (mercadorias compradas dos fornecedores e vendidas para os clientes) estoque (relao de produtos comprados aos fornecedores e disponveis para venda aos clientes) pedido de compra (relao de produtos encomendados a um fornecedor) pagamento (?) nota fiscal (relao de produtos vendidos a um cliente) Todos os itens que constam da relao so entidades do mundo real (muito embora alguma possa ser uma entidade abstrata). Devemos examinar cada uma delas para decidir se devem ser includas no nosso modelo. Uma primeira observao: note-se que difcil descrever a entidade candidata pagamento. Essa dificuldade uma forte indicao de que, provavelmente, ela no uma entidade.
Banco de Dados
23.68
Examinando as demais entidades candidatas, conclumos que algumas so fortes candidatas: clientes, vendedores, almoxarifes, motoristas, fornecedores e produtos. Precisamos guardar dados para cada uma delas: nome, endereo, CPF ou CGC etc. para clientes nome e cargo para vendedores nome e cargo para almoxarifes nome e cargo para motoristas nome, endereo, CGC etc. para fornecedores descrio, unidade de medida etc. para produtos. Para as demais precisamos efetuar uma anlise mais detalhada. Vrios questionamentos devem ser feitos at se chegar a uma concluso e a enumerao de todos eles tornaria esse trabalho muito extenso. Portanto, procuraremos relacionar os que julgamos mais importantes ou interessantes. fcil notar pela prpria descrio que fizemos das entidades candidatas que vendedores, almoxarifes e motoristas compem uma nica entidade, que chamaremos funcionrios. Caso seja necessrio, podemos usar o recurso da especializao para particion-la em duas ou mais entidades. Outra dvida que surge : produtos e estoque so duas entidades diferentes ou no? Inicialmente consideraremos como entidades distintas. Ao detalhar cada uma delas (seus atributos) e os relacionamentos com as outras entidades do modelo teremos mais subsdios para decidir. Observando as descries das entidades candidatas venda (relao de produtos vendidos por um vendedor a um cliente) e nota fiscal (relao de produtos vendidos a um cliente), ficamos com a impresso de que, provavelmente, elas constituem uma nica entidade. Deixaremos a deciso para depois do detalhamento. Outro problema que encontramos se deve ambigidade intrnseca da linguagem natural (portugus, no caso) usada no relatrio da anlise. O mesmo fato (a venda de um produto a um cliente) referido de vrias maneiras: o vendedor vende um produto para um cliente; o cliente compra um produto da empresa etc. Isso pode indicar relacionamentos diferentes entre entidades, mas nem sempre verdade. Por enquanto j avanamos bastante com relao s entidades. Vamos agora tentar definir os relacionamentos, mas, antes vamos fazer um resumo: Clientes Fornecedores Funcionrios Produtos
Fig. 3.2: Entidades identificadas. Vamos rever o relacionamento fornecem, existente entre as entidades fornecedores e produtos. Nossa equipe de anlise voltou a buscar informaes na empresa AdD e concluiu que a empresa recebe as cotaes dos produtos enviadas pelos fornecedores e, quando precisa envia para os fornecedores pedidos de compra de produtos especficos. Como mais de um fornecedor pode oferecer um mesmo produto, o pessoal responsvel pelas compras (os almoxarifes) seleciona o fornecedor usando como critrio o menor preo.
Banco de Dados
24.68
Fig. 3.3: Relacionamento entre fornecedores e produtos. Ao falarmos em entidades e em relacionamentos esto implcitos os atributos, isto , os dados que queremos guardar no banco de dados para cada um deles. A entidade fornecedores deve ter os seguintes atributos (pode ser necessrio acrescentar outros atributos posteriormente): a identificao do fornecedor e o seu nome. A entidade produtos deve ter os seguintes atributos: a identificao do produto, a descrio do produto e a unidade de medida do produto. O relacionamento oferecem deve ter como atributo o preo oferecido para o produto. Descobrimos, tambm, uma nova entidade, pedidos_compra_fornecedores, que se relaciona com a entidade fornecedores (relacionamento recebem) e com a entidade produtos. O relacionamento recebem direto:
Fornecedores 1 Recebem N Pedidos_compra_ fornecedor
Fig. 3.4: Relacionamento entre fornecedores e pedidos_compra_fornecedor. O relacionamento recebem, entre as entidades fornecedores e pedidos_compra_fornecedores no tem atributos prprios. Para esse relacionamento no precisamos acrescentar nenhum atributo entidade fornecedores. A entidade pedidos_compra_fornecedor ter os seguintes atributos: a identificao do pedido de compra, a identificao do fornecedor, a data de entrega dos produtos que constam do pedido e um cdigo para indicar a situao do pedido. J a entidade pedidos_compra_fornecedor est relacionada entidade produtos:
Pedidos compra fornecedor
Contm
Produtos
Fig. 3.5: Relacionamento entre pedidos_compra_fornecedor e produtos. No h necessidade de novos atributos nas entidades produtos e pedidos_compra_fornecedor devido a esse relacionamento. Mas o relacionamento contm precisa dos atributos preo do produto e a quantidade pedida.
Banco de Dados
25.68
Fornecedores N
Recebem
Contm
N Oferecem
Fig. 3.6: DER parcial.
N
Produtos
Fazem
N Pedidos compra N
clientes
Tiram
Vendedores
N
Contm
N
Produtos
Fig. 3.7: Modelagem da compra efetuada pelos clientes. Essa parte do DER deveria ser juntada s anteriores. Deixaremos de faz-lo aqui por dificuldades grficas. Quando estamos criando o DER para sistemas grandes geralmente usamos um software especfico que, entre outros recursos, facilitam a apresentao do resultado. N Neste ponto, devemos nos perguntar: e a nota fiscal? Normalmente a nota fiscal seria modelada de modo muito parecido com o pedido de compra do cliente e, praticamente, com os mesmos atributos. Portanto, os dados do pedido de compra do cliente seriam suficientes. Entretanto, se considerarmos que a nota fiscal deve usar um formulrio pr-impresso (por causa do nmero da nota fiscal) pode acontecer de um determinado pedido de compra ter mais itens do que seria possvel imprimir em uma nica folha do formulrio. Desta forma, um nico pedido de compra pode gerar mais de uma nota fiscal. Logo, precisaremos da entidade notas_fiscal: Fig. 3.8: Modelagem das notas fiscais.
Pedidos compra clientes
Geram
Notas fiscais
Contm
N
Produtos
Banco de Dados
26.68
Neste ponto devemos fazer uma observao: certos relacionamentos, muito embora entre entidades diferentes, so bastante semelhantes (como no caso dos relacionamentos entre pedidos_compra_cliente e produtos e entre notas_fiscais e produtos), de tal modo que se torna difcil encontrar nomes distintos para os relacionamentos. Embora devamos tentar sempre escolher nomes diferentes para os relacionamentos, isto no imprescindvel, a menos que o relacionamento tenha atributos prprios, pois, neste caso, no nvel fsico o relacionamento ser traduzido em uma tabela, que no pode ter nome igual ao de outro objeto do banco de dados. Por esse motivo deixamos os dois relacionamentos acima com o mesmo nome. Um problema que ficou pendente nesta discusso diz respeito s entidades produtos e estoque. Vamos nos aprofundar nesta questo examinando os atributos de cada uma das entidades. A entidade produtos tem, at agora, os seguintes atributos: a identificao do produto, a descrio do produto e a unidade de medida do produto. Para a entidade estoque, os atributos seriam: a identificao do produto, a descrio do produto, a unidade de medida do produto, a quantidade em estoque e o preo de venda do produto. Portanto, podemos concluir que as entidades se superpem, logo devem ser modeladas como uma nica entidade, acrescentando os atributos quantidade em estoque e o preo de venda do produto. Pode ser que, durante a criao do modelo fsico de dados, quando sero definidas as tabelas que comporo o banco de dados, seja interessante separar esta entidade em duas tabelas, para melhorar o desempenho do sistema. Entretanto, no nvel conceitual modelaremos a situao apenas com a entidade produtos. Cremos que o que foi feito at agora neste estudo de caso suficiente para ilustrar o que foi visto na parte terica. Para no nos alongarmos mais no assunto, deixamos a ttulo de exerccio para o leitor complementar o modelo.
Em um banco de dados criado para dar suporte a uma aplicao de folha de pagamento, por exemplo, o objeto do banco de dados seria o funcionrio. Teramos no registro pai os dados do funcionrio: Nome Departamento Cargo Salrio ... Fig. 4.1: Registro pai (funcionrio) em um banco de dados hierrquico. Na figura acima colocamos os nomes dos campos para facilitar a compreenso. No arquivo do banco de dados cada campo teria o contedo correspondente: o nome do funcionrio, o departamento onde trabalha, o cargo que ocupa, seu salrio etc. Para a elaborao da folha de pagamento seriam necessrios outros dados. Por exemplo, dados sobre os dependentes do funcionrio. Teramos, ento, um registro para cada dependente: Nome dependente Data Nasc. Grau dep. ... Fig. 4.2: Registro filho (dependente) em um banco de dados hierrquico. Os registros relativos a um funcionrio ficariam organizados da seguinte forma: Jos Jos Jr. Compras 06/12/1990 Auxiliar Filho ... 700,00 ...
Maria Jos 06/12/1991 Filha ... Fig. 4.3: Organizao dos registros no modelo hierrquico. Se precisssemos guardar dados sobre a qualificao do funcionrio, criaramos um grupo de registros para esses dados: Curso Durao ... Fig. 4.4: Registro para a qualificao do funcionario.
Banco de Dados
28.68
e o arquivo ficaria com o seguinte aspecto (no estranhem... naquele tempo no se digitava, datilografava-se): Jos Jos Jr. Datilografia Compras 06/12/1990 6 Auxiliar Filho Filha ... ... ... 700,00 ...
... ... ... Fig. 4.5: Exemplo de arquivo em um banco de dados hierrquico. Este modelo de dados tinha uma grande vantagem (foi o pioneiro) e vrias desvantagens. Para alterar o salrio dos auxiliares do departamento de compras era preciso alterar o registro de cada funcionrio lotado no departamento Compras e cujo cargo fosse Auxiliar. Para contornar esse problema, criava-se um arquivo auxiliar contendo a relao de cargos com os respectivos salrios e o salrio do funcionrio era retirado do registro pai. Isso, entretanto, era apenas um paliativo e esse no era o principal problema do modelo hierrquico. O principal problema do modelo hierrquico era sua caracterstica fundamentalmente seqencial. Por exemplo, para emitir um relatrio contendo os nomes de todos os funcionrios com curso de datilografia, o programa tinha que ler primeiro o registro pai e, atravs dele, chegar aos registros de cursos do funcionrio. Outra conseqncia da estrutura hierrquica que o banco era organizado para atender melhor aplicao principal, em detrimento de todas as demais aplicaes, pois no possvel uma hierarquia mltipla. Como exemplo desta situao, tomemos o caso de um fornecimento de peas.
Banco de Dados
29.68
Ou organizamos o banco de dados tendo como registro pai os dados do fornecedor e os registros das peas como registros filhos (figura 4.6) ou o contrrio (figura 4.7), mas, no podemos ter as duas situaes ao mesmo tempo: F0001 P0001 P0003 F0002 P0002 Fornecedor 1 Rebimboca da parafuseta Pino da grampola Fornecedor 2 Pino da parafuseta ... 45,50 49,00 ... 300,00 ... 45,50 ... 50,00 49,00 ... ... ... ... ... ... ... 300,00 50,00 ... ...
P0003 Pino da grampola Fig. 4.6: O fornecedor o registro pai. P0001 P0002 P0003 Rebimboca da parafuseta F0001 F0002 F0001 Fornecedor 1 Fornecedor 2 Fornecedor 1 Pino da parafuseta Pino da grampola
Os valores apresentados nas duas figuras representam o preo que cada fornecedor cobra pela pea fornecida. por este motivo que a pea P0003 tem dois valores diferentes na primeira figura e que os valores foram deslocados para os registros dos fornecedores na segunda. No primeiro caso o projetista do banco de dados considerou mais importante a figura do fornecedor enquanto que no segundo caso seria a pea. A primeira configurao mais eficiente para uma consulta do tipo Quais as peas fornecidas pelo fornecedor tal?, e menos eficiente para uma consulta do tipo Quais os fornecedores da pea tal?. No segundo caso a situao se inverte. Resumindo, no modelo de dados hierrquico o banco de dados projetado para ser mais eficiente com relao a uma aplicao em detrimento de todas as demais. O que era condizente com as necessidades da poca em que o modelo foi criado, que era a criao de um banco de dados para atender a uma aplicao. Quando se tentou usar o mesmo banco de dados para outras aplicaes que o problema apareceu. Outro problema com o modelo hierrquico que no possvel inserir no banco um dado dependente sem que antes tenha sido inserido o dado principal. Por exemplo, se considerarmos a primeira configurao, em que o fornecedor o registro pai e a pea o registro filho, no podemos inserir no banco dados relativos a uma pea para a qual ainda no haja pelo menos um fornecedor. Por outro lado, se eliminarmos do banco um fornecedor que seja o nico fornecedor de uma determinada pea, perderemos os dados sobre essa pea (ao eliminarmos do banco de dados um registro pai, todos os registros filhos deste registro so tambm eliminados). Inicialmente tentou-se solucionar esses problemas com a criao do modelo de dados em rede. Banco de Dados 30.68
Pea1
Pea2
Pea3
Arquivo Pea
Fig. 4.8: Estrutura dos arquivos no modelo em rede. Complicado, no? Felizmente, a interpretao desta tralha toda fica por conta do SGBD. Apenas para acompanhar a discusso, vamos destrinchar esta confuso. No arquivo que contm os dados dos fornecedores (chamemos de arquivo fornecedor), o registro do primeiro fornecedor aponta (tem uma indicao) para o registro do segundo fornecedor, que aponta para o terceiro e assim por diante, at o ltimo, que aponta de volta para o primeiro. Ocorre algo semelhante no arquivo peas. O registro da primeira pea aponta para o registro da segunda pea, que aponta para o terceiro etc. e, finalmente, o ltimo aponta para o primeiro. O registro do primeiro fornecedor tem um apontador para o arquivo de ligao. Esse apontador aponta para um registro no arquivo de ligao que por sua vez aponta para a primeira pea fornecida pelo fornecedor1. Para descobrirmos a prxima pea fornecida pelo fornecedor1 basta seguirmos a cadeia no arquivo de ligao e, assim, veremos que o fornecedor1 tambm fornece a pea3. Como, no arquivo de ligao, o registro correspondente pea3 aponta de volta para o primeiro registro, isso indica o fim da seqncia. O arquivo de ligao mostrado na figura acima estabelece a ligao do fornecedor para a pea. Se quisssemos a ligao inversa (da pea para o fornecedor) precisaramos ter um outro arquivo de ligao semelhante a esse. Com esses dois arquivos de ligao, a resposta para uma consulta do tipo Quais as peas fornecidas pelo fornecedor tal? to eficiente quanto para uma consulta do tipo Quais os fornecedores da pea tal?. No modelo em rede podemos inserir dados para uma pea mesmo que ainda no exista fornecedor para a mesma. E, podemos eliminar o nico fornecedor de uma pea sem perder os dados da pea. Apesar de aparentemente muito complicado, como o estabelecimento e a manuteno dessas ligaes fica por conta do SGBD, a complicao no o verdadeiro problema do modelo em rede.
Banco de Dados
31.68
So dois os principais problemas do modelo de dados em rede. Os apontadores que mostramos ao descrever o modelo so referncias s posies fsicas dos registros apontados dentro dos arquivos. Devido s sucessivas inseres e excluses de registros no banco de dados, o desempenho comea a cair, sendo necessrio ento reorganizar fisicamente os arquivos que compem o banco de dados, o que consome algum tempo e recursos computacionais. O outro grande problema desse modelo que podemos ter vrias cadeias de apontadores partindo de um mesmo registro. Por exemplo, a partir do arquivo peas poderamos ter uma cadeia de apontadores para fazer a ligao com o arquivo fornecedor (para podermos determinar quais os fornecedores de uma pea) e outra para o arquivo produto (para podermos determinar em quais produtos a pea usada). E precisamos saber em cada consulta qual cadeia dever ser seguida.
Fornecedor 2 ... Fig. 4.9: Tabela fornecedores no modelo relacional. Cdigo_pea P0001 P0002 Nome_pea Pino da parafuseta ... ... ... Rebimboca da parafuseta ...
Trs fatos devem ser observados. Em primeiro lugar, note-se que a primeira linha de cada figura foi colocada na figura apenas para facilitar a compreenso. Na realidade no fazem parte das tabelas. Em segundo lugar, note-se que o preo das peas no foi colocado na tabela pea e nem na tabela fornecedor. E, finalmente, note-se que no h qualquer forma de relacionar os fornecedores com as peas. Antes de mostrar como feito o relacionamento entre as tabelas, vamos definir de um modo mais preciso o conceito de tabelas no contexto do modelo relacional. O conceito de banco de dados relacional foi apresentado em 1970 por E. F. Codd. J nesta poca ele previa que a adoo de um modelo relacional de dados... permite o desenvolvimento de uma sub-linguagem universal (para manipulao) de dados..., o que veio a se concretizar com a criao da linguagem SQL (que veremos mais adiante).
Banco de Dados
32.68
Codd descreveu uma tabela como uma matriz retangular com as seguintes propriedades: 1) homognea com relao s colunas, isto , em qualquer coluna selecionada os itens so todos do mesmo tipo, enquanto itens de colunas diferentes no so necessariamente do mesmo tipo. 2) Cada item um nico nmero ou uma cadeia de caracteres (portanto, se tomarmos um item em qualquer linha e coluna, no acharemos um conjunto de nmeros ou um grupo). Posteriormente, as trs propriedades seguintes foram acrescentadas por Carolyn J. Hursch e Jack L. Hursch: 3) Todas as linhas da tabela tm que ser diferentes (no so permitidas linhas duplicadas). 4) A ordem das linhas dentro da tabela no relevante. 5) So atribudos nomes diferentes s colunas da tabela, e a ordem das colunas no relevante, isto , as colunas so identificadas pelo seu nome e no pela sua posio dentro da tabela. Complementando, definimos os termos a seguir para facilitar a compreenso do texto: 1) Uma relao uma tabela. 2) Um atributo (ou campo) ser chamado de coluna. 3) Um nico registro ser chamado de linha. 4) Um valor individual existente na interseo de qualquer linha com coluna ser chamado de dado. Para atender propriedade que diz que no haver linhas duplicadas na tabela cada tabela dever ter pelo menos uma coluna cujos valores sejam diferentes para cada linha. Essa coluna, que servir para identificar os registros da tabela, ser considerada a chave da tabela (o atributo determinante do modelo conceitual). A coluna cdigo_fornecedor exerce essa funo na tabela fornecedor e assim como a coluna cdigo_pea na tabela pea. Para representar o relacionamento entre as tabela criamos uma terceira tabela, que chamaremos de fornece: Cdigo_pea Cdigo_fornecedor P0001 P0002 P0003 F0001 F0002 F0001 Preo 300,00 45,50 50,00
P0003 F0002 49,00 Fig. 4.11: A tabela fornece estabelece a ligao entre as tabelas peas e fornecedor. Como podemos observar na figura acima, a nova tabela foi construda com as colunas cdigo_pea (chave da tabela pea), cdigo_fornecedor (chave da tabela fornecedor) e preo, que indica o preo cobrado pelo fornecedor pela pea em questo.
Banco de Dados
33.68
O modelo de dados relacional resolveu de maneira simples os problemas apresentados pelos modelos anteriores e, devido a isso, tornou-se o modelo de dados padro.
4.1 Exerccios
1) Descreva sucintamente: a) o modelo hierrquico; b) o modelo em rede e c) o modelo relacional. 2) Quais as vantagens e desvantagens de cada um dos trs modelos lgicos de dados? 3) Considerando o modelo relacional de dados, defina: a) tabela; b) linha; c) coluna e d) dado. 4) Estabelea uma analogia entre os elementos de um DER e: a) b) c) d) uma tabela; uma linha de uma tabela; uma coluna de uma tabela e um dado de uma tabela.
5.1 Chaves
Vimos que no modelo relacional os dados so armazenados em tabelas (matrizes retangulares) onde cada linha contm dados referentes a um objeto e cada coluna representa um atributo. Vimos, tambm, que no podemos ter linhas duplicadas nas tabelas e, portanto, pelo menos uma coluna da tabela deve ter valores distintos para cada uma das linhas e que essa coluna recebe o nome de chave da tabela (ou atributo chave).
Banco de Dados
34.68
Um atributo chave , portanto, uma coluna cujos valores servem para identificar de forma unvoca cada uma das linhas da tabela. Para determinarmos qual ser a chave da nossa tabela comeamos verificando quais colunas da tabela atendem ao requisito necessrio (valores distintos). Temos ento as chaves candidatas. Em uma tabela funcionrio, por exemplo, poderamos ter, entre outros atributos, os seguintes: Nome CPF Cargo Nome Depto Verba Depto Salrio Fig. 5.1: Possveis campos da tabela funcionario. ...
Destes atributos, poderamos pensar inicialmente no nome e no cpf como chaves candidatas. Acontece que h uma grande probabilidade de termos mais de um funcionrio com o mesmo nome (podem aparecer alguns Jos da Silva ou Raimundo Nonato). Mas, no podemos raciocinar em termos de probabilidade e sim de possibilidade: basta haver a possibilidade de duplicidade para incapacitar o atributo como chave. Quanto ao atributo cpf, no h possibilidade de duplicidade. Portanto, serve como chave candidata. Entretanto, no o atributo ideal, pois no temos controle sobre sua codificao. Se, por algum motivo, a Secretaria da Receita Federal do Ministrio da Fazenda resolver alterar sua codificao, aumentando o nmero de dgitos do CPF, por exemplo, teremos que alterar o nosso banco. O ideal seria criarmos um atributo especfico com essa finalidade, tal como uma matrcula para os funcionrios. E, teremos a nova tabela: Matrcula Nome CPF Cargo Nome Depto Verba Depto Salrio Fig. 5.2: Segunda verso da tabela funcionario. ...
Temos agora duas chaves candidatas: matrcula e cpf. Pode at acontecer de termos mais de duas chaves candidatas. Dentre elas escolheremos uma como chave primria. As demais chaves candidatas tornam-se, ento chaves secundrias. A chave primria exerce um papel muito importante no modelo relacional, pois por meio dela que estabeleceremos o relacionamento entre as tabelas. No caso de uma tabela que represente um relacionamento, tal qual a tabela fornece (figura 5.3), no temos nenhuma coluna que, sozinha, sirva como chave candidata. Neste caso, precisamos dos valores de duas colunas (cdigo_pea e cdigo_fornecedor) para identificar cada linha. Neste caso usaremos como chave a concatenao das duas colunas e teremos ento uma chave composta. H outras situaes em que precisaremos concatenar duas ou mais colunas para formar a chave, seja ela uma chave primria ou no. Em todos esses casos dizemos que a chave composta. Cdigo_pea Cdigo_fornecedor P0001 P0002 P0003 F0001 F0002 F0001 Preo 300,00 45,50 50,00 49,00
Banco de Dados
35.68
Na tabela funcionrio, mostrada na figura 5.2 acima, os contedos dos campos nome depto e verba depto seriam repetidos nas linhas de todos os funcionrios do mesmo departamento, o que constituiria em redundncia. Alm da perda de espao no arquivo, essa redundncia deve ser evitada pelos problemas que causa. Para alterar o campo verba depto, por exemplo, todas as linhas referentes ao mesmo departamento teriam que ser alteradas. Este tipo de redundncia eliminado por meio da normalizao das tabelas, um processo que ser tratado mais adiante. Por enquanto, mostraremos apenas o resultado final da normalizao para exemplificar outro tipo de chave. No processo de normalizao os dados dos departamentos seriam movidos para uma tabela prpria, departamento, e, em seu lugar na tabela funcionrio ficaria a chave da nova tabela para fazer a ligao entre as duas tabelas. Na tabela departamento, a coluna cdigo depto recebe o nome de chave primria. J na tabela funcionrio, recebe o nome de chave estrangeira. Matrcula Nome CPF Cargo Cdigo Depto Salrio ... ...
Cdigo Depto Nome Depto Verba Depto Fig. 5.4: Exemplo de chave estrangeira.
Podemos acessar os dados da tabela funcionrio por ordem crescente dos valores da coluna cpf (ou de qualquer outra coluna). Neste caso a coluna em questo considerada uma chave alternativa (e nesse caso podemos ter duplicidade da chave, pois no se trata de uma chave primria).
Banco de Dados
36.68
5.1.2 Exerccios
1) Considere uma entidade empregados, com os seguintes atributos: matrcula, nome, endereo, cpf, cdigo do departamento, data de nascimento e salrio. Que atributos comporiam as chaves candidatas, a chave primria e as chaves secundrias? 2) Considere uma entidade automvel, com os seguintes atributos: nmero da placa, ano de fabricao, marca, cor, modelo e nmero do chassi. Que atributos comporiam as chaves candidatas, a chave primria e as chaves secundrias? 3) Considere uma entidade notas fiscais, representando as notas fiscais emitidas por uma empresa, com os seguintes atributos: nmero da nota fiscal, data de emisso, cgc do cliente, razo social do cliente e valor total da nota. Que atributos comporiam as chaves candidatas, a chave primria e as chaves secundrias? 4) Considere uma entidade notas fiscais, representando as notas fiscais recebidas por uma empresa, com os seguintes atributos: nmero da nota fiscal, data de emisso, cgc do fornecedor, razo social do fornecedor e valor total da nota. Que atributos comporiam as chaves candidatas, a chave primria e as chaves secundrias?
5.2 Normalizao
Em 1970, E. F. Codd apresentou a primeira forma normal para tabelas no modelo relacional, seguida em 1972 pela segunda e pela terceira formas normais e complementadas e aperfeioadas por outros autores a partir da. A normalizao das tabelas serve para diminuir a redundncia dos dados nas tabelas e evitar a anomalia da atualizao. Veremos, atravs de exemplos, como esses problemas ocorrem e como usar a normalizao para contorn-los. Usaremos o mais popular exemplo para explicar a normalizao: uma nota fiscal (omitindo vrios detalhes para simplificar):
Empresa Preo Bom Pr Cachorro Cliente: Fulano de Tal End: Rua Sobe e Desce, 35 UF: Descrio Coleira Simples Rao Balanceada Focinheira Osso de Couro Shampoo Antipulgas Cidade: Miracema do Norte Cdigo 1256 0237 2549 0788 0036 Quant Unid 1 PCA 40 KG 1 PCA 3 PCA 2 FCO CPF/CGC RJ Data: Preo Unit 7,25 4,30 12,90 2,50 6,40 Bairro: Tatu de Botas 25/03/2007 Preo Total 7,25 172,00 12,90 7,50 12,80 No 001234 111.111.111-11
Total da Nota:
212,45
Fig. 5.5: Exemplo de uma nota fiscal. Vamos, inicialmente, criar uma tabela, que chamaremos de nota_fiscal, para armazenar esses dados, sem grandes preocupaes. Como o espao no papel pequeno
Banco de Dados
37.68
para acomodar todas as colunas da tabela, a mesma ser dividida, apenas para efeito de apresentao, em tantas partes quantas se fizerem necessrias. Tambm, para efeito de apresentao, colocaremos na primeira linha da tabela o nome das colunas. O primeiro problema que encontramos com relao aos dados do corpo da nota fiscal (os dados relativos aos produtos comprados), que um dado com repeties (atributo multivalorado). Consideremos o cdigo do produto. Se usarmos uma coluna para cada ocorrncia do cdigo (figura 5.6) precisaremos tantas colunas quantas forem as linhas da nota fiscal. Como nem todas as notas fiscais tero todas as linhas preenchidas, estaremos desperdiando espao na tabela. Cdigo1 Cdigo2 ... 1256 237 ... Fig. 5.6: Uma coluna para cada cdigo de produto. Outra soluo seria criarmos uma linha na tabela para cada linha efetivamente preenchida da nota fiscal e repetirmos os demais campos: Nmero Nome_cliente CPF_CGC 001234 001234 001234 001234 Endereo Bairro Tatu de Botas Tatu de Botas Tatu de Botas Tatu de Botas Tatu de Botas Fulano de Tal 11111111111 R. Sobe e Desce, 35 Fulano de Tal 11111111111 R. Sobe e Desce, 35 Fulano de Tal 11111111111 R. Sobe e Desce, 35 Fulano de Tal 11111111111 R. Sobe e Desce, 35
001234 Fulano de Tal 11111111111 R. Sobe e Desce, 35 Fig. 5.7: Parte 1 da tabela nota_fiscal. Cidade Miracema do Norte Miracema do Norte Miracema do Norte Miracema do Norte UF Data RJ 25/03/2007 RJ 25/03/2007 RJ 25/03/2007 RJ 25/03/2007
Miracema do Norte RJ 25/03/2007 Fig. 5.8: Parte 2 da tabela nota_fiscal. Cd 1256 0237 2549 0788 Qtd Unid Descrio 1 Pca 40 Kg 1 Pca 3 Pca Coleira simples Rao balanceada Focinheira Osso de couro Preco_Unit Preco_Tot Tot_Nota 7,25 4,30 12,90 2,50 6,40 7,25 172,00 12,90 7,50 12,80 212,45 212,45 212,45 212,45 212,45
0036 2 Fco Shampoo antipulgas Fig. 5.9: Parte 3 da tabela nota_fiscal. Essa soluo ainda no a ideal.
Banco de Dados
38.68
A chave primria da tabela item_nota ser composta pela concatenao das colunas nmero e cd. A tabela nota_fiscal ficaria, ento sem os dados do corpo da nota fiscal: Nmero Nome_cliente CPF_CGC Endereo Bairro 001234 Fulano de Tal 11111111111 R. Sobe e Desce, 35 Tatu de Botas Fig. 5.11: Tabela nota_fiscal na primeira forma normal (parte 1). Cidade UF Data Tot_Nota Miracema do Norte RJ 25/03/2007 212,45 Fig. 5.12: Tabela nota_fiscal na primeira forma normal (parte 2). As tabelas nota_fiscal e item_nota esto agora na primeira forma normal. Se implementssemos as tabelas como mostrado acima, alm do desperdcio de espao no arquivo facilmente observvel, devido redundncia, teramos tambm os problemas conhecidos como anomalia de atualizao: anomalia de incluso: para incluir um novo cliente no banco de dados, o cliente tem que estar associado a alguma nota fiscal; anomalia de excluso: se excluirmos o nico cliente que comprou um determinado produto perderemos os dados referentes a esse produto; anomalia de alterao: caso o fornecedor de algum produto decida alterar o preo do produto ser necessrio percorrer toda a tabela alterando o preo do produto em cada uma das linhas em que ele aparecer. Da a necessidade de normalizar as tabelas de acordo com outras formas normais. Neste ponto interessante uma observao para mostrar a importncia da modelagem conceitual. As tabelas foram montadas de propsito para exemplificar o processo de normalizao. Entretanto, esse seria o resultado que obteramos se
Banco de Dados
39.68
partssemos direto para montar as tabelas. Ou, por outro lado, fazendo inicialmente a modelagem conceitual no chegaramos a esse tipo de tabela, pois na modelagem conceitual cada entidade contm apenas dados relativos a um nico objeto. E no teramos misturado em uma mesma tabela dados do cliente, dos produtos e da venda. bvio que a modelagem conceitual no resolver todos os problemas, mas ajudar bastante.
001241 Fulano de Tal 11111111111 R. Sobe e Desce, 35 Fig. 5.13: Tabela nota_fiscal (parte1). Cidade Piracanduva Novo Horizonte UF PI Data 25/03/2007 28/03/2007 Tot_Nota 212,45 114,30 28,75 3,20 Miracema do Norte RJ
MG 30/03/2007
Miracema do Norte RJ 25/06/2007 Fig. 5.14: Tabela nota_fiscal (parte2). Nmero 001234 001234 001234 001234 001234 001238 001238 001238 001239 001239 Cd 1256 0237 2549 0788 0036 0237 2549 0788 1256 0237 Qtd Unid Descrio 1 Pca 40 Kg 1 Pca 3 Pca 2 Fco 20 Kg 2 Pca 1 Pca 1 Pca 5 Kg
Preco_Unit Preco_Tot 7,25 4,30 12,90 2,50 6,40 4,30 12,90 2,50 7,25 4,30 3,20 7,25 172,00 12,90 7,50 12,80 86,00 25,80 2,50 7,25 21,50 3,20
Coleira simples Rao balanceada Focinheira Osso de couro Shampoo antipulgas Rao balanceada Focinheira Osso de couro Coleira simples Rao balanceada Shampoo comum
Banco de Dados
40.68
As tabelas nota_fiscal e item_nota esto na primeira forma normal, mas ainda possuem muitos dados redundantes, que dificultam a atualizao. Em uma tabela qualquer uma coluna (ou conjunto de colunas) B funcionalmente dependente de uma coluna A se para cada valor de A o valor de B for sempre o mesmo. Por exemplo, na tabela nota_fiscal, todas as colunas so funcionalmente dependentes da coluna nmero (isso lgico, pois a coluna nmero a chave primria da tabela e, portanto, no h repetio). Ainda na tabela nota_fiscal, toda vez que aparece o nome Fulano de Tal na coluna nome_cliente, os valores das colunas cpf_cgc, endereo, bairro, cidade e uf so sempre os mesmos: 11111111111, R. Sobe e Desce, 35, Tatu de Botas, Miracema do Norte, RJ (apenas para efeito de exemplo no consideraremos o fato de poder existir dois clientes com o mesmo nome). Portanto, as colunas cpf_cgc, endereo, bairro, cidade e uf so funcionalmente dependentes da coluna nome_cliente. Na tabela item_nota as colunas unid, descrio e preo_unit so funcionalmente dependentes da coluna cd. claro que no determinaremos a existncia dessas dependncias examinando o contedo das tabelas, e sim atravs do estudo do relacionamento entre os atributos durante a modelagem conceitual (para um dado cliente o cpf/cgc, o endereo etc. sero sempre os mesmos). Em uma tabela cuja chave primria seja composta (concatenao de duas ou mais colunas) podem ocorrer duas situaes: uma ou mais colunas serem dependentes apenas de uma parte da chave (dependncia funcional parcial) ou da chave completa (dependncia funcional total). Na tabela item_nota temos exemplo das duas situaes. A chave primria da tabela composta pelos campos nmero e cd. Os campos unid, descrio e preo_unit so dependentes funcionais apenas da coluna cd, enquanto que a coluna qtd dependente funcional de todas as colunas da chave primria. No exemplo que citamos anteriormente, da dependncia funcional das colunas cpf_cgc, endereo, bairro, cidade e uf da tabela nota_fiscal com relao coluna nome_cliente ocorre uma situao diferente. Neste caso, as colunas em questo so funcionalmente dependentes de uma coluna (cliente) que no faz parte da chave primria da tabela (nmero), mas que funcionalmente dependente da chave primria (a coluna cliente no faz parte da chave primria, mas funcionalmente dependente da chave primria). A esse tipo de dependncia damos o nome de dependncia funcional transitiva.
tabela. A nova tabela (produto) ter como chave primria a coluna (ou colunas) da qual as colunas movidas so funcionalmente dependentes (no caso a coluna cd). Apresentamos a seguir as tabelas aps a normalizao. Nmero Cd Qtd Preco_Tot 001234 001234 001234 001234 001234 001238 001238 001238 001239 001239 1256 0237 2549 0788 0036 0237 2549 0788 1256 0237 1 40 1 3 2 20 2 1 1 5 7,25 172,00 12,90 7,50 12,80 86,00 25,80 2,50 7,25 21,50
001241 0035 1 3,20 Fig. 5.16: Tabela item_nota na Segunda Forma Normal. Cd 0035 0036 0237 0788 1256 Unid Descrio Fco Fco Kg Pca Pca Shampoo comum Shampoo antipulgas Rao balanceada Osso de couro Coleira simples Preco_Unit 3,20 6,40 4,30 2,50 7,25
2549 Pca Focinheira 12,90 Fig. 5.17: Tabela produto, criada na normalizao da tabela item_nota.
Banco de Dados
42.68
Nmero Nome_cliente CPF_CGC 001234 001238 001239 Jos da Silva Joo Nonato
Endereo
Fulano de Tal 11111111111 R. Sobe e Desce, 35 22222222222 Pa da Matriz, 44 33333333333 Av. Litornea, 55
001241 Fulano de Tal 11111111111 R. Sobe e Desce, 35 Fig. 5.18: Tabela nota_fiscal (parte1). Cidade Piracanduva Novo Horizonte UF PI Data 25/03/2007 28/03/2007 Tot_Nota 212,45 114,30 28,75 3,20 Miracema do Norte RJ
MG 30/03/2007
A teoria da normalizao estabelece que uma tabela estar na terceira forma normal se e somente se estiver na segunda forma normal e no possuir nenhuma coluna que seja dependente funcional transitiva de outra coluna. Para colocar a tabela nota_fiscal na terceira forma normal basta movermos as colunas com dependncia funcional transitiva, juntamente com a coluna da qual so dependentes, para uma outra tabela. A coluna da qual as outras so dependentes ser a chave primria da nova tabela e substituir as colunas movidas na tabela original. No presente caso a chave primria da nova tabela seria coluna nome_cliente. Entretanto, essa no uma boa escolha para chave, pois podemos ter dois ou mais clientes com o mesmo nome. Portanto, criaremos uma nova coluna, codigo_cliente, para ser a chave primria da nova tabela e, neste caso, a coluna nome_cliente se tornar tambm dependente da coluna cdigo_cliente e ser movida tambm para a nova tabela. Daremos nova tabela o nome de cliente. Apresentamos a seguir as tabelas aps a modificao. Nmero Cdigo_Cliente Data 001234 001238 001239 20030001 20040025 20070032 25/03/2007 28/03/2007 30/03/2007 Tot_Nota 212,45 114,30 28,75 3,20 Endereo
001241 20030001 25/06/2007 Fig. 5.20: Tabela nota_fiscal. Cdigo_Cliente Nome_cliente CPF_CGC 20030001 20040025 Jos da Silva
20070032 Joo Nonato 33333333333 Av. Litornea, 55 Fig. 5.21: Tabela cliente (parte 1).
Banco de Dados
43.68
Bairro
Cidade
UF PI MG
Tatu de Botas Miracema do Norte RJ Tatu de Cima Piracanduva Tatu de Baixo Novo Horizonte Fig. 5.22: Tabela cliente (parte 2).
Banco de Dados
44.68
5.2.7 Exerccios
1) Para que efetuamos a normalizao das tabelas? 2) Descreva e exemplifique as anomalias de atualizao. 3) O que dependncia funcional? 4) Como se classificam as dependncias funcionais? Exemplifique. 5) O que indica que uma tabela no est na Primeira Forma Normal? 6) O que indica que uma tabela no est na Segunda Forma Normal? 7) O que indica que uma tabela no est na Terceira Forma Normal? 8) Efetue a normalizao da tabela a seguir, de acordo com as trs primeiras formas normais: Parte 1 da tabela: Matrcula Nome_Aluno Identidade 000001 000001 000001 000002 000002 Aluno 1 Aluno 1 Aluno 1 Aluno 2 Aluno 2 Endereo Bairro Bairro 1 Bairro 1 Bairro 1
Parte 2 da tabela: Cidade UF Data_Ingresso Cd_Curso Nome_Curso Cidade 1 RJ Cidade 1 RJ Cidade 1 RJ 25/03/2007 25/03/2007 25/03/2007 C01 C01 C01 C01 C01 Curso 1 Curso 1 Curso 1 Curso 1 Curso 1
Parte 3 da tabela: Cd_Disciplina Nome_Disciplina Media_Disc Creditos_Disc Total_Creditos D001 D003 D005 D001 D002 Disciplina 01 Disciplina 03 Disciplina 05 Disciplina 01 Disciplina 02 7,25 5,20 6,50 8,00 7,00 3 2 3 3 2 8 8 8 5 5
No modelo relacional os dados (os atributos do modelo conceitual) so armazenados em tabelas. Assim, as entidades (e os relacionamentos que possurem atributos prprios) se transformaro em tabelas do modelo lgico. Voltando ao nosso estudo de caso, temos as seguintes entidades, com os respectivos atributos (ver Cap. 3): fornecedores (identificao do fornecedor e o seu nome) produtos (a identificao do produto, a descrio do produto, a unidade de medida do produto, a quantidade em estoque e o preo de venda do produto) pedido_compra_fornecedores (a identificao do pedido de compra, a identificao do fornecedor, a data de entrega dos produtos que constam do pedido e um cdigo para indicar a situao do pedido) clientes (a identificao do cliente e o nome do cliente) pedidos_compra_cliente (a identificao do pedido, a identificao do cliente, a data do pedido, a forma de pagamento, a situao do pedido e a identificao do vendedor responsvel pelo pedido) vendedor (a identificao do vendedor e o nome do vendedor) notas_fiscais (o nmero da nota fiscal, o nmero do pedido de compra relacionado nota fiscal e a data de emisso da nota fiscal) Um nico relacionamento possui atributo prprio: oferecem (o preo oferecido para o produto)
Apesar de no ser obrigatrio, muito importante que se adote um padro para a criao dos nomes dos atributos. Como agora j estamos nos aproximando do armazenamento fsico dos dados no banco de dados importante que comecemos a usar nomes curtos e que lembrem o significado do atributo. Por exemplo, no lugar de identificao do fornecedor, usaremos cd_fornecedor (o prefixo cd indicando cdigo, no sentido de identificador nico). Para data usaremos o prefixo dt e assim por diante. Apresentamos a seguir as tabelas e, em seguida, chamaremos a ateno para alguns detalhes (o * junto ao nome de um atributo indica que ele um atributo chave se houver mais de um atributo com a mesma caracterstica na tabela porque se trata de uma chave composta). Fornecedores *cd_fornecedor nome_fornecedor Produtos *cd_produto desc_produto cd_unid_med qt_estoque preco_unit Fig. 6.1: Tabelas fornecedores, produtos, unid_med e clientes. Unid_Med *cd_unid_med desc_unid_med Clientes *cd_cliente nome_cliente
Banco de Dados
46.68
cd_vendedor Fig. 6.2: Tabelas pedidos_fornecimento, pedidos_clientes, vendedores e notas_fiscais. Cotacoes_ Produtos *cd_fornecedor *cd_produto preco_oferecido Fig. 6.3: Tabela cotacoes_produto. Em cada tabela foi colocado o conjunto mnimo de atributos, para no alongar demais o texto. Por exemplo, na tabela fornecedores normalmente teramos outros atributos, tais como o endereo, o nmero de inscrio no CNPJ etc. A tabela unid_med foi criada para evitar que a descrio da unidade de medida, um texto, se repetisse vrias vezes na tabela produtos. A chave da nova tabela ento colocada na tabela produtos como chave estrangeira. Apenas para melhorar a compreenso, demos o nome de cotacoes_produto para a tabela que representa o relacionamento oferecem entre as entidades fornecedores e produtos. Quando temos no modelo conceitual um relacionamento da ordem N:1, colocamos na entidade do lado N do relacionamento a chave primria da outra entidade para representar o relacionamento no modelo relacional. Por exemplo, para representar o relacionamento recebem entre as entidades pedidos_fornecimento (lado N) e fornecedores (lado 1) colocamos na tabela pedidos_fornecimento o atributo cd_fornecedor, que a chave primria da tabela fornecedores. Quando temos no modelo conceitual um relacionamento da ordem N:N, mesmo que o relacionamento no tenha atributos prprios, criamos uma tabela para representar o relacionamento. A chave primria da nova tabela ser composta pelas chaves primrias das duas tabelas relacionadas (uma chave composta). Por exemplo, para representar o relacionamento contm entre as entidades pedidos_fornecimento e produtos criamos a tabela itens_pedidos_fornecimento, cuja chave primria ser composta pelos campos nped_fornecedor (chave primria da tabela pedidos_fornecimento) e cd_produto (chave primria da tabela produtos). Da mesma forma, criamos as tabelas itens_pedido_cliente, para representar o relacionamento entre pedidos_clientes e produtos, e itens_nota_fiscal para representar o relacionamento entre notas_fiscais e produtos (figura 6.4).
Banco de Dados
47.68
7 SQL
Quando E. F. Codd apresentou o conceito do banco de dados relacional em 1970, ele sugeriu que a adoo de um modelo relacional de dados... permite o desenvolvimento de uma sub-linguagem universal (para manipulao) de dados..., mas, embora tenha indicado os requisitos e as vantagens de tal linguagem, no a criou. Em 1974, D. D. Chamberlin e R. F. Boyce sugeriram a forma de uma linguagem de consulta estruturada, chamada na poca de SEQUEL. Aps uma srie de desenvolvimentos e contribuies de outros autores o nome da linguagem foi alterado para SQL e ela foi utilizada como linguagem de consulta para o banco de dados que a IBM estava desenvolvendo na poca, o Sistema R, precursor do DB2. A partir da a linguagem SQL (Structured Query Language Linguagem de Consulta Estruturada) foi tendo cada vez mais aceitao, tornando-se um padro de fato no mundo dos bancos de dados relacionais e finalmente, em 1982, um padro oficial do American National Standard Institute (ANSI) para o ambiente relacional. A linguagem SQL mostrou-se to bem projetada que, de uma simples Linguagem de Manipulao de Dados (DML, em ingls) evoluiu tambm para uma Linguagem de Definio de Dados (DDL, em ingls). Ou seja, usada hoje em dia no apenas como linguagem de consultas a um banco de dados relacional, mas, tambm, como linguagem para a criao e manuteno de um banco de dados relacional. A linguagem SQL pode ser usada de forma interativa: podemos efetuar uma consulta aos dados de um banco de dados relacional usando diretamente comandos SQL, sem necessidade de criar um programa para isso e nem usar uma aplicao previamente desenvolvida. Podemos usar comandos SQL dentro de programas desenvolvidos em uma outra linguagem para acessar os dados de um banco de dados relacional. O responsvel pela administrao do banco de dados pode usar comandos SQL para realizar suas tarefas (criar tabelas, eliminar tabelas, criar vises etc.). A linguagem SQL pode ser usada em um ambiente cliente/servidor de banco de dados para a comunicao entre o programa cliente (no lado do usurio) e o computador contendo o servidor de banco de dados (que armazena os dados do banco de dados). tambm usada para a comunicao de dados em sistemas de banco de dados distribudos.
No vocabulrio da SQL temos, basicamente, os nomes das colunas das tabelas (definidos pelo administrador do banco de dados), constantes (numricas e literais), operadores (que indicam as operaes que sero efetuadas nas expresses, tais como os operadores aritmticos e os operadores lgicos) e algumas palavras que possuem um significado especfico. As palavras que possuem significado especfico na linguagem so chamadas de palavras-chaves. As palavras-chaves so tambm palavras reservadas da linguagem, isto , no podem ser usadas para dar nomes a tabelas, colunas etc.
7.1.1 Palavras-chaves
Existem atualmente vrios dialetos da SQL. Vamos usar aqui o padro ANSI. A tabela a seguir mostra as palavras-chaves da SQL: All AVG Check Current Desc Exists Go Insert Max Of Precision Schema SQL Union And Begin Close Cursor Distinct Fetch GOTO Int Min On Privileges Section Sqlcode Unique Any Between Commit Dec Double Float Grant Integer Module Open Procedure Select Sqlerror Update As By Continue Decimal End For Group Into Not Option Public Set Sum User Asc Char Count Declare Escape Found Having Is Null Or Real Smallint Table Values Authorization Character Create Delete Exec From In Like Numeric Order Rollback Some To View
Whenever Where With Work Fig. 7.1: Palavras-chaves do padro ANSI da SQL.
7.1.2 Comandos
Na tabela a seguir apresentamos os comandos bsicos da SQL. A sintaxe de alguns comandos ser apresentada mais adiante: /* ... */ ALTER TABLE COMMENT COMMIT Comentrio colocado dentro ou antes de um comando SQL. Inclui ou redefine uma coluna em uma tabela existente. (No consta do padro ANSI da SQL.) Inclui no dicionrio de dados um comentrio relativo a uma tabela ou uma coluna. Efetiva no banco de dados (tornando permanentes) as modificaes que j foram completadas.
Banco de Dados
49.68
CREATE INDEX Cria um ndice para uma tabela. CREATE TABLE Cria uma tabela e define suas colunas e outras propriedades. CREATE VIEW DELETE DROP GRANT Define uma viso sobre uma ou mais tabelas e/ou sobre outras vises. Exclui linhas de uma tabela. Exclui uma tabela, um ndice etc. do banco de dados. Cria identificaes para usurios, atribui senhas, privilgios relativos ao banco de dados e concede aos usurios privilgios relativos a tabelas e vises. Inclui linhas em uma tabela, diretamente ou atravs de uma viso. Revoga privilgios atribudos a usurios relativos ao banco de dados ou ao acesso a tabelas. Desfaz, em caso de falha no sistema, qualquer alterao que ainda no tenha sido efetivada, de modo que a integridade do banco seja mantida. Permite, tambm, ao usurio desfazer qualquer alterao feita no banco de dados antes que tenha sido executado um comando COMMIT. Seleciona linhas e colunas de uma ou mais tabelas. Muda o valor de um ou mais campos de uma tabela.
SELECT UPDATE
7.1.4 Operadores
A SQL suporta os operadores aritmticos (adio, subtrao, multiplicao e diviso), lgicos (AND, OR e NOT), relacionais (=, <>, <, >, <= e >=) e predicados. Um predicado uma condio que aplicada a uma expresso e produzir como resultado um dos seguintes valores: verdadeiro, falso ou ignorado.
Banco de Dados
50.68
So os seguintes predicados usados na SQL: para definir um intervalo (...BETWEEN...AND...), IN (podendo, tambm, ser usado NOT IN), LIKE e NULL, para definir uma quantidade (ALL, SOME e ANY) e EXISTS (podendo, tambm, ser usado NOT EXISTS). A utilizao dos operadores ser apresentada mais adiante.
7.2 Notao
Na apresentao da sintaxe dos comandos, tanto na parte de definio de dados como, mais adiante, na parte de manipulao de dados, usaremos a seguinte conveno: As palavras-chaves sero apresentadas em negrito. As palavras em itlico indicam que devem ser substitudas pelos valores desejados pelo usurio (por exemplo, pelo nome de uma tabela ou pelo nome de uma coluna de uma tabela). Os colchetes, [], indicam que o que est no seu interior um item opcional. As chaves, {}, indicam que dever ser usado um dos itens colocados no seu interior. Ser usado o smbolo | para separar os itens dentro das chaves. As reticncias indicam repetio.
A clusula unique indica que no pode haver na tabela valores repetidos para a coluna a que ela se aplica. A clusula not null indica que a coluna correspondente no pode ter valor nulo, isto , um campo de preenchimento obrigatrio. Por exemplo: create table funcionario (matricula nome endereco cpf numero_dependentes salario char(6) unique not null, char(30) not null, char(30) not null, char(11) unique not null, numeric, float not null );
Banco de Dados
51.68
from funcionario where matricula = 112233; Neste caso a tabela resultante ser formada pelos dados das colunas matricula, nome e cpf da linha da tabela funcionario cujo valor para a coluna matricula seja igual a 112233. A expresso que compe a condio da clusula where pode ser bastante complexa, contendo vrios operadores e sub-expresses, permitindo a flexibilidade necessria para acessar qualquer dado que se queira.
7.4.2.1
Qualificadores e apelidos
Para usarmos em um comando duas colunas com mesmo nome, pertencendo, porm, a tabelas diferentes basta qualificarmos os nomes das colunas com os nomes das respectivas tabelas: where tabela1.coluna1 = tabela2.coluna1 Neste exemplo, do qual foram omitidos vrios detalhes, a clusula where estabelece que o valor da coluna1 da tabela1 deve ser comparado com o valor da coluna1 da tabela2. Muitas vezes, para aumentar a clareza ou evitar a repetio de nomes muito extensos, usamos apelidos para as tabelas ou para as colunas: from tabela1 t1, tabela2 t2
Banco de Dados
53.68
Neste caso estamos criando o apelido t1 para a tabela1 e o apelido t2 para a tabela2. Podemos, ento usar no comando onde o apelido foi definido (e apenas nesse comando) o apelido como qualificador no lugar do nome da tabela: select t1.*, t2.* from tabela1 t1, tabela2 t2 ... Neste exemplo estamos especificando todas as colunas da tabela1 e todas as colunas da tabela2 por meio dos apelidos (t1.* e t2.*). Podemos, tambm, atribuir apelidos para colunas: select coluna1 Nome do funcionario, coluna2 Salario from funcionario ... Neste caso estamos assumindo que a coluna que contm o nome do funcionrio foi definida na tabela funcionario com o nome de coluna1 e que coluna2 contm o salrio do funcionrio. Ao exibir o resultado da consulta o ttulo da coluna1 seria apresentado como Nome do funcionario e o da coluna2 como Salario. Note-se que, no primeiro caso o apelido foi especificado com a utilizao de apstrofos. Isso se faz necessrio devido existncia de caracteres especiais (diferentes de letras e dgitos) no apelido (a existncia de espaos), o que no ocorre no segundo caso (Salario). Aparentemente esse problema de falta de clareza deveria ser evitado com a escolha adequada dos nomes para as colunas. Isto verdade. Usamos essa situao apenas para exemplificar a utilizao de apelidos para colunas. A situao em que esse recurso se faz mais necessrio quando usamos funes no resultado da consulta.
7.4.2.2
Encadeamento incondicional
O encadeamento incondicional entre duas tabelas produzir como resultado uma tabela que o produto cartesiano das tabelas encadeadas. Por exemplo: select * from tabela1, tabela2; Vamos supor que a tabela1 tenha trs colunas com os nomes a, b e c e a tabela2 tenha, tambm, trs colunas com os nomes d, e e f, e que os contedos das tabelas seja o mostrado a seguir: Tabela 1 a 1 1 2 b 1 2 2 c 1 1 1 d 1 2 3 Tabela 2 e 4 6 8 f 5 7 9
1 2 2 Fig. 7.3: Tabelas para exemplificar o encadeamento incondicional. A tabela resultante seria formada pela combinao de cada linha da tabela1 com todas as linhas da tabela2:
Banco de Dados
54.68
1 2 2 3 8 9 Fig. 7.4: Tabela resultante do encadeamento incondicional. Se as tabelas que esto sendo encadeadas possuem duas (ou mais) colunas com o mesmo nome, essas colunas so chamadas de colunas comuns. Por exemplo: Tabela 1 a 1 1 2 b 1 2 2 c 1 1 1 c 1 2 3 Tabela 2 d 4 6 8 e 5 7 9
Banco de Dados
55.68
1 2 2 3 8 9 Fig. 7.6: Tabela resultante do encadeamento incondicional com nomes de colunas repetidos.
7.4.2.3
Encadeamento condicional
Vimos, no processo de normalizao, como uma chave estrangeira usada para fazer a ligao entre duas tabelas. Mostramos o exemplo de uma tabela funcionario onde os dados do departamento seriam substitudos pela chave da tabela departamento, que conteria os dados do departamento: Matrcula Nome_Func 123456 123479 Ana Jos ... Cd_Depto d01 d02 d01 ...
123485 Pedro Fig. 7.7: Tabela funcionario. Cd_Depto Nome_Depto d01 Depto 01 d02 Depto 02 Fig. 7.8: Tabela departamento.
Essa situao, muito comum, leva a outra situao tambm muito comum: muitas vezes queremos efetuar o encadeamento de duas tabelas que tm colunas comuns e a condio na clusula where especifica que os valores nas colunas comuns sejam iguais: select funcionario.nome_func, departamento.nome_depto from funcionario, departamento where funcionario.cd_depto = departamento.cd_depto;
Banco de Dados
56.68
A tabela resultante ser composta pelos dados do funcionrio juntamente com os dados do departamento no qual ele est lotado. Matrcula Nome_Func 123456 123479 Ana Jos ... Funcionario. Cd_Depto d01 d02 ... Departamento. Nome_ Cd_Depto Depto d01 d02 Depto 01 Depto 02 Depto 01
123485 Pedro d01 d01 Fig. 7.9: Unindo as tabelas com a clusula where.
7.4.2.4
Encadeamento natural
Devemos notar que, na tabela resultante do exemplo anterior, a coluna cd_depto estar duplicada. Se eliminarmos do encadeamento condicional as colunas duplicadas, obteremos o encadeamento natural: select matricula, nome_func, nome_depto from funcionario, departamento where funcionario.cd_depto = departamento.cd_depto; A tabela resultante ser composta pelos nomes dos funcionrios juntamente com os nomes dos respectivos departamentos. Matrcula Nome_Func Nome_Depto 123456 123479 Ana Jos Depto 01 Depto 02
7.4.2.5
Encadeamento no simtrico
Os encadeamentos mostrados at agora so chamados de encadeamentos simtricos. O encadeamento no simtrico ocorre quando estabelecemos na clusula where que as colunas comuns no podem ter valores iguais: select vendedores.*, clientes.* from vendedores, clientes where not vendedores.cidade = clientes.cidade; que equivalente a: select vendedores.*, clientes.* from vendedores, clientes where vendedores.cidade <> clientes.cidade; A tabela resultante em ambos os casos conter a combinao de clientes e vendedores de cidades diferentes.
Banco de Dados
57.68
7.4.2.6
Para efetuar o encadeamento com mais de duas tabelas basta usar o operador and na clusula where: select tabela1.*, tabela2.* , tabela3.* from tabela1, tabela2, tabela3 where tabela1.coluna_ligacao = tabela2.coluna_ligacao and tabela1.coluna_ligacao = tabela3.coluna_ligacao;
Banco de Dados
58.68
Neste exemplo estamos copiando para tabela2 a linha com os dados do funcionrio cuja matrcula 123456.
Banco de Dados
59.68
A funo da clusula where indicar que linhas sero selecionadas. Alm dos operadores relacionais (=, <>, <, >, <= e >=) e lgicos (AND, OR e NOT), cuja utilizao bvia para qualquer pessoa que conhea alguma linguagem de programao, podemos usar tambm os predicados ...BETWEEN...AND..., IN (podendo, tambm, ser usado NOT IN), LIKE, NULL, ALL, SOME, ANY e EXISTS (podendo, tambm, ser usado NOT EXISTS) e, at mesmo, sub-consultas. Um predicado uma condio que aplicada a uma expresso e produzir como resultado um dos seguintes valores: verdadeiro, falso ou ignorado. Faremos a apresentao dos predicados atravs de exemplos: select matricula, nome from funcionario where salario between 1000.00 and 2000.00; Neste caso estamos selecionando da tabela funcionario as matrculas e os nomes de todos os funcionrios com salrio entre 1000.00 e 2000.00. Poderamos, tambm, combinar o predicado between com o operador not: select matricula, nome from funcionario where salario not between 1000.00 and 2000.00; Neste caso seriam selecionados todos os funcionrios, exceto aqueles com salrio entre 1000.00 e 2000.00. O predicado in apresenta um conjunto de valores e testa se o valor desejado faz parte do conjunto: select matricula, nome from funcionario where matricula in (123456, 112233, 122334); Neste caso seriam selecionados os funcionrios com matrcula 123456, 112233 ou 122334. O mesmo resultado seria obtido com a utilizao do predicado any: select matricula, nome from funcionario where matricula any (123456, 112233, 122334); O predicado like estabelece um padro para comparao, usando o smbolo _ para representar um nico caractere no padro e o smbolo % para representar uma cadeia de caracteres de qualquer tamanho (inclusive tamanho zero): select matricula, nome from funcionario where nome like _aria; Neste caso seriam selecionados todos os funcionrios cujo nome comece com um caractere qualquer seguido dos caracteres aria. select matricula, nome from funcionario where nome like Maria%;
Banco de Dados
60.68
Neste caso seriam selecionados todos os funcionrios cujo nome comece por Maria. select matricula, nome from funcionario where numero_dependentes = null; Neste caso seriam selecionados todos os funcionrios para os quais no tenham sido fornecidos os nmeros de dependentes. select matricula, nome from funcionario where numero_dependentes > all (select numero_dependentes from funcionario where salario > 2000.00); Neste caso seriam selecionados todos os funcionrios com nmero de dependentes maior do que o nmero de dependentes de todos os funcionrios com salrio maior que 2000.00 (os dependentes de cada funcionrio considerado separadamente e no o somatrio do nmero de dependentes). select matricula, nome from funcionario where numero_dependentes > some (select numero_dependentes from funcionario where salario > 2000.00); Neste caso seriam selecionados todos os funcionrios que tenham mais dependentes que algum funcionrio com salrio maior que 2000.00. select clientes.nome from clientes where exists (select cidade from fornecedores where fornecedores.cidade = clientes.cidade); Neste caso seriam selecionados todos os clientes das cidades onde h fornecedores.
7.4.7 Exerccios
1) Escreva, para cada item a seguir, o comando SQL para selecionar os dados pedidos, considerando que foi criada a seguinte tabela: create table funcionario ( matricula char(6) unique not null, nome char(30) not null, endereco char(30) not null, cd_cargo char(3) not null, dt_admissao char(8) not null, dt_nascimento char(8) not null, salario float not null );
Banco de Dados
61.68
a) a matrcula, o nome, a data de admisso e a data de nascimento para todos os funcionrios; b) a matrcula e o nome dos funcionrios com salrio maior que R$ 5.000,00; c) a mdia dos salrios dos funcionrios no cargo de contador (cdigo 123); d) a soma dos salrios de todos os funcionrios da empresa. 2) Escreva o comando SQL para calcular o nmero de atendimentos no setor de ortopedia (cdigo 029), considerando que foi criada a seguinte tabela: create table atendimento ( cd_atendimento char(6) unique not null, dt_atendimento char(8) not null, matr_medico char(6) not null, setor char(3) not null ); 3) Voc foi encarregado de criar um relatrio com a lista de produtos de uma empresa. Para cada produto devem constar: o cdigo do produto, sua descrio e a descrio da unidade de medida. Escreva o comando SQL para selecionar os dados necessrios, considerando que foram criadas as seguintes tabelas: create table produto ( cd_produto desc_produto cd_unid_med create table unid_med ( cd_ unid_med desc_ unid_med char(6) unique not null, char(30) not null, char(3) not null ); char(3) unique not null, char(30) not null );
Banco de Dados
62.68
Essas situaes podem ocorrer mesmo depois do sistema pronto. Em quaisquer desses casos essas alteraes teriam que ser transparentes para os usurios. Cada tipo de usurio deve enxergar os dados sempre da mesma forma. Para compatibilizar essas duas necessidades (flexibilidade para alterar a estrutura fsica do banco de dados e estabilidade dos dados para os usurios) usado um recurso chamado de viso.
8.1 Vises
Uma viso funciona como se fosse uma tabela virtual. Para o usurio (ou aplicao) que usa a viso tudo se passa como se a tabela existisse realmente no banco de dados. Na verdade a viso apenas um mecanismo de acesso aos dados do banco de dados. As vises geralmente so implementadas por meio de comandos create view da SQL: create view nomedavisao [(nome_coluna1_visao, nome_coluna2_visao, ..., nome_colunaN_visao)] as select nome_da_coluna1, nome_da_coluna2, ..., nome_da_colunaN from nome_da_tabela [where condio]; nome_coluna1_visao, nome_coluna2_visao etc. devem ser usados se quisermos usar na viso nomes de colunas diferentes dos nomes existentes nas tabelas originais. Consideremos as tabelas criadas pelos comandos: create table tabela1 ( coluna1 numeric, coluna2 numeric, coluna3 numeric); create table tabela2 ( coluna1 numeric, coluna4 numeric, coluna5 numeric); Neste exemplo estamos considerando que as colunas com nome coluna1 de ambas as tabelas correspondem aos mesmos atributos. Podemos criar uma viso contendo apenas algumas colunas de uma tabela: create view visao1 as select coluna1, coluna3 from tabela1; A partir da podemos usar viso1 como se fosse uma tabela: select * from visao1; Ou, ento: select * from visao1 where coluna1 = 35;
Banco de Dados
63.68
Podemos criar uma viso para selecionar algumas linhas de uma tabela: create view visao2 as select * from tabela1 where coluna1 <> 52; Podemos criar uma viso para selecionar algumas colunas de determinadas linhas de uma tabela: create view visao3 as select coluna1, coluna3 from tabela1 where coluna1 <> 52; Se o dado armazenado na coluna2 fosse o salrio, poderamos criar uma viso que s permitisse o acesso ao somatrio dos salrios: create view visao4 as select coluna1, sum(coluna2), coluna3 from tabela1; Podemos, tambm, usar uma viso para selecionar dados de mais de uma tabela: create view visao5 (a, b, c, d, e) as select tabela1.*, tabela2.coluna4, tabela2.coluna5 from tabela1, tabela2 where tabela1.coluna1 = tabela2.coluna1;
Banco de Dados
64.68
cd_vendedor Fig. 9.2: Tabelas pedidos_fornecimento, pedidos_clientes, vendedores e notas_fiscais. Cotacoes_ Produtos *cd_fornecedor *cd_produto preco_oferecido Itens_Pedido_ Fornecimento *nped_fornecedor *cd_produto preco_unit Itens_Pedido_ Cliente *nped_cliente *cd_produto qt_comprada Itens_Nota_ Fiscal *nnfiscal *cd_produto nped_cliente
qt_pedida preco_unit Fig. 9.3: Tabelas cotacoes_produto, itens_pedido_fornecimento, itens_pedidos_clientes e itens_nota_fiscal. create table fornecedores ( cd_fornecedor char(5) unique not null, nome_fornecedor char(30) not null ); create table produtos ( cd_produto desc_produto cd_unid_medida qt_estoque preco_unit create table unid_med ( cd_unid_med desc_unid_med create table clientes ( cd_cliente nome_cliente char(5) unique not null, char(30) not null, char(5) not null, numeric not null, float not null ); char(5) unique not null, char(30) not null ); char(5) unique not null, char(30) not null );
create table pedidos_fornecimento ( nped_fornecedor char(5) unique not null, cd_fornecedor char(5) not null, dt_entrega char(8) not null, situacao char(1) not null );
Banco de Dados
65.68
create table itens_pedido_fornecimento ( nped_fornecedor char(5) not null, cd_produto char(5) not null, preco_unit float not null, qt_pedida numeric not null ); create table pedidos_cliente ( nped_cliente char(5) unique not null, cd_cliente char(5) not null, dt_pedido char(8) not null, forma_pagamento char(2) not null, situacao char(1) not null, cd_vendedor char(4) not null ); create table itens_pedidos_clientes ( nped_cliente char(5) not null, cd_produto char(5) not null, qt_comprada numeric not null, preco_unit float not null ); create table vendedores ( cd_vendedor char(4) unique not null, nome_vendedor char(30) not null ); create table notas_fiscais ( nnfiscal char(6) unique not null, nped_cliente char(5) not null, dt_emissao char(8) not null ); create table itens_nota_fiscal ( nnfiscal char(6) not null, cd_produto char(5) not null, nped_cliente char(5) not null ); create table cotacoes_produto ( cd_fornecedor char(5) not null, cd_produto char(5) not null, preco_oferecido float not null ); Na tabela produtos temos as colunas cd_produto, desc_produto, cd_unid_med, qt_estoque e preco_unit. Mas, na interao com o usurio ou na elaborao de relatrios, podemos necessitar tambm da descrio da unidade de medida alm do cdigo da unidade de medida. Em vez de deixar para as aplicaes juntar as tabelas produtos e unid_med, poderamos criar uma viso: create view vprodutos as select produtos.*, unid_med.desc_unid_med from produtos, unid_med where produtos.cd_unid_med = unid_med.cd_unid_med; Da mesma forma, poderamos criar uma viso para acessar o nome do fornecedor, juntamente com o seu cdigo, ao acessar a tabela pedidos_fornecimento:
Banco de Dados
66.68
create view vpedidos_fornecimento as select pedidos_fornecimento.*, fornecedores.nome_fornecedor from pedidos_fornecimento, fornecedores where pedidos_fornecimento.cd_fornecedor = fornecedores.cd_fornecedor; Outras vises poderiam ser criadas para atender outras necessidades.
10 Bancos
de dados cliente/servidor
distribudos
arquitetura
A tecnologia de banco de dados comeou a ser desenvolvida na poca dos computadores de grande porte que, normalmente, trabalhavam de forma isolada. Assim, o gerenciador do banco de dados, os dados e as aplicaes que acessavam o banco de dados residiam todos no mesmo computador e no havia acesso interativo ao banco (no havia sequer terminais ligados ao computador). Com a evoluo surgiram os terminais e as aplicaes interativas: o gerenciador, os dados e as aplicaes residindo no computador central e os usurios acessando as aplicaes via terminal. Mais adiante os computadores comearam a ser ligados em rede e comeou uma discusso: o sistema deve continuar centralizado, descentralizando apenas os pontos de acesso?
grande capacidade de armazenamento e de processamento) e a aplicao propriamente dita reside no micro-computador do usurio. Nessa arquitetura todo o processamento da aplicao, incluindo a parte de interface com o usurio, fica no computador do usurio (cliente), liberando o computador central (servidor), que fica responsvel apenas pelo gerenciamento dos dados, fornecendo-os de acordo com a demanda dos clientes. A denominao cliente/servidor se deve ao fato do computador cliente solicitar e receber servios de dados do computador servidor. Como o controle do acesso aos dados fica centralizado no servidor, este tende a ser menos complexo do que no caso do banco de dados distribudo. A arquitetura cliente/servidor pode ser implementada em duas camadas (como foi descrito acima) ou trs camadas. Na implementao em trs camadas introduzido um terceiro computador que fica localizado entre o cliente e o servidor. O computador onde reside o banco de dados passa a se chamar servidor de banco de dados e esse terceiro computador denominado servidor de aplicao. A aplicao fica dividida entre o cliente, que passa a ser responsvel apenas pela interface com o usurio da aplicao e o servidor de aplicao, responsvel pela comunicao com o servidor de banco de dados e com o cliente e, tambm, pelo processamento da aplicao. *** continuar sdfgdffds
Bibliografia
1) Tanembaum, Andrew S. Sistemas Operacionais Modernos. Rio de Janeiro. LTC. 1992. 2) Teixeira, Jos Helvcio et al. Do Mainframe para a Computao Distribuda Simplificando a Transio. Rio de Janeiro. Infobook, 1996. 3) Machado, Francis B., Maia, Luiz Paulo. Arquitetura de Sistemas Operacionais, 3 ed. Rio de Janeiro. LTC, 2002. 4) Silberschatz, Abraham, Gavin, Peter, Gagne, Greg. Sistemas Operacionais. Rio de Janeiro. Ed. Campus, 2000. 5) Tanembaum, Andrew S. Sistemas Operacionais Modernos, 2 ed. Rio de Janeiro. LTC, 2003.
Banco de Dados
68.68