Você está na página 1de 73

Apostila montada pelo professor Jos Gonalo dos Santos Contato: jose.goncalo.santos@gmail.

com

Conceitos de Banco de Dados

Copyright 2011 www.pusivus.com.br, Todos os Direitos Reservados.

1 Introduo........................................................................................................................... 1 1.1 Definio de BD.......................................................................................................... 2 1.2 Banco de Dados X Abordagem processamento Tradicional de Arquivos .................. 3 1.2.1 Auto Informao .................................................................................................. 3 1.2.2 Separao entre Programas e Dados .................................................................... 3 1.2.3 Abstrao de Dados.............................................................................................. 4 1.3 Sistemas de Gerenciamento de Banco de Dados SGBD.......................................... 4 1.3.1 Modelos de SGBDs.............................................................................................. 7 1.3.2 Quando no Utilizar um SGBD ........................................................................... 8 2 Modelagem de Dados Utilizando o Modelo Entidade Relacionamento ............................ 9 2.1 Entidades e Atributos .................................................................................................. 9 2.2 Tipos Entidades ......................................................................................................... 10 2.3 Domnio..................................................................................................................... 10 2.4 Atributos Chave......................................................................................................... 10 2.3 Tipos e Instncia de Relacionamento........................................................................ 10 2.4 Grau de um Relacionamento ..................................................................................... 11 2.6 Relacionamentos como Atributos ............................................................................. 12 2.7 Nomes de Papis e Relacionamentos Recursivos ..................................................... 12 2.8 Restries em um tipo relacionamento ..................................................................... 12 2.9 Tipos Entidades Fracas.............................................................................................. 15 2.10 Diagrama Entidade Relacionamento ....................................................................... 17 2.11 Extenses do Modelo Entidade Relacionamento .................................................... 17 2.11.1 Subtipos, Supertipos e Especializao ............................................................. 18 2.11.2 Especializao .................................................................................................. 19 2.11.3 Generalizao ................................................................................................... 20 3 O Modelo Relacional ....................................................................................................... 23 3.1 Domnio de uma relao ........................................................................................... 23 3.2 Esquema de uma Relao.......................................................................................... 24 3.3 Instncia de um Esquema.......................................................................................... 24 3.4 Atributo Chave de uma Relao................................................................................ 24 3.5 Normalizao ............................................................................................................ 25 3.5.1 Primeira Forma Normal (1FN)........................................................................... 26 3.5.2 Segunda Forma Normal (2FN)........................................................................... 26 3.5.3 Terceira Forma Normal (3FN) ........................................................................... 27 4 LGEBRA RELACIONAL ............................................................................................ 28 4.1 Operao Selecionar.................................................................................................. 28 4.2 Operao projetar ...................................................................................................... 29 4.3 Operao produto cartesiano ..................................................................................... 29 4.4 Operao Renomear .................................................................................................. 30 4.5 Operao Unio (binria) .......................................................................................... 31 4.6 A operao diferena de conjuntos ........................................................................... 32 4.7 Operao interseo de conjuntos ............................................................................. 33 4.8 Operao Ligao natural.......................................................................................... 34 4.9 Operao Diviso ...................................................................................................... 34 4.10 Operao de insero .............................................................................................. 35

ii

4.11 Remoo.................................................................................................................. 35 4.12 Atualizao.............................................................................................................. 36 5. Linguagem SQL .............................................................................................................. 37 5.1 Estrutura Bsica de Expresso SQL.......................................................................... 38 5.2 Clusulas Distinct e All............................................................................................. 40 5.3 Predicados e ligaes ................................................................................................ 41 5.4 VARIVEIS TUPLAS (RENOMEAO) ............................................................. 42 5.4 OPERAES DE CONJUNTOS............................................................................. 44 5.5 ORDENANDO A EXIBIO DE TUPLAS (ORDER BY) ................................... 46 5.6 MEMBROS DE CONJUNTOS ................................................................................ 47 5.7 FUNES AGREGADAS ....................................................................................... 50 5.8 MODIFICANDO O BANCO DE DADOS .............................................................. 52 4.8.1. Remoo............................................................................................................ 52 5.8.2 Insero .............................................................................................................. 53 5.8.3 Atualizaes ....................................................................................................... 54 5.8.4 Valores Nulos ..................................................................................................... 55 5.9 DEFINIO DE DADOS ........................................................................................ 56 5.10 VISES (VIEWS)................................................................................................... 58 5.11 RESTRIES DE INTEGRIDADE ...................................................................... 60 5.11.1 Restries de domnios..................................................................................... 60 5.11.2 Restries de integridade referencial ............................................................... 61 5.11.3 Asseres.......................................................................................................... 63 6 Arquitetura de Camadas ................................................................................................... 65 6.1 Uma camada (single-tier) .......................................................................................... 65 6.1.1 Problemas do Single-Tier................................................................................... 65 6.2 Duas Camadas (Two-tier) ......................................................................................... 66 6.3 Trs camadas (three-tier) / Mltiplas camadas (n-camadas)..................................... 67 6.4 Soluo em mltiplas camadas ................................................................................. 68 7. Servidores SQL ............................................................................................................... 69 Bibliografia.......................................................................................................................... 69

iii

1 Introduo
Antes de comearmos a falar sobre as formas de acesso a dados e definirmos Banco de Dados (BD), algumas consideraes devem ser feitas. Como, por exemplo, o que representa um BD em uma instituio. Podemos dizer que o BD o corao da instituio. Devido a isso, qualquer dano causado ao BD pode atingir a sade da instituio. Quando falamos em BD, devemos ter em mente os seguintes termos: dados, informaes e SGBD Sistemas de Gerenciamento de Banco de Dados. Mas, qual a relao desses termos com Banco de Dados? Para responder questo anterior de forma simples, dizemos que um banco de dados guarda dados; esses dados podem ser manipulados por um SGBD de maneira que permita que os usurios os acesse de forma que a integridade dos dados seja mantida, e que esses dados sejam transformados em informaes. Como pode ser notado, nos pargrafos anteriores, eu tratei de forma distinta; dados, informaes, BD e SGBD. Na verdade, nem sempre essa distino feita, h pessoas que tratam o SQL SERVER de forma errnea como BD, o que na verdade um SGBD; outras dizem que os BDs armazenam informaes, o que no uma verdade, porque BD armazena dados, que podem ser transformados em informaes, como por exemplo, a Figura 1.1 mostra trs tabelas com dados sobre clientes, produtos e compras, mas se olharmos somente a tabela itens, no podemos identificar o cliente que efetuou o pedido. Porm, podemos retirar essa informao atravs de uma operao de consulta entre as trs tabelas e obtermos a informao desejada. Disso, podemos concluir que um BD armazena dados, que podem ser transformados em informaes atravs de inferncias sobre eles.

Copyright 2011 www.pusivus.com.br, Todos os Direitos Reservados.

Cliente CCli 1 2 3 Pedido NPed 1 2 3

Nome Tati Fabi Thays

CPF 111111111-11 222222222-22 333333333-33

Fone 5221020 6221530 8551315

Data 20/09/2004 21/09/2004 21/09/2004

Valor 300,00 175,00 350,00

Cliente 2 1 3

Itens NPed 1 1 1 2 2 2 3 3 3

Produto Blusa Saia Vestido Sandlia Meias Tnis Saia Blusa Vestido

Qtd 1 1 1 1 3 1 1 2 1

Valor 50,0 100,00 150,00 40,00 15,00 130,00 100,00 100,00 150,00

Figura 1.1: Exemplo de um banco de dados

1.1 Definio de BD
A tecnologia aplicada aos mtodos de armazenamento de informaes vem crescendo e gerando um impacto cada vez maior no uso de computadores, em qualquer rea em que eles podem ser aplicados. Um banco de dados pode ser definido como um conjunto de dados devidamente relacionados. Por dados podemos compreender com fatos conhecidos que podem ser armazenados e que possuem um significado implcito. Porm, o significado do termo banco de dados mais restrito que simplesmente a definio dada acima. Um banco de dados possui as seguintes propriedades: Um banco de dados uma coleo lgica coerente de dados com um significado inerente; uma disposio desordenada dos dados no pode ser referenciada como um banco de dados; Um banco de dados projetado, construdo e povoado com dados para um propsito especfico; um banco de dados possui um conjunto pr-definido de usurios e aplicaes; Um banco de dados representa algum aspecto de mundo real, o qual chamado de mini-mundo; qualquer alterao efetuada no mini-mundo automaticamente refletida no banco de dados. Um banco de dados pode ser criado e mantido por um conjunto de aplicaes desenvolvidas especialmente para esta tarefa ou por SGBD. Um SGBD permite aos usurios criarem e manipularem banco de dados de propsito geral. O conjunto formado

por um banco de dados mais as aplicaes que o manipulam chamado de Sistema de Banco de Dados.

1.2 Banco de Dados X Abordagem processamento Tradicional de Arquivos

1.2.1 Auto Informao Uma caracterstica importante da abordagem Banco de Dados que o SGBD mantm no somente os dados, mas tambm a forma como so armazenados, contendo uma descrio completa do banco de dados. Estas informaes so armazenadas no catlogo do SGBD, o qual contm informaes como a estrutura de cada arquivo, o tipo e o formato de armazenamento de cada tipo de dado, restries, entre outros. A informao armazenada no catlogo chamada de Meta dados. No processamento tradicional de arquivos, o programa que ir manipular os dados que contm este tipo de informao, ficando limitado a manipular as informaes que ele conhece. Utilizando a abordagem banco de dados, a aplicao pode manipular diversas bases de dados diferentes.

1.2.2 Separao entre Programas e Dados No Processamento tradicional de arquivos, a estrutura dos dados est incorporada ao programa de acesso. Desta forma, qualquer alterao na estrutura de arquivos implica na alterao no cdigo fonte de todos os programas. J na abordagem bando de dados, a estrutura alterada apenas no catlogo, no alterando os programas. A Figura 1.2 ilustra um sistema de banco de dados, como podemos observar, os dados so separados da aplicao e entre os dados e a aplicao existe o SGBD para controlar todo o processo de acesso e manipulao de dados, fazendo com que as regras do BD se tornem independente da aplicao utilizada pelo usurio final.

Figura 1.2: Exemplo de um Sistema de Banco de Dados.

1.2.3 Abstrao de Dados O SGBD deve fornecer ao usurio uma representao conceitual dos dados, sem fornecer muitos detalhes de como as informaes so armazenadas. Um modelo de dados uma abstrao de dados que utilizada para fornecer esta representao conceitual utilizando conceitos lgicos como objetos, suas propriedades e seus relacionamentos. A estrutura detalhada e a organizao de cada arquivo so descritas no catlogo.

1.3 Sistemas de Gerenciamento de Banco de Dados SGBD


D-se o nome de Sistema Gerenciador de Banco de Dados (SGBD) ao conjunto de programas responsvel pela definio de uma base de dados, proporcionando um ambiente para o acesso da comunidade de usurios s informaes armazenadas nos seus diversos arquivos. A Figura 1.3 ilustra este conceito.

Figura 1.3: Sistema de Gerenciamento de Banco de Dados.

Ao se utilizar um SGBD, certos objetivos fundamentais devem estar implcitos, como a integrao das atividades gerenciais e operacionais da empresa; a obteno de maior segurana em termos do armazenamento dos dados; a facilitao da tarefa de desenvolvimento de sistemas; a melhor adequao da base de dados realidade do dia-adia, entre outros. Para que tudo isso seja possvel necessrio que o SGBD obedea a alguns princpios bsicos que so apresentados de forma resumida a seguir: 1. Independncia de dados - consiste na capacidade de tornar as caractersticas fsicas dos dados (como localizao, estrutura e tamanho) transparentes para a aplicao. Com isso, os programas aplicativos passam a ter apenas uma viso lgica da base de dados, que no influenciada por eventuais modificaes na forma de armazenamento dos dados. Significa tambm que devem existir duas sublinguagens incorporadas ao banco de dados: uma Linguagem de Definio de Dados (LDD) e uma Linguagem de Manipulao de Dados (LMD). 2. Compartilhamento de dados - deve ser possvel que, num determinado momento, mais de um usurio possa acessar os dados armazenados pelo SGBD. Um SGBD multi-

usurio deve permitir que mltiplos usurios acessem o banco de dados ao mesmo tempo. Este fator essencial para que mltiplas aplicaes integradas possam acessar o banco. O SGBD multi-usurio deve manter o controle de concorrncia para assegurar que o resultado de atualizaes seja correto. Um banco de dados multi-usurio deve fornecer recursos para a construo de mltiplas vises dos dados. 3. Garantia de integridade de dados - apesar de permitir que os dados sejam compartilhados, o SGBD deve oferecer servios que evitem que atualizaes concorrentes tornem a base de dados inconsistente. 4. Garantia de segurana de dados - o SGBD deve oferecer meios que resguardem a base de dados nos casos de falha de programa, equipamento ou acidentes. Tambm deve ser possvel que alteraes indevidas feitas pelos usurios durante a operao dos aplicativos sejam desfeitas sem prejuzo da coerncia dos dados. Considera-se igualmente como um item de segurana a ser proporcionado pelo software gerenciador, o controle dos nveis de acesso dos usurios aos dados do sistema. Um SGBD deve fornecer um subsistema de autorizao e segurana, o qual utilizado pelo DBA para criar contas e especificar as restries destas contas; o controle de restries se aplica tanto ao acesso aos dados quanto ao uso de softwares inerentes ao SGBD. 5. Relacionamento entre os dados - a implementao dos diversos relacionamentos previstos na base de dados deve ser controlada automaticamente pelo SGBD, externamente aplicao. Um SGBD deve fornecer recursos para se representar uma grande variedade de relacionamentos entre os dados, bem como, recuperar e atualizar os dados de maneira prtica e eficiente. 6. Controle da redundncia de dados - devem ser fornecidos meios para que seja possvel o controle da repetio de dados pelos diversos arquivos administrados pelo SGBD. Isso conseguido por meio da centralizao da definio dos dados num Dicionrio de Dados ou Catlogo, que serve como base para a operao do SGBD. No processamento tradicional de arquivos, cada grupo de usurios deve manter seu prprio

conjunto de arquivos e dados. Desta forma, acaba ocorrendo redundncias que prejudicam o sistema com problemas como:

toda vez que for necessrio atualizar um arquivo de um grupo, ento todos os grupos devem ser atualizados para manter a integridade dos dados no ambiente como um todo; a redundncia desnecessria de dados levam ao armazenamento excessivo de informaes, ocupando espao que poderia estar sendo utilizado com outras informaes.

Estes princpios esto interligados entre se, uma falha em um deles pode refletir em todos, ou quase todos, os outros. 1.3.1 Modelos de SGBDs Os produtos SGBDs podem ser classificados em 5 categorias principais: os de estrutura hierrquica; os de estrutura de rede; os relacionais; os orientados a objeto e os objeto-relacionais. Cada um desses modelos corresponde a um estgio na evoluo do hardware disponvel para as aplicaes comerciais e no estado da arte na rea da teoria de Banco de Dados e da Engenharia de Software e diferem entre si por 4 aspectos principais: a ordem cronolgica em que surgiram; os tipos de elos (ligaes) utilizados para implementar internamente os relacionamentos entre os dados; as modalidades de relacionamento suportadas e, finalmente, o tipo de linguagem utilizada para implementar as aplicaes que interagem com a base de dados. Os modelos hierrquicos e de rede j so considerados ultrapassados; e a abordagem orientada a objetos ainda uma tecnologia em maturao, embora promissora. Os SGBDs mais utilizados hoje em dia foram concebidos com base em um modelo matemtico derivado da Teoria dos Conjuntos e que teve um grande desenvolvimento a partir da dcada de 70. Esse modelo chamado Modelo Relacional e os SGBD que suportam tais conceitos so chamados de Sistemas Gerenciadores de Bancos de Dados Relacionais (SGBDR). So exemplos de SGBDR: MSAccess, ZIM, MS-SQL Server, Oracle, Sybase, Informix, CA-Ingres, IBM-DB2, BorlandInterbase, entre outros. Os SGBDs objeto-relacionais implementam conceitos orientados a objeto sobre mecanismos relacionais, e ganharam alguma importncia nos ltimos anos.

1.3.2 Quando no Utilizar um SGBD Em algumas situaes, o uso de um SGBD pode representar uma carga desnecessria aos custos, quando comparado abordagem processamento de arquivos como por exemplo:

alto investimento inicial na compra de software e hardware adicionais; generalidade que um SGBD fornece na definio e processamento de dados; sobrecarga na proviso de controle de segurana, controle de concorrncia, recuperao e integrao de funes.

Problemas adicionais podem surgir caso os projetistas de banco de dados ou os administradores de banco de dados no elaborem os projetos corretamente ou se as aplicaes no so implementadas de forma apropriada. Se o DBA no administrar o banco de dados de forma apropriada, tanto a segurana quanto a integridade dos sistemas podem estar comprometidas. A sobrecarga causada pelo uso de um SGBD e a m administrao justificam a utilizao da abordagem de processamento tradicional de arquivos em casos como:

o banco de dados e as aplicaes so simples, bem definidas e no se espera mudanas no projeto; a necessidade de processamento em tempo real de certas aplicaes, que so terrivelmente prejudicadas pela sobrecarga causada pelo uso de um SGBD; no haver mltiplo acesso ao banco de dados.

2 Modelagem de Dados Utilizando o Modelo Entidade Relacionamento


O modelo Entidade-Relacionamento (E-R) um modelo de dados conceitual de alto nvel, cujos conceitos foram projetados para estar o mais prximo possvel da viso que o usurio tem dos dados, no se preocupando em representar como estes dados estaro realmente armazenados. O modelo E-R utilizado, principalmente, durante o processo de projeto de banco de dados.

2.1 Entidades e Atributos


O objeto bsico tratado pelo modelo E-R a entidade, que pode ser definida como um objeto do mundo real, concreto (automvel, casa, professor) ou abstrato (duplicata, venda, entre outros) e que possui existncia independente. Cada entidade possui um conjunto particular de propriedades (caractersticas) que a descreve, chamado atributos. Um atributo pode ser dividido em diversas sub-partes com significado independente entre si, recebendo o nome de atributo composto, como o caso do atributo endereo, composto de rua, bairro, cidade, estado e CEP. Um atributo que no pode ser subdividido chamado de atributo simples ou atmico, como por exemplo, o atributo CPF. Cabe, aqui, uma observao sobre atributos atmicos, porque para ns, brasileiros, o atributo nome atmico, j nos Estados Unidos, por exemplo, o atributo nome composto, porque se divide em first name, midle name e last name, portanto, dizer que certos atributos so atmicos ou no, depende da interpretao de cada analista. Os atributos que podem assumir apenas um determinado valor em uma determinada instncia so denominados atributo simplesmente valorado, como o caso do atributo salrio de um empregado. Um atributo que pode assumir diversos valores em uma mesma instncia denominado multi valorado, como por exemplo, telefone de uma pessoa supondo que ela tenha mais de um telefone e cores de um carro. Um atributo que gerado a partir de outro chamado de atributo derivado, so os atributos cujos valores no so armazenados no BD, por no haver necessidade de faz-lo, como o caso salrio mdio dos empregados, que pode ser derivado do atributo salrio.

2.2 Tipos Entidades


Um banco de dados costuma conter grupos de objetos que so similares possuindo, os mesmos atributos, porm, cada entidade com seus prprios valores para cada atributo. Estes conjuntos de objetos similares definem um tipo entidade. Cada tipo de entidade identificado por seu nome e pelo conjunto de atributos, que definem suas propriedades. A descrio do tipo entidade chamada de esquema do tipo entidade, especificando o nome do tipo entidade, o nome de cada um de seus atributos e qualquer restrio que incida sobre as entidades.

2.3 Domnio
Cada atributo simples de um tipo entidade est associado com um conjunto de valores denominado domnio, o qual especifica o conjunto de valores que podem ser designados para este determinado atributo, para cada entidade.

2.4 Atributos Chave


Uma restrio muito importante em uma entidade de um determinado tipo entidade a chave. Um tipo entidade possui um atributo cujos valores so distintos, para cada entidade individual. Este atributo chamado atributo chave e seus valores podem ser utilizados para identificar cada entidade de forma nica. Muitas vezes, uma chave pode ser formada pela composio de dois ou mais atributos. Uma entidade pode tambm ter mais de um atributo chave.

2.3 Tipos e Instncia de Relacionamento


Alm de conhecer detalhadamente os tipos entidade, muito comum conhecer tambm os relacionamentos entre estes tipos entidades. Um tipo relacionamento R entre n entidades E1, E2,... ,En, um conjunto de associaes entre entidades deste tipo. Informalmente falando, cada instncia de relacionamento r1 em R uma associao de entidades, onde a associao inclui exatamente uma entidade de cada tipo entidade participante no tipo relacionamento. Isto

10

significa que, estas entidades esto relacionadas de alguma forma no mini-mundo. A Figura 2.1 mostra um exemplo entre dois tipos entidade, empregado e departamento, e o relacionamento entre eles, trabalha para. Repare que para cada relacionamento, participam apenas uma entidade de cada tipo entidade, porm, uma entidade pode participar de mais do que um relacionamento.

Figura 2.1: Exemplo de um relacionamento.

2.4 Grau de um Relacionamento


O grau de um tipo relacionamento o nmero de tipos entidade que participam do tipo relacionamento. No exemplo da Figura 2.1, temos um relacionamento binrio. Existem trs tipos bsicos de grau de relacionamento: binrio, ternrio e n-rio que se referm existncia de duas, trs ou mais entidades envolvidas no fato que o relacionamento representa. O grau de um relacionamento ilimitado, porm, a partir do grau 3 (ternrio), a compreenso e a dificuldade de se desenvolver a relao corretamente se tornam extremamente complexas. Podemos ter tambm relacionamento binrio recursivo, que poderia ser tratado como relacionamento unrio visto que apenas um tipo entidade participa do relacionamento, construdo por meio de conexes com a mesma entidade, acontecendo como se fossem duas coisas diferentes se relacionando em nossa abstrao, duas ocorrncias da entidade se relacionando, se associando.

11

2.6 Relacionamentos como Atributos


Algumas vezes conveniente pensar em um relacionamento como um atributo. Considere o exemplo da Figura 2.1. Podemos pensar departamento como sendo um atributo da entidade empregado, ou empregador. Como um atributo multivalorado da entidade departamento. Se a existncia de uma entidade no for muito bem definida, talvez seja mais interessante para a coeso do modelo lgico, que ela seja representada como um atributo.

2.7 Nomes de Papis e Relacionamentos Recursivos


Cada tipo entidade que participa de um tipo relacionamento desempenha um papel particular no relacionamento. O nome do papel representa: o papel que uma entidade de um tipo entidade participante desempenha no relacionamento. No exemplo da Figura 2.1, temos o papel empregado ou trabalhador para o tipo entidade, EMPREGADO e o papel departamento ou empregador para entidade DEPARTAMENTO. Nomes de papis no so necessariamente importantes quando todas as entidades participantes desempenham papis diferentes. Algumas vezes, o papel torna-se essencial para distinguir o significado de cada participao. Isto muito comum em relacionamentos recursivos. A Figura 2.2 ilustra um exemplo de relacionamento recursivo. No exemplo da Figura 2.2, temos relacionamento entre o tipo entidade EMPREGADO, onde um empregado pode supervisionar outro empregado e vice-versa.

2.8 Restries em um tipo relacionamento


Geralmente, os tipos relacionamentos sofrem certas restries que limitam as possveis ligaes das combinaes das entidades participantes. Estas restries so derivadas de restries impostas pelo estado destas entidades no mini-mundo. A Figura 2.3 mostra um exemplo de restrio em um relacionamento recursivo.

12

Figura 2.2: Exemplo de relacionamento recursivo.

Figura 2.3: Relacionamento empregado gerencia departamento.

No exemplo da Figura 2.3, temos a seguinte situao: um empregado pode gerenciar apenas um departamento, enquanto que um departamento pode ser gerenciado por apenas um empregado. A este tipo de restrio, ns chamamos cardinalidade. A cardinalidade indica o nmero de relacionamentos, do qual uma entidade pode participar. Ela pode ser: 1:1; 1:N; N:N. No exemplo da Figura 2.3, a cardinalidade 1:1, pois cada entidade empregado pode gerenciar apenas um departamento e vice-versa; no exemplo da Figura

13

2.1, no relacionamento EMPREGADO Trabalha para DEPARTAMENTO, O relacionamento 1:N, pois um empregado pode trabalhar em apenas um departamento, enquanto um departamento pode possuir vrios empregados; na Figura 2.4 temos um exemplo de um relacionamento com cardinalidade N:N.

Figura 2.4: Relacionamento N:N.

No exemplo da Figura 2.4, temos que um empregado pode trabalhar em vrios projetos, enquanto que um projeto pode ter vrios empregados trabalhando. Outra restrio muito importante a participao. Ela define a existncia de uma entidade atravs do relacionamento, podendo ser parcial ou total, veja o exemplo da Figura 2.3. A participao do empregado parcial, pois nem todo empregado gerencia um departamento, porm a participao do departamento neste relacionamento total, j que todo departamento precisa ser gerenciado por um empregado. Desta forma, todas ocorrncias do tipo entidade DEPARTAMENTO precisam participar do relacionamento, mas nem todas ocorrncias do tipo entidade EMPREGADO, precisam participar do relacionamento. J no exemplo da Figura 2.1, ambas as participaes so totais, pois todo empregado precisa trabalhar em um departamento e todo departamento tem que ter empregados trabalhando nele. Estas restries so chamadas de restries estruturais. Algumas vezes, torna-se necessrio armazenar um atributo no tipo relacionamento, veja exemplo da figura 2.3. Pode-se querer saber em que dia o empregado passou a gerenciar o departamento, difcil estabelecer a qual tipo entidade pertence atributo, pois isto definido apenas pela

14

existncia do relacionamento. Quando temos relacionamentos com cardinalidade 1:1, podemos colocar o atributo em uma das entidades, de preferncia, em uma cujo tipo entidade tenha participao total. Neste caso, o atributo poderia ir para o tipo entidade departamento. Isto porque, nem todo empregado participar do relacionamento. Caso a cardinalidade seja 1:N, ento podemos colocar o atributo no tipo entidade com participao N. Porm, se a cardinalidade for N:M ento o atributo dever ficar no tipo relao, como seria o caso do relacionamento ilustrado pela Figura 2.4, caso queiramos armazenar quantas horas cada empregado trabalhou em cada projeto, ento este dever ser um atributo do relacionamento, trabalha em.

2.9 Tipos Entidades Fracas


Alguns tipos entidade podem no ter um atributo chave por si s, isto implica que no poderemos distinguir algumas entidades, porque as combinaes dos valores de seus atributos podem ser idnticas. Estes tipos entidades so chamados entidades fracas. Elas precisam estar relacionadas com uma entidade pertencente ao tipo entidade proprietria, entidade forte. Este relacionamento denominado relacionamento identificador. Veja o exemplo da Figura 2.5.

Figura 2.5: Relacionamento com entidade fraca.

O tipo entidade DEPENDENTE uma entidade fraca, pois no possui um atributo chave, identificador. O tipo entidade EMPREGADO no uma entidade fraca, pois

15

possui um atributo para identificao atributo chave, o nmero do CPF de um empregado. Porm, um dependente de cinco anos de idade no possui, necessariamente, um documento. Desta forma, esta entidade um tipo entidade fraca. Um tipo entidade fraca possui uma chave parcial, que juntamente com a chave primria da entidade proprietria, forma uma chave primria composta. Neste exemplo, a chave primria do empregado o CPF. A chave parcial do dependente o seu nome, pois dois irmos no podem ter o mesmo nome, falando logicamente. Desta forma, a chave primria ds entidade fica sendo o CPF do pai, ou da me, mais o nome do dependente. Todos os exemplos vistos anteriormente foram relacionamentos binrios, ou seja, entre dois tipos entidades diferentes ou recursivos. Todavia, o modelo entidaderelacionamento no se restringe apenas a relacionamentos binrios. O nmero de entidades que participam de um tipo relacionamento irrestrito e armazenam muito mais informaes do que diversos relacionamentos binrios. Considere o seguinte exemplo: um fornecedor pode fornecer uma ou mais peas para um ou mais projeto. Se criarmos dois relacionamentos binrios, no teremos estas informaes de forma completa como se criarmos um relacionamento ternrio, como ilustra a Figura 2.6.

Figura 2.6: Exemplo de relacionamento ternrio.

16

2.10 Diagrama Entidade Relacionamento


O Diagrama Entidade Relacionamento composto por um conjunto de objetos grficos que visa representar todos os objetos do modelo Entidade Relacionamento tais como: atributos, atributos chaves, relacionamentos, restries estruturais, entre outros. O diagrama ER fornece uma viso lgica do banco de dados, fornecendo um conceito mais generalizado de como esto estruturados os dados de um sistema. Os objetos que compem o diagrama ER esto listados a seguir, na figura 2.7.

Figura 2.7: Componentes do diagrama entidade-relacionamento.

2.11 Extenses do Modelo Entidade Relacionamento


Os conceitos do modelo Entidade Relacionamento discutidos anteriormente so suficientes para representar conceitual e logicamente maioria as aplicaes de banco de dados, porm, com o surgimento de novas aplicaes, surgiu tambm a necessidade de novas semnticas para a modelagem de informaes mais complexas. O modelo Entidade Relacionamento Extendido (ERE) visa fornecer esta semntica para permitir a

17

representao de informaes complexas. importante frisar que embora o modelo ERE trate classes e subclasses, ele no possui a mesma semntica de um modelo orientado a objetos. O modelo ERE engloba todos os conceitos do modelo E-R mais os conceitos de subclasse, superclasse, generalizao, especializao, e o conceito de herana de atributos.

2.11.1 Subtipos, Supertipos e Especializao O primeiro conceito do modelo ERE que ser abordado o de subclasse de um tipo entidade. Como visto anteriormente, um tipo entidade utilizado para representar um conjunto de objetos do mesmo tipo. Em muitos casos, um tipo entidade possui diversos subgrupos adicionais de objetos que so significativas e precisam ser representadas explicitamente devido ao seu significado aplicao de banco de dados. Para melhor entendimento desses conceitos, consideremos o seguinte exemplo: Para um banco de dados da empresa MERE temos o tipo entidade empregado, o qual possui as seguintes caractersticas: nome, RG, CPF, nmero funcional, endereo completo (rua, nmero, complemento, CEP, bairro, cidade), sexo, data de nascimento e telefone (DDD e nmero); caso o(a) funcionrio(a) seja um(a) engenheiro(a), secretrio(a), ento deseja-se armazenar as seguintes informaes: nmero do CREA e especialidade (civil, mecnico, eletro/eletrnico); caso seja um(a) secretrio(a), ento deseja-se armazenar as seguintes informaes: qualificao (bi ou tri lngue) e os idiomas no qual possui fluncia verbal e escrita. Se as informaes nmero do CREA, especialidade, tipo e idiomas forem representados diretamente no tipo entidade, empregado, estar representando informaes de um conjunto limitado de objetos empregados, para todos os funcionrios da empresa. Neste caso, podemos criar dois subtipos do tipo entidade, empregado: engenheiro e secretria, as quais iro conter as informaes acima citadas. Alm disto, engenheiro e secretria podem ter relacionamentos especficos. Uma entidade no pode existir meramente como componente de um subtipo. Antes de ser componente de um subtipo, uma entidade deve ser componente de um supertipo. Isto leva ao conceito de herana de atributos; ou seja, o subtipo herda todos os atributos

18

do supertipo, porque um objeto do subtipo apresenta as mesmas caractersticas de um objeto da entidade do supertipo. Um subtipo pode herdar atributos de supertipos diferentes. A Figura 2.8 ilustra o exemplo do banco de dados da empresa MERE, usando supertipo e subtipo.

Figura 2.8: Representao de supertipos e subtipos.

2.11.2 Especializao Especializao o processo de definio de um conjunto de classes de um tipo entidade; este tipo chamado de supertipo da especializao. O conjunto de subtipos forma-se baseado em alguma caracterstica que distingue as entidades dentre outras. No exemplo da Figura 2.8, temos uma especializao, a qual pode chamar de funo. Vejamos agora outro exemplo, ilustrado pela Figura 2.9, temos a entidade, funcionrio e duas especializaes. Como visto anteriormente, um subtipo pode ter relacionamentos especficos com outras entidades ou com a prpria entidade que o seu supertipo. A figura 2.10 ilustra isto. O processo de especializao permite:

definir um conjunto de subtipos de um tipo entidade; associar atributos especficos adicionais para cada subtipo; estabelecer tipos relacionados especficos entre subtipos e outros tipos entidades.

19

Figura 2.9: Representao de duas especializaes para funcionrio.

Figura 2.10: Relacionamento entre subtipos e entidades.

2.11.3 Generalizao A generalizao pode ser pensada como um processo de abstrao reverso ao da especializao, no qual so suprimidas as diferenas entre diversos tipos entidades, identificando suas caractersticas comuns e generalizando estas entidades em um supertipo. A figura 2.11 mostra um exemplo de generalizao. Como pode ser visto, temos nome e RG comuns s entidades engenheiro e secretria, o que nos leva a uma generalizao conforme ilustrada pela Figura 2.12.

20

Figura 2.11: Tipos entidades engenheiro e secretria.

Figura 2.12: Generalizao para tipo engenheiro e secretria.

importante destacar que existe diferena semntica entre a especializao e a generalizao. Na especializao, podemos notar que a ligao entre o supertipo e os subtipos feita atravs de um trao simples, indicando participao parcial por parte do supertipo. Analisando o exemplo da Figura 2.8, observado que um funcionrio no obrigado a ser um engenheiro ou uma secretria. Na generalizao, podemos notar que a ligao entre o supertipo e os subtipos feita atravs de um trao duplo, indicando participao total por parte do supertipo. Analisando o exemplo da Figura 2.12, observase que um funcionrio obrigado a ser um engenheiro ou uma secretria.

21

A letra d dentro do crculo que especifica uma especializao ou uma generalizao significa disjuno. Uma disjuno em uma especializao ou generalizao indica que uma entidade do tipo entidade que representa a superclasse, pode assumir apenas um papel dentro dela. Analisando o exemplo da Figura 2.9, temos duas especializaes para o supertipo funcionrio, as quais so restringidas atravs de uma disjuno. Neste caso, um funcionrio pode ser um engenheiro ou uma secretria e pode ser horista ou mensalista. Alm da disjuno podemos ter um overlap, representado pela letra o. No caso do overlap, uma entidade de um supertipo pode ser membro de mais que um subtipo em uma especializao ou generalizao. Analisando a generalizao ilustrada pela Figura 2.13, podemos dizer que uma pea fabricada em uma tornearia pode ser manufaturada ou torneada ou ainda, pode ser manufaturada e torneada ao mesmo tempo.

Figura 2.13: Generalizao com overlap.

22

3 O Modelo Relacional
O modelo relacional foi criado por Codd em1970 e tem por finalidade representar os dados como uma coleo de relaes, onde cada relao representada por uma tabela, ou falando de uma forma mais direta, um arquivo. Porm, um arquivo mais restrito que uma tabela. Toda tabela pode ser considerada um arquivo, porm, nem todo arquivo pode ser considerado uma tabela. Quando uma relao pensada como uma tabela de valores, cada linha nesta tabela representa uma coleo de dados relacionados. Estes valores podem ser interpretados como fatos descrevendo uma instncia de uma entidade ou de um relacionamento. O nome da tabela e das colunas so utilizados para facilitar a interpretao dos valores armazenados em cada linha. Todos os valores em uma coluna so necessariamente do mesmo tipo. Na terminologia do modelo relacional, cada tabela chamada de relao; uma linha de uma tabela chamada de tupla; o nome de cada coluna chamado de atributo; o tipo de dado que descreve cada coluna chamado de domnio.

3.1 Domnio de uma relao


Um domnio D um conjunto de valores atmicos, sendo que por atmico, podemos compreender que cada valor do domnio indivisvel. Durante a especificao do domnio importante destacar o tipo, o tamanho e a faixa do atributo que est sendo especificado. A Tabela 3.1, mostra um exemplo de domnios de atributo.
Tabela 3.1: Domnio de atributos.

Atributo CPF Nome Salrio

Tipo Numrico Caractere Numrico

Tamanho 11,0 45 6,2

Faixa 00000000000-99999999999 a-z, A-Z 000000,00-999999,99

23

3.2 Esquema de uma Relao


Um esquema de relao R, denotado por R(A1,A2, ..., An), onde cada atributo Ai o nome do papel desempenhado por uma domnio D no esquema relao R, onde D o chamado domnio de Ai e denotado por um dom(Ai). O grau de uma relao R o nmero de atributos presentes em seu esquema de relao.

3.3 Instncia de um Esquema


A instncia r de um esquema relao denotado por r(R) um conjunto de n-tuplas r=[t1,t2,..., tn] onde os valores de [t1,t2,..., tn] devem estar contidos no domnio D. O valor nulo tambm pode fazer parte do domnio de um atributo e representa um valor no conhecido para uma determinada tupla.

3.4 Atributo Chave de uma Relao


Uma relao pode ser definida como um conjunto de tuplas distintas. Isto implica que a combinao dos valores dos atributos em uma tupla no pode se repetir na mesma tabela. Existir sempre um subconjunto de atributos em uma tabela que garantem que no haver valores repetidos para as suas diversas tuplas, garantindo que t1[SC] t2[SC]. SC chamada de superchave de um esquema de relao. Toda relao possui ao menos uma superchave o conjunto de todos os seus atributos. Uma chave C de um esquema de relao R com a propriedade adicional que removendo qualquer atributo A de K, resta ainda um conjunto de atributos K que no uma superchave de R. Uma chave uma superchave da qual no se pode extrair atributos. Por exemplo, o conjunto: (RA, Nome, Endereo) uma superchave para estudante, porm, no uma chave pois se tirarmos o campo Endereo continuaremos a ter uma superchave. J o conjunto (Nome da Revista, Volume, N da Revista) uma superchave e uma chave, pois se retirarmos qualquer um dos atributos, deixaremos de ter uma superchave, ou seja, (Nome da Revista, Volume) no identifica uma nica tupla. Em outras palavras, uma superchave uma chave composta, ou seja, uma chave formada por mais que um atributo. Veja o exemplo apresentado na Tabela 3.2.

24

Tabela 3.2: Tabela com os dados de dependentes de empregados de uma empresa.

CPF Responsvel 111111111-11 222222222-22 333333333-33 444444444-44 555555555-55

Nome Dependente Karla Maria Mnica Joo Silvia

Data Nascimento 10/08/1991 07/03/1996 14/02/1976 10/02/95 01/05/90

Relao Filha Filha Cnjuge Filho Filha

Sexo Feminino Feminino Feminino Masculino Feminino

Quando uma relao possui mais que uma chave (no confundir com chave composta) como, por exemplo, RG e CPF para empregados cada uma destas chaves so chamadas de chaves candidatas. Uma destas chaves candidatas devem ser escolhida como chave primria. Uma chave estrangeira CE de uma tabela R1 em R2 ou vice-versa, especifica um relacionamento entre as tabelas R1 e R2. As tabelas 3.3 e 3.4 so exemplos de tabelas relacionadas, a Tabela 3.4 tem o atributo NumDept que uma chave estrangeira, pois ela a responsvel pela ligao entre empregado e departamento. Pode-se observar na Tabela 3.4, que existem duas chaves candidatas, CPF e RG, sendo que a chave escolhida como primria, o atributo CPF.

Tabela 3.3: Tabela de Departamentos.

Nome Contabilidade Engenharia Civil Engenharia Eltrica Nome Joo Luiz Fernando Ricardo Jorge Renato RG 10101010 20202020 30303030 40404040 50505050 CPF 111111111-11 222222222-22 333333333-33 444444444-44 555555555-55

NumDept 1 2 3 NumDept 1 2 3 3 1 RG Supervisor NULO 10101010 10101010 20202020 20202020 Salrio 3.000,00 2.500,00 2.300,00 4.200,00 1.300,00

Tabela 3.4: Tabela de empregados.

3.5 Normalizao
A Normalizao um processo formal passo a passo que examina os atributos de uma entidade, com o objetivo de evitar anomalias observadas na incluso, excluso e alterao de Tuplas especficas. Esse processo causa a simplificao dos atributos dentro da respectiva tupla, eliminando grupos repetitivos, dependncias parciais de chaves concatenadas, dependncias transitivas, dados redundantes e dependncias multivaloradas.

25

Para se atingir esse estgio, necessrio que as tuplas sejam analisadas de forma a verificar se seus atributos apresentam relaes no-normalizadas, submetendo-os aos conceitos subseqentes de primeira, segunda, terceira, quarta e quinta forma normal. 3.5.1 Primeira Forma Normal (1FN) Uma tupla est na primeira forma normal se e somente se o relacionamento entre a chave primria e os atributos no-chaves deve ser unvoco. Aplicar a primeira forma normal significa retirar os elementos repetitivos. Seja o exemplo abaixo, de uma tupla no normalizada:

NotaFiscal(nr_NF, dt_Emissao,

cd_NatOperacao, nm_Cliente,

cd_Transportadora, nm_Rua, nm_Cidade,

cd_Cliente,

cd_UF, nr_CNPJ, nr_IE, nr_Telefone, cd_Produto, cd_Unidade, qt_Vendida, nm_produto, cd_Tributacao, vl_Unitario,

vl_TotalItem, vl_TotalNF). Aps aplicar a primeira forma normal, obtm-se as seguintes tuplas:

NotaFiscal(nr_NF, dt_Emissao,

cd_NatOperacao, nm_Cliente,

cd_Transportadora, nm_Rua, nm_Cidade,

cd_Cliente,

cd_UF, nr_CNPJ, nr_IE, nr_Telefone, vl_TotalNF)

NotaFiscalItem(nr_NF,

cd_Produto,

cd_Unidade,

qt_Vendida,

nm_produto, cd_Tributacao, vl_Unitario, vl_TotalItem) 3.5.2 Segunda Forma Normal (2FN) Consiste em retirarmos das estruturas de dados que possuem chaves compostas, todos os dados que so funcionalmente dependentes de somente alguma parte dessa chave. Elimina-se a dependncia parcial, ou seja, os atributos no-chaves devem depender integralmente a chave primria composta. Uma tupla est na segunda forma normal, se estiver na primeira forma normal e no possuir campos que sejam funcionalmente dependentes de parte da chave. Seja o exemplo abaixo:

26

NotaFiscal dt_Emissao,

(nr_NF,

cd_NatOperacao, nm_Cliente,

cd_Transportadora, nm_Rua, nm_Cidade,

cd_Cliente,

cd_UF, nr_CNPJ, nr_IE, nr_Telefone, vl_TotalNF)

NotaFiscalItem (nr_NF, cd_Produto, qt_Vendida, vl_Unitario, vl_TotalItem)

Produto (cd_Produto, nm_produto, cd_Unidade, cd_Tributacao) 3.5.3 Terceira Forma Normal (3FN) A terceira forma normal determina que no deve existir atributos com dependncia funcional transitiva em uma tabela, porque podem provocar anomalias de incluso, manuteno e deleo. A aplicao da terceira forma normal consiste em retirar das estruturas, os campos que so funcionalmente dependentes de outros campos que no so chaves. Uma tupla est na terceira forma normal se ela estiver na segunda e no possuir campos dependentes de outros campos no chaves. Seja o exemplo abaixo: NotaFiscal(nr_NF, dt_Emissao, cd_NatOperacao, nm_Cliente, cd_Transportadora, nm_Rua, nm_Cidade,

cd_Cliente,

cd_UF, nr_CNPJ, nr_IE, nr_Telefone, vl_TotalNF) Podemos observar na tupla acima que os dados do cliente depende funcionalmente da coluna cdigo do cliente, a qual no faz parte da chave primria da tupla, logo tem dependncia funcional transitiva. Aps aplicar a 3FN, obtm-se as seguintes tuplas:

NotaFiscal(nr_NF,

cd_NatOperacao,

cd_Transportadora,

dt_Emissao, cd_Cliente, vl_TotalNF)

Cliente(cd_Cliente,

nm_Cliente,

nm_Rua,

nm_Cidade,

cd_UF,

nr_CNPJ, nr_IE, nr_Telefone)

27

Existem outras formas normais que podem estudadas em livros especializados de banco de dados, mas geralmente a aplicao das trs primeiras formas normais so suficientes para a criao de um modelo de banco de dados.

4 LGEBRA RELACIONAL
A lgebra relacional uma linguagem de consulta procedural. Ela consiste em um conjunto de operaes que tornam uma ou duas relaes como entrada e produzem uma nova relao como resultado. As operaes fundamentais na lgebra relacional so: selecionar, projetar, renomear, (unrias) - produto cartesiano, unio e diferena de conjuntos (binrias). Alm das operaes fundamentais, existem outras operaes: interseo de conjuntos, ligao natural, dentre outras, que so definidas em termos das operaes fundamentais.

4.1 Operao Selecionar


Seleciona tuplas que satisfazem um dado predicado (condio), descartando as outras. Usamos a letra minscula grega sigma para representar a seleo. O predicado aparece subscrito em s. A relao argumento aparece entre parnteses seguindo o . A forma geral de uma seleo :

<condies> (RELAO)
As comparaes so permitidas usando =, ,<, , > e e os conectivos e (^) e ou ( ) e que envolvam apenas os atributos existentes na RELAO. Exemplo 1 Selecione as tuplas da relao emprstimo onde o cdigo da agncia 0662.

agencia-cod=0662(EMPRESTIMO)
Exemplo 2 Encontrar todas as tuplas onde a quantia emprestada seja maior que 1200.

quantia >1200(EMPRESTIMO)

28

4.2 Operao projetar


A operao projetar uma operao unria que retorna sua relao argumento, com certas colunas deixadas de fora. A projeo representada pela letra grega ( ). A forma geral :

<atributos da relao> (RELAO)


Exemplo 1 Mostre o cdigo dos clientes e das agncias nas quais eles tomaram emprstimos.

agencia-cod,cliente-cod(EMPRESTIMO)
Exemplo 2 Mostre os clientes que moram em Aracruz. Devemos fazer uma seleo de todos os clientes que moram em Aracruz, em seguida projetar o cdigo destes clientes.

cliente-nome ( cliente-cidade=Aracruz (CLIENTE))


Observe que neste caso, se houver clientes com o mesmo nome, apenas um nome aparecer na tabela resposta!

4.3 Operao produto cartesiano


Esta operao combina atributos (colunas) a partir de diversas relaes. Trata-se de uma operao binria muito importante. Esta operao nos mostra todos os atributos das relaes envolvidas. A forma geral : RELAO1 X RELAO2 Exemplo 1 Para selecionarmos todos os nomes dos clientes que possuam emprstimo na agncia cujo cdigo 0662, escrevemos:

cliente-nome ( agencia-cod=0662 ^ Emprestimo.cliente-cod = CLIENTE. cliente-cod


(EMPRESTIMO X CLIENTE)) Deve-se tomar cuidado com ambigidades nos nomes dos atributos. Exemplo 2 Esquema LANCHE DO PEDRO:

29

CLIENTE = (codigo, nome) FIADO = (codigo, valor) Se quisermos saber os nomes dos clientes e seus fiados, deveramos fazer:

codigo,nome,valor ( CLIENTE.codigo=FIADO.codigo (Cliente x Fiado))


Supondo as tabelas CLIENTE e FIADO abaixo, podemos representar das etapas desta consulta conforme Figura 4.1.

Figura 4.1: Ilustrao de uma consulta usando produto cartesiano.

4.4 Operao Renomear


A operao de renomear uma tabela usada sempre que uma relao aparece mais de uma vez em uma consulta. representada pela letra grega . A forma geral :

<novo nome> (RELAO2)


Outra forma de renomear uma RELAO atribui-la a uma outra. Isto feito com o smbolo

. RELAO1

RELAO2 Exemplo

Encontre todos os clientes que moram na mesma rua e cidade que Joo. Podemos obter a rua e a cidade de Joo da seguinte forma: t

rua, cidade ( cliente_nome=Joo ( CLIENTE ))

30

Entretanto, para encontrar outros clientes com esta rua e cidade, devemos referir-nos relao Cliente pela segunda vez. Perceba que se for inserida novamente uma relao clientes na consulta gerar ambiguidade. Por isso, devemos renome-la.

CLIENTE2 (CLIENTE)
Obtemos ento:

rua, cidade ( CLIENTE.cidade = CLIENTE2.cidade ^ CLIENTE.rua = CLIENTE2.rua


(t X CLIENTE2 (CLIENTE))

O resultado desta consulta ilustrado pela Figura 4.2.

Figura 4.2: Resultado da consulta usando renoneao.

4.5 Operao Unio (binria)


A operao binria unio representada, como na teoria dos conjuntos, pelo smbolo
.

A forma geral : RELAO1 RELAO2 Suponha que quisssemos saber todas as pessoas que possuem CONTA ou EMPRSTIMO numa determinada agncia. Com os recursos que temos at agora, no seria possvel conseguirmos tal informao. Nessa situao, deveramos fazer a unio de todos que possuem conta com todos que possuem emprstimos nessa agncia.

31

Exemplo Selecionar todos os clientes que possuam conta ou emprstimos ou ambos na agncia 051.

cliente-nome ( agencia-cod=051 ^ CONTA.cliente-cod = CLIENTE.clientecod(CONTA X CLIENTE))

cliente-nome ( agencia-cod=051 ^ CONTA.cliente-cod = CLIENTE.clientecod(EMPRESTIMO X CLIENTE)) Uma vez que as relaes so conjuntos, as linhas duplicadas so eliminadas. Para uma operao Unio r s ser vlida, necessitamos que duas condies devem ser cumpridas: - As relaes r e s precisam ter a mesma paridade. Isto , elas precisam ter o mesmo nmero de atributos; - Os domnios do i-simo atributo de r e do i-simo atributo de s devem ser os mesmos.

4.6 A operao diferena de conjuntos


A operao diferena de conjuntos permite-nos encontrar tuplas que esto em uma relao e no em outra. A expresso r - s resulta em uma relao que contm todas as tuplas que esto em r e no em s. A forma geral : RELAO1 - RELAO2 Exemplo 1 Encontrar os clientes que possuem uma conta mas no possuem um emprstimo na agncia 051.

cliente-nome ( agencia-cod=051 ^ CONTA.cliente-cod = CLIENTE.cliente-cod


(CONTA X CLIENTE)) -

cliente-nome ( agencia-cod=051 ^ CONTA.cliente-cod = CLIENTE.cliente-cod


(EMPRESTIMO X CLIENTE)) Observao: A operao diferena no comutativa. Em geral r s s r. Exemplo 2 Suponha o seguinte esquema:

32

Esquema LANCHE DO PEDRO: CLIENTE = (codigo, nome) FIADO = (codigo, valor) Mostre a conta de fiado mais alta. MENORES MAIOR

valor ( valor < AUX.valor (FIADO X AUX (FIADO))

valor (FIADO) - MENORES

O resultado ilustrado pela Figura 4.3.

Figura 4.3: Resultado da seleo da conta de fiado mais alta.

4.7 Operao interseo de conjuntos


representado pelo smbolo . A forma geral : RELAO1 RELAO2 Exemplo Encontrar todos os clientes com um emprstimo e uma conta na agncia 051.

cliente-nome ( agencia-cod=051 ^ CONTA.cliente-cod = CLIENTE.clientecod(CONTA X CLIENTE))

33

cliente-nome ( agencia-cod=051 ^ CONTA.cliente-cod = CLIENTE.clientecod(EMPRESTIMO X CLIENTE)) A operao Interseo de conjuntos pode ser expressa em funo das operaes fundamentais da seguinte forma: r s = r - (r s).

4.8 Operao Ligao natural


A ligao natural uma operao binria que permite combinar certas selees e um produto cartesiano em uma nica operao. representada pelo smbolo |X|. A operao ligao natural forma um produto cartesiano de seus dois argumentos, faz uma seleo forando uma equidade sobre os atributos que aparecem em ambos os esquemas relao. A forma geral : RELAO1 |x|(atributoA, atributoB) RELAO2 Que equivale a:

atributoA = atributoB (RELAO1 X RELAO2)


Exemplo 1 Encontre todos os cliente que tem emprstimos e a cidade em que vivem.

cliente-nome, cidade (EMPRESTIMO |X| CLIENTE)


Exemplo 2 Encontre todos os cliente que tem emprstimos e que moram em Vitria.

cliente-nome, cidade ( cidade=Vitria (EMPRESTIMO |X| CLIENTE))


Exemplo 3 Encontre os nomes de todos os clientes que tm conta nas agncias situadas em Vitria

cliente-nome, numer-conta ( agencia-cidade=Vitria (CLIENTE |X| CONTA |X|


AGENCIA))

4.9 Operao Diviso


A operao diviso, representada por , serve para consultas que incluem frases com para todos.

34

Exemplo Suponha que desejamos encontrar todos os clientes que tm uma conta em todas as agncias localizadas em Vitria. Podemos obter todas as agncias de Vitria atravs da expresso: r1

agencia-cod ( cidade=Vitria (AGENCIA))

Podemos encontrar todos os pares cliente-nome, agencia-cod nos quais um cliente possui uma conta em uma agncia escrevendo: r2

cliente-nome, agencia-cod (CONTA |X| CLIENTE)

Agora precisamos encontrar clientes que apaream em r2 com cada nome de agncia em r1. Escrevemos esta consulta da seguinte forma:

cliente-nome,

agencia-cod

(CONTA

|X|

CLIENTE)

agencia-cod

( cidade=Vitria (AGENCIA))

4.10 Operao de insero


Esta operao usada para inserir dados em uma relao. RELAO1 RELAO1 RELAO2 Os valores dos atributos da RELAO1 e RELAO2 devem ter domnios equivalentes. Exemplo Podemos acrescentar uma nova conta em CONTA da seguinte forma: CONTA CONTA {(51, 980987, 1, 1200)}

4.11 Remoo
A remoo expressa da seguinte forma: RELAO1 RELAO1 - RELAO2 Exemplo 1 Excluir todas as contas do cliente de cdigo 01 CONTA = CONTA - ( cliente-cod = 01 (CONTA))

35

Exemplo 2 Excluir todas as contas de joo T ( cliente-nome=joo (CONTA |X| CLIENTE) CONTA = CONTA - ( cliente-cod = 01 (T)) Exemplo 3 Suponha que a agncia 051 esteja fazendo uma promoo e resolva abrir uma conta automaticamente para todos os clientes que possuem emprstimo, mas no possui uma conta nesta agncia. O nmero da nova conta ser igual ao nmero do emprstimo ( ou de um dos emprstimos caso haja mais de um). EMPRESTIMO-051 agencia-cod = 051 (EMPRESTIMO) CONTA-051 agencia-cod = 051 (CONTA) Os clientes que possuem um emprstimo mas no possuem uma conta na agncia 051: CLIENTE-COD cliente-cod(EMPRESTIMO-051 X CLIENTE)

cliente-cod (CONTA-051 |X| CLIENTE)


Os novos clientes sero os que no possuem conta, com o nmero do emprstimo, com um saldo de 0,00 (supomos que o banco seja srio e no quer dar dinheiro a ningum J ). CLIEENTES-NOVOS ( cliente-cod,agencia-cod,emprestimo-numero (CLIENTE-COD |X| EMPRESTIMO-051)) x {(0,00)} A resposta ser ento: CONTA CONTA CLIENTES-NOVOS

4.12 Atualizao
Em certas situaes, podemos desejar mudar um valor em uma tupla sem mudar todos os valores da tupla. Se fizermos estas mudanas usando remoo e insero podemos no ser capazes de reter os valores que no queremos mudar. Nestes casos usamos o operador atualizao, representado pela letra grega . A atualizao uma operao fundamental da lgebra relacional atributo valor (RELAO) onde atributo deve ser um atributo de RELAO e valor deve ter um domnio compatvel. Exemplo 1 Suponha que o rendimento das contas tenha sido de 5% (aumente o saldo de todos em 5%).

36

saldo saldo * 1.05 ( CONTAS )


Exemplo 2 Suponhamos que contas com saldo superior a 10.000 recebam 6% de juros e as demais apenas 5%.

saldo saldo * 1.06 ( saldo > 10000 (CONTAS)) saldo saldo * 1.05 ( saldo <= 10000 (CONTAS))

5. Linguagem SQL
Quando os Bancos de Dados Relacionais estavam sendo desenvolvidos, foram criadas linguagens destinadas sua manipulao. A verso original foi desenvolvida no Laboratrio de Pesquisa da IBM. Esta linguagem, originalmente chamada Sequel foi implementada como parte do projeto System R no incio dos anos 70. A linguagem evoluiu desde ento, e seu nome foi mudado para SQL (Structured Query Language). Em 1986 o American National Standard Institute (ANSI), publicou um padro SQL. A SQL estabeleceu-se como linguagem padro de Banco de Dados Relacional. A IBM publicou o seu prprio SQL standard, o Systems Aplication Arquitecture Database Interface (SAASQL) em 1987. Em 1989, tanto ANSI quanto ISO publicaram padres substitutos (ANSI X3.1351989 e ISO/IEC 9075:1989) que aumentaram a linguagem e acrescentaram uma capacidade opcional de integridade referencial, permitindo que projetistas de bancos de dados pudessem criar relacionamentos entre dados em diferentes partes do banco de dados. A verso em uso do padro ANSI / ISSO SQL o padro SQL-92 (ANSI X3.135-1992) mas algumas aplicaes atuais do suporte apenas ao padro SQL-89. Desde 1993 h trabalhos sendo desenvolvidos para atualizar o padro de modo que este atenda s caractersticas das ltimas verses de bancos de dados relacionais lanadas no mercado. A principal inovao da nova verso (chamada provisoriamente de SQL3) o suporte orientao a objetos. Algumas caractersticas importantes da linguagem SQL so:

permitir trabalhar com vrias tabelas; permitir utilizar o resultado de uma instruo SQL em outra instruo SQL (subqueries); no precisar especificar o mtodo de acesso ao dado;

37

ser de fcil aprendizado; poder ser utilizada dentro de outras linguagens como C, COBOL, Pascal, Delphi, entre outros (SQL embutida).

SQL engloba vrios tipos de comandos:

Comandos de manipulao de dados, chamados de DML - Data Manipulation Language. So comandos que nos permitem consultar, incluir, excluir ou alterar dados de tabelas. Comandos de definio de dados, chamados de DDL - Data Definition Language (por exemplo: Create, Alter e Drop). So comandos que nos permitem manipular a estrutura do banco de dados, criando cada uma de suas tabelas com seus atributos, chaves, entre outros. Comandos de controle, chamados de DCL - Data Control Language. So comandos que nos permitem exercer controle sobre parmetros do banco que influenciam principalmente na performance.

5.1 Estrutura Bsica de Expresso SQL


A estrutura bsica de uma expresso SQL consiste em trs clusulas: select, from e where. A clusula select (selecionar) corresponde operao projeo da lgebra relacional. usada para listar os atributos desejados no resultado de uma consulta. A clusula from (origem) corresponde operao produto cartesiano da lgebra relacional. Ela lista as relaes a serem examinadas na avaliao da expresso. A clusula where (onde) corresponde ao predicado de seleo da lgebra relacional. Consiste em um predicado envolvendo atributos de relaes que aparecem na clusula from. Uma tpica consulta SQL segue a seguinte ordem: Select a1, a2, ..., an 3 From T1, T2, , Tn 1 Where P 2 Cada ai representa um atributo e cada Ti uma relao e P um predicado. Por exemplo, se desejamos selecionar em um esquema banco todos os clientes de Santarm, o conjunto de instrues o seguinte:

38

Select Cliente_Nome From Cliente Where Cidade = Santarm Ou se quisermos selecionar Nome e RG dos empregados do departamento 5 da tabela de empregados, temos o seguinte conjunto de instrues:

Select Nome, RG From Empregados Where Departamento = 5 O resultado seria o seguinte: Nome Joo Maria Marta RG 0101010101 0202020202 0303030303

Em SQL tambm permitido o uso de condies mltiplas. Veja o exemplo a seguir:

select nome, rg, salario from EMPREGADO where depto = 2 AND salario > 2500.00; que fornece o seguinte resultado: Nome RG Joo 0101010101 Salrio 3200,00

O operador * dentro do especificador select seleciona todos os atributos de uma tabela, enquanto que a excluso do especificador where faz com que todas as tuplas de uma tabela sejam selecionadas. Desta forma, a expresso: select * from empregado;

39

gera o seguinte resultado: nome Joo Luiz Fernanda Manoel Karla rg 10101010 20202020 30303030 40404040 cpf 11111111 22222222 33333333 44444444 depto 1 1 3 2 rg_supervisor salario 1 3.000,00 10101010 2.500,00 5.000,25 20202020 2.400,35

5.2 Clusulas Distinct e All


Diferente de lgebra relacional, a operao select em SQL permite a gerao de tuplas duplicadas como resultado de uma expresso. Para evitar isto, devemos utilizar a clusula distinct. Por exemplo, sejam as seguintes consultas no esquema EMPRESA.

select depto from EMPREGADO; que geram respectivamente os seguintes resultados:

select distinct depto from EMPREGADO;

Depto 1 1 2 2 3 3 4 4 5 5 5

Depto 1 2 3 4 5

A clusula All o default para o select ou seja: Select All indica para obter todas as tuplas. Logo, esta clusula no precisa ser colocada (a no ser, talvez por motivos de documentao).

40

5.3 Predicados e ligaes


A SQL no tm uma representao da operao ligao natural. No entanto, uma vez que a ligao natural definida em termos de um produto cartesiano, uma seleo e uma projeo, relativamente simples escrever uma expresso SQL para uma ligao natural. Por exemplo, encontre os nomes e cidades de clientes que possuam emprstimos em alguma agncia. Select distinct cliente_nome, cidade From Cliente, Emprestimo Where Cliente.cliente_cod=Emprestimo.cliente_cod A SQL inclui os conectores and, or e not; caracteres especiais: (, ), ., :, _, %<, >, <= , >= , = , <>, +, - ,* e /; e o operador para comparao: between, como mostra o exemplo a seguir. Selecionar todas as contas que possuam saldo entre 10000 e 20000. Select conta_numero From CONTA Where saldo >= 10000 and saldo <= 20000 que equivale consulta:

Select conta_numero From CONTA Where saldo between 10000 and 20000 A SQL inclui tambm um operador para comparaes de cadeias de caracteres, o like. Ele usado em conjunto com dois caracteres especiais:

Por cento (%). Substitui qualquer subcadeia de caracteres. Sublinhado ( _ ). Substitui qualquer caractere.

41

Exemplo 1: encontre os nomes de todos os clientes cujas ruas incluem a subcadeia na

Select distinct cliente_nome From CLIENTE Where rua like %na% Exemplo 2: encontre os nomes de todos os clientes cujas ruas finalizem com a subcadeia na, seguido de um caractere.

Select distinct cliente_nome From CLIENTE Where rua like %na_ Para que o padro possa incluir os caracteres especiais ( isto , % , _ , etc...), a SQL permite a especificao de um caractere de escape. O caractere de escape usado imediatamente antes de um caractere especial para indicar que o caractere especial dever ser tratado como um caractere normal. Definimos o caractere de escape para uma comparao like usando a palavra-chave escape. Para ilustrar, considere os padres seguintes que utilizam uma barra invertida como caractere de escape.

Like ab\%cd% escape \ substitui todas as cadeias comeando com ab%cd; Like ab\_cd% escape \ substitui todas as cadeias comeando com ab_cd.

A procura por no-substituies em vez de substituies d-se atravs do operador not like.

5.4 VARIVEIS TUPLAS (RENOMEAO)


Seja o Exemplo: no esquema EMPRESA, selecione o nmero do departamento que controla projetos localizados em Rio Claro; select t1.numero_depto from departamento_projeto as t1, projeto as t2

42

where t1.numero_projeto = t2.numero; Na expresso SQL acima, t1 e t2 so chamados alias (apelidos) e representam a mesma tabela a qual esto referenciando. Um alias muito importante quando h redundncia nos nomes das colunas de duas ou mais tabelas que esto envolvidas em uma expresso. Ao invs de utilizar o alias, possvel utilizar o nome da tabela, mas isto pode ficar cansativo em consultas muito complexas alm do que, impossibilitaria a utilizao da mesma tabela mais que uma vez em uma expresso SQL. A palavra chave as opcional. Por exemplo, no esquema EMPRESA, selecione o nome e o RG de todos os funcionrios que so supervisores.

select distinct e1.nome as Nome do Supervisor, e1.rg as RG do Supervisor from empregado e1, empregado e2 where e1.rg = e2.rg_supervisor; que gera o seguinte resultado: Nome do Supervisor Joo Ana Maria Manoel RG do Supervisor 0101010101 0202020202 0303030303 0404040404

Seja o exemplo, encontre o nome e a cidade de todos os clientes com uma conta em qualquer agncia.

Select distinct C.cliente_nome, C.cidade from CLIENTE C, CONTA S where C.cliente_cod = S.cliente_cod

43

5.4 OPERAES DE CONJUNTOS


A SQL inclui as operaes de conjunto union, intersect e minus que operam em relaes e correspondem s operaes , e da lgebra relacional. Uma vez que as relaes so conjuntos, na unio destas, as linhas duplicadas so eliminadas. Para que uma operao R S, R S ou R - S seja vlida, necessitamos que duas condies sejam cumpridas:

As relaes R e S devem ter o mesmo nmero de atributos; Os domnios do i-simo atributo de R e do i-simo atributo de S devem ser os mesmos.

Observao: Nem todos os interpretadores SQL suportam todas as operaes de conjunto. Embora a operao union seja relativamente comum, so raros os que suportam intersect ou minus. Exemplo 1: Mostrar o nome dos clientes que possuem conta, emprstimo ou ambos na agncia de cdigo 051: Emprstimo na agncia 051: Select distinct cliente_nome From CLIENTE, EMPRESTIMO Where CLIENTE.cliente_cod= EMPRESTIMO.cliente_cod and agencia_cod = 051 Conta na agncia 051: Select distinct cliente_nome From CLIENTE, CONTA Where CLIENTE.cliente_cod= CONTA.cliente_cod and CONTA.agencia_cod = 051

44

Fazendo a unio dos dois:

(Select distinct cliente_nome From CLIENTE, EMPRESTIMO Where CLIENTE.cliente_cod= EMPRESTIMO.cliente_cod and agencia_cod = 051 ) Union (Select distinct cliente_nome From CLIENTE, CONTA Where CLIENTE.cliente_cod= CONTA.cliente_cod and CONTA.agencia_cod = 051 ) Exemplo 2: Achar todos os clientes que possuam uma conta e um emprstimo na agncia de cdigo 051.

(Select distinct cliente_nome From CLIENTE, EMPRESTIMO Where CLIENTE.cliente_cod= EMPRESTIMO.cliente_cod and agencia_cod = 051 ) intersect (Select distinct cliente_nome From CLIENTE, CONTA Where CLIENTE.cliente_cod= CONTA.cliente_cod and CONTA.agencia_cod = 051 ) Exemplo 3: Achar todos os clientes que possuem uma conta mas no possuem um emprstimo na agncia de cdigo 051.

(Select distinct cliente_nome From CLIENTE, EMPRESTIMO Where CLIENTE.cliente_cod=Emprestimos.cliente_cod and

45

EMPRESTIMO.agencia_cod = 051 ) minus (Select distinct cliente_nome From CLIENTE, CONTA Where CLIENTE.cliente_cod= CONTA.cliente_cod and CONTA.agencia_cod = 051 )

5.5 ORDENANDO A EXIBIO DE TUPLAS (ORDER BY)


A clusula order by ocasiona o aparecimento de tuplas no resultado de uma consulta em uma ordem determinada. Para listar em ordem alfabtica todos os clientes do banco, fazemos:

Select distinct cliente_nome From CLIENTE Order by cliente_nome Como padro, SQL lista tuplas na ordem ascendente. Para especificar a ordem de classificao, podemos especificar asc para ordem ascendente e desc para descendente. Podemos ordenar uma relao por mais de um elemento, como se segue:

Select * From EMPRESTIMO Order by quantia desc, agencia_cod asc Para colocar as tuplas (linhas) em ordem realizada uma operao de sort. Esta operao relativamente custosa e portanto s deve ser usada quando realmente necessrio.

46

5.6 MEMBROS DE CONJUNTOS


O conectivo in testa os membros de conjunto, onde o conjunto uma coleo de valores produzidos por uma clusula select. Da mesma forma, pode ser usada a expresso not in. Exemplo 1: Selecione todas as agncias com cdigo 1, 2 ou 3.

select * from agencia where agencia_cod in (1,2,3) Exemplo 2: Selecione o nome de todos os funcionrios que trabalham em projetos localizados em Rio Claro. select e1.nome, e1.rg, e1.depto from empregado e1, empregado_projeto e2 where e1.rg = e2.rg_empregado and e2.numero_projeto in (select numero from projeto where localizacao = Rio Claro); Exemplo 3: Encontre todos os clientes que possuem uma conta e um emprstimo na agncia Princesa Isabel.

Select distinct cliente_nome From CLIENTE Where CLIENTE.cliente_cod in (select cliente_cod from CONTA, AGENCIA

47

where CONTA.agencia_cod = AGENCIA.agencia_cod and agencia_nome = Princesa Isabel) and CLIENTE.cliente_cod in (select cliente_cod from EMPRESTIMO, AGENCIA where EMPRESTIMO.agencia_cod= AGENCIA.agencia_cod and agencia_nome = Princesa Isabel) Exemplo 4: Encontre todas as agncias que possuem ativos maiores que alguma agncia de Vitria.

select distinct t.agencia_nome from AGENCIA t, AGENCIA s where t.ativos > s.ativos and s.cidade = Vitria Observao: Uma vez que isto uma comparao maior que, no podemos escrever a expresso usando a construo in. A SQL oferece o operador some (equivalente ao operador any), usado para construir a consulta anterior. So aceitos pela linguagem: >some, <some, >=some, <=some, =some

select agencia_nome from AGENCIA where ativos > some (select ativos from AGENCIA where agencia_cidade = Vitria) Como o operador some, o operador all pode ser usado como: >all, <all, >=all, <=all, =all e <>all. A construo > all corresponde a frase maior que todos.

48

Exemplo 5: Encontrar as agncias que possuem ativos maiores do que todas as agncias de Vitria.

select agencia_nome from AGENCIA where ativos > all (select ativos from AGENCIA where agencia_cidade = Vitria) A SQL possui um recurso para testar se uma subconsulta tem alguma tupla em seus resultados. A construo exists retorna true se o argumento subconsulta est no-vazio. Podemos usar tambm a expresso not exists. Exemplo 1: No esquema EMPRESA, liste o nome dos gerentes que tm ao menos um dependente.

Select nome from EMPREGADO where exists (select * from DEPENDENTE where DEPENDENTE.rg_responsavel = EMPREGADO.rg) and exists (select * from DEPARTAMENTO where DEPARTAMENTO.rg_gerente = EMPREGADO.rg) Exemplo 2: Usando a construo exists, encontre todos os clientes que possuem uma conta e um emprstimo na agncia Princesa Isabel.

49

Select cliente_nome from CLIENTE where exists (select * from CONTA, AGENCIA where CONTA.cliente_cod= CLIENTE.cliente_cod and AGENCIA.agencia_cod = CONTA.agencia_cod and agencia_nome = Princesa Isabel) and exists (select * from EMPRESTIMO, AGENCIA where EMPRESTIMO.cliente_cod= CLIENTE.cliente_cod and AGENCIA.agencia_cod = EMPRESTIMO.agencia_cod and agencia_nome = Princesa Isabel)

5.7 FUNES AGREGADAS


A SQL oferece a habilidade para computar funes em grupos de tuplas usando a clusula group by. O(s) atributo(s) dados na clusula group by so usados para formar grupos. Tuplas com o mesmo valor em todos os atributos na clusula group by so colocados em um grupo. A SQL inclui funes para computar: Mdia: avg Mnimo: min Mximo: max Soma: sum Contar: count Exemplo 1: Encontre o saldo mdio de conta em cada agncia.

Select agencia_nome, avg(saldo) From CONTA, AGENCIA where CONTA.agencia_cod = AGENCIA.agencia_cod Group by agencia_nome Exemplo 2: Encontre o nmero de depositantes de cada agncia.

50

Select agencia_nome, count(distinct cliente_nome) From CONTA, AGENCIA where CONTA.agencia_cod = AGENCIA.agencia_cod Group by agencia_nome Observao: Note que nesta ltima consulta importante a existncia da clusula distinct, pois um cliente pode ter mais de uma conta em uma agncia, e dever ser contado uma nica vez. Exemplo 3: Encontre o maior saldo de cada agncia.

Select agencia_nome, max(saldo) From CONTA, AGENCIA Where CONTA.agencia_cod= AGENCIA.agencias_cod Group by agencia_nome s vezes, til definir uma condio que se aplique a grupos em vez de tuplas. Por exemplo, poderamos estar interessados apenas em agncias nas quais a mdia dos saldos maior que 1200. Esta condio ser aplicada a cada grupo e no tuplas simples e definida atravs da clusula having. Expressamos esta consulta em SQL assim:

Select agencia_nome, avg(saldo) From CONTA, AGENCIA Where CONTA.agencia_cod= AGENCIA.agencias_cod Group by agencia_nome Having avg(saldo)>1200 s vezes, desejamos tratar a relao inteira como um grupo simples. Nesses casos, no usamos a clusula group by, por exemplo, encontre a mdia de saldos de todas as contas:

Select avg(saldo) From CONTA

51

5.8 MODIFICANDO O BANCO DE DADOS

4.8.1. Remoo Podemos remover somente tuplas inteiras, no podemos remover valores apenas em atributos particulares. Sintaxe:

Delete From R Where P onde R representa uma relao e P um predicado. Note que o comando delete opera em apenas uma relao. O predicado da clusula where pode ser to complexo como o predicado where do comando select. Exemplo 1: Remover todas as tuplas de emprstimo.

Delete From EMPRESTIMO Exemplo 2: Remover todos os registros da conta de Joo. Delete From CONTA where cliente_cod in (select cliente_cod from CLIENTE where cliente_nome = Joo) Exemplo 3: Remover todos os emprstimos com nmeros entre 1300 e 1500.

Delete From EMPRESTIMO where emprestimo_numero between 1300 and 1500

52

Exemplo 4: Remova todas as contas de agncias localizadas em Vitria.

Delete From CONTA where agencia_cod in (select agencia_cod from AGENCIA where agencia_cidade=Vitoria)

5.8.2 Insero Para inserir um dado em uma relao, ou especificamos uma tupla para ser inserida escrevemos uma consulta cujo resultado seja um conjunto de tuplas a serem inseridas. Os valores dos atributos para tuplas inseridas precisam necessariamente ser membros do mesmo domnio do atributo, por exemplo, inserir uma nova conta para Joo (cdigo = 1), nmero 9000, na agncia de cdigo=2 cujo valor seja 1200.

insert into CONTA values (2,9000,1,1200) Na insero acima considerando a ordem na qual dos atributos correspondentes esto listados no esquema relao. Caso o usurio no se lembre da ordem destes atributos, pode fazer o mesmo comando da seguinte forma:

insert

into

CONTA

(agencia_cod,

conta_numero,

cliente_cod, saldo) values (2,9000,1,1200) Podemos querer tambm inserir tuplas baseadas no resultado de uma consulta. Por exemplo, inserir todos os clientes que possuam emprstimos na agncia Princesa Isabel na relao CONTA com um saldo de 200. O nmero da nova conta o nmero do emprstimo * 10000.

53

insert

into

CONTA

(agencia_cod,

conta_numero,

cliente_cod, saldo) select AGENCIA.agencia_cod, emprestimo_numero*10000,

cliente_cod, 200 from EMPRESTIMO, AGENCIA where EMPRESTIMO.agencia_cod= AGENCIA.agencia_cod and agencia_nome = 'Princesa Isabel' 5.8.3 Atualizaes Em certas situaes, podemos desejar mudar um valor em uma tupla sem mudar todos os valores na tupla. Para isso, o comando update pode ser usado. Suponha que esteja sendo feito o pagamento de juros, e que em todos saldos sejam acrescentados em 5%. Escrevemos

update CONTA set saldo = saldo * 1,05 Suponha que todas as contas com saldo superiores a 10000 recebam aumento de 6% e as demais de 5%.

Update CONTA set saldo = saldo * 1,06 where saldo >10000 Update CONTA set saldo = saldo * 1,05 where saldo<=10000 A clusula where pode conter uma srie de comandos select aninhados. Considere, por exemplo, que todas as contas de pessoas que possuem emprstimos no banco tero acrscimo de 1%.

54

Update CONTA set saldo = saldo * 1,01 where cliente_cod in (select cliente_cod from EMPRESTIMO ) Exemplo 1: No esquema EMPRESA, atualize o salrio de todos os empregados que trabalham no departamento 2 para R$ 3.000,00.

update empregado set salario = 3000 where depto = 2; Exemplo 2: No esquema BANCO, atualize o valor dos ativos. Os ativos so os valores dos saldos das contas da agncia.

update agencia set ativos = (select sum(saldo) from conta where conta.agencia_cod = agencia.agencia_cod) 5.8.4 Valores Nulos possvel dar valores a apenas alguns atributos do esquema para tuplas inseridas em uma dada relao. Os atributos restantes so designados como nulos. Considere a requisio:

insert

into

CLIENTE

(cliente_cod,

cliente_nome,

rua,

cidade)values (123,'Andrea',null,null)

55

A palavra chave null pode ser usada em um predicado para testar se um valor nulo. Assim, para achar todos os clientes que possuem valores nulos para rua, escrevemos:

select distinct cliente_nome from CLIENTE where rua is null O predicado is not null testa a ausncia de um valor nulo.

5.9 DEFINIO DE DADOS


O conjunto de relaes de um Banco de Dados precisa ser especificado ao sistema por meio de uma linguagem de definio de dados - DDL. A SQL DDL permite a especificao no apenas de um conjunto de relaes, mas tambm de informaes sobre cada relao, incluindo:

Esquema para cada relao; Domnio de valores associados a cada atributo; Conjunto de ndices a ser mantido para cada relao; Restries de integridade; A estrutura fsica de armazenamento de cada relao no disco.

Uma relao SQL definida usando o comando create table:

create table <nome_tabela> ( <nome_coluna1> <tipo_coluna1> <NOT NULL>, <nome_coluna2> <tipo_coluna2> <NOT NULL>, ... <nome_colunan> <tipo_colunan> <NOT NULL>); A restrio not null indica que o atributo deve ser obrigatoriamente preenchido; se no for especificado, ento o default que o atributo possa assumir o valor nulo. Por exemplo, criar a tabela EMPREGADO do esquema EMPRESA, teramos o seguinte comando:

56

create table EMPREGADO (nome char (30) NOT NULL, rg integer NOT NULL, cic integer, depto integer NOT NULL, rg_supervisor integer, salario, decimal (7,2)NOT NULL) O comando create table inclui opes para especificar certas restries de integridade, conforme veremos. A relao criada acima est inicialmente vazia. O comando insert poder ser usado para carregar os dados para uma relao. Para remover uma tabela de banco de dados SQL, usamos o comando drop table. O comando drop table remove todas as informaes sobre a relao retirada do banco de dados:

drop table <nome_tabela>; Por exemplo, eliminar a tabela EMPREGADO do esquema EMPRESA, teramos o seguinte comando:

drop table EMPREGADOS; Observe que neste caso, a chave da tabela EMPREGADO (rg) utilizada como chave estrangeira ou como chave primria composta em diversos tabelas que devem ser devidamente corrigidas. Este processo no assim to simples pois, como vemos neste caso a excluso da tabela EMPREGADO implica na alterao do projeto fsico de diversas tabelas. Isto acaba implicando na construo de uma nova base de dados. O comando alter table usado para alterar a estrutura de uma relao existente. Permite que o usurio faa a incluso de novos atributos em uma tabela. A forma geral para o comando alter table a seguinte:

57

alter

table

<tabela>

<add,drop,modify>

<coluna>

<tipo_coluna>; onde add, adiciona uma coluna; drop, remove uma coluna; e modify, modifica algo em uma tabela. No caso do comando alter table, a restrio NOT NULL no permitida pois assim que se insere um novo atributo na tabela, o valor para o mesmo em todas as tuplas da tabela recebero o valor NULL. No permitido eliminar algum atributo de uma relao j definida. Assim, caso voc desejar eliminar uma chave primria referenciada em outra tabela como chave estrangeira, ao invs de obter a eliminao do campo, obter apenas um erro.

5.10 VISES (VIEWS)


Uma view em SQL uma tabela que derivada de outras tabelas ou de outras views. Uma view no necessariamente existe em forma fsica; considerada uma tabela virtual (em contraste com as tabelas cujas tuplas so efetivamente armazenadas no banco de dados). Uma view definida usando o comando create view. Para definir uma viso, precisamos dar a ela um nome e definir a consulta que a processa. A forma geral :

create view <nomevisao> as <expresso de consulta> onde, <expresso de consulta> qualquer consulta SQL vlida. Como exemplo, considere a viso consistindo em nomes de agncias e de clientes.

Create view TOTOS_CLIENTES as (select agencia_nome,cliente_nome from CLIENTE, CONTA, AGENCIA where CLIENTE.cliente_cod = CONTA.cliente_cod and CONTA.agencia_cod = AGENCIA.agencia_cod)

58

union (select agencia_nome,cliente_nome from CLIENTE, EMPRESTIMO, AGENCIA where CLIENTE.cliente_cod = EMPRESTIMO.cliente_cod and EMPRESTIMO.agencia_cod = AGENCIA.agencia_cod) Nomes de vises podem aparecer em qualquer lugar onde nome de relao (tabela) possa aparecer. Usando a viso TOTOS_CLIENTES, podemos achar todos os clientes da agncia Princesa Isabel, escrevendo:

select cliente_nome from TOTOS_CLIENTES where agencia_nome = Princesa Isabel Uma modificao permitida atravs de uma viso apenas se a viso em questo est definida em termos de uma relao do atual banco de dados relacional. Por exemplo, selecionando tuplas de emprstimos.

Create view emprestimo_info as (select agencia_cod, emprestimo_numero, cliente_cod from EMPRESTIMO) Uma vez que a SQL permite a um nome de viso aparecer em qualquer lugar em que um nome de ralao aparece, podemos escrever:

insert into emprestimo_info values (1,40,7) Esta insero representada por uma insero na relao EMPRESTIMO, uma vez que a relao a partir do qual a viso emprestimo_info foi construda. Devemos, entretanto, ter algum valor para quantia. Este valor um valor nulo. Assim, o insert acima resulta na insero da tupla: (1,40,7,null) na relao EMPRESTIMO.

59

Da mesma forma, poderamos usar os comandos update, e delete. Para apagar uma viso, usamos o comando:

drop view <nomeviso> Por exemplo, apagar a viso emprestimo_info:

drop view emprestimo_info

5.11 RESTRIES DE INTEGRIDADE


As restries de integridade fornecem meios para assegurar que mudanas feitas no banco de dados por usurios autorizados no resultem na inconsistncia dos dados. H vrios tipos de restries de integridade que seriam cabveis a bancos de dados. Entretanto as regras de integridade so limitadas s que podem ser verificadas com um mnimo de tempo de processamento. 5.11.1 Restries de domnios Um valor de domnio pode ser associado a qualquer atributo. Restries de domnio so as mais elementares formas de restries de integridade. Elas so facilmente verificadas pelo sistema sempre que um novo item de dado incorporado ao banco de dados. O princpio que est por traz do domnio de atributos similar aos dos tipos em linguagem de programao. De fato possvel criar domnios em SQL atravs do comando create domain. A forma geral :

CREATE DOMAIN nome_do_domnio tipo_original [ [ NOT ] NULL ] [ DEFAULT valor_default ] [ CHECK ( condies ) ]

60

Por exemplo, cria o tipo_codigo como um nmero de 3 algarismos com valores permitidos de 100 a 800:

create domain tipo_codigo numeric(3) not null check ((tipo_codigo >= 100) and (tipo_codigo <= 800)) A clusula check da SQL-92 permite modos poderosos de restries de domnio. Ela pode ser usada tambm no momento de criao da tabela. Por exemplo:

create table dept (deptno integer(2) not null, dname char(12), loc char(12), check (dptono >= 100)) 5.11.2 Restries de integridade referencial Muitas vezes, desejamos assegurar que um valor que aparece em uma relao para um dado conjunto de atributos, aparea tambm para um certo conjunto de atributos em outra relao. Isto chamado de Integridade Referencial. No relacionamento da Figura 4.1, considerando K1 como sendo chave primria de E1 e K2 como sendo chave primria de E2, temos em R tuplas que sero identificadas inclusive por K1 e K2 (na forma de chaves estrangeiras). Desta forma no poder existir um elemento K1 em R que no faa parte de E1, to pouco um K2 em R que no faa parte de E2.

Figura 4.1: Exemplo de integridade referencial.

As modificaes no banco de dados podem causar violaes de integridade referencial. Consideraes devem ser feitas ao inserir, remover e atualizar tuplas. A SQL permite a especificao de chaves primrias, candidatas e estrangeiras como parte da instruo create table.

61

A clusula primary key da instruo create table inclui uma lista de atributos que compreende a chave primria; A clusula unique key da instruo create table inclui uma lista de atributos que compreende a chave candidata; A clusula foreign key da instruo create table inclui uma lista de atributos que compreende a chave estrangeira e o nome da relao referida pela chave estrangeira.

Seja o exemplo, criar as relaes cliente, agencia e conta para o esquema do banco.

Create table CLIENTE (cliente_cod integer not null, cliente_nome char(30), rua char(30), cidade char(30), primary key (cliente_cod)); Create table AGENCIA (agencia_cod integer not null, agencia_nome char(30), agencia_cidade char(30), fundos decimal (7,2), primary key (agencia_cod), check (fundos >= 0)); Create table CONTA (agencia_cod int, conta_numero char(10) not null, cliente_cod int not null, saldo decimal (7,2), primary key (cliente_cod,conta_numero), foreign key (cliente_cod) references clientes, foreign key (agencia_cod) references agencias, check (fundos >= 0));

62

Notem que os atributos chaves precisam ter a especificao de not null. Quando uma regra de integridade referencial violada, o procedimento normal rejeitar a ao que ocasionou essa violao. Entretanto possvel criar aes para modificao das tabelas associadas onde houve (ou haveria) a quebra de integridade referencial. Isto feito atravs das clusulas on delete cascade e on update cascade associadas clausula foreign key. Por exemplo:

Create table CONTA (... foreign key (agencia_cod) references agencia) on delete cascade on update cascade, ...) Neste exemplo, se a remoo de uma tupla da tabela agncia resultar na violao da regra de integridade, o problema resolvido removendo as tuplas associadas com esta agncia da tabela conta. De forma semelhante, se o cdigo de uma agncia for alterado, as contas desta agncia sero tambm alteradas. 5.11.3 Asseres Uma assero (afirmao) um predicado expressando uma condio que desejamos que o banco de dados sempre satisfaa. Quando uma assertiva criada, o sistema testa sua validade. Se a afirmao vlida, ento qualquer modificao posterior no banco de dados ser permitida apenas quando a assero no for violada. Restries de domnio e regras de integridade referencial so formas especiais de asseres. O alto custo de testar e manter afirmaes tem levado a maioria de desenvolvedores de sistemas a omitir o suporte para afirmaes gerais. A proposta geral para a linguagem SQL inclui uma construo de proposta geral chamada instruo create assertion para a expresso de restrio de integridade. Uma afirmao pertencente a uma nica relao toma a forma:

63

create assertion <nome da assero> check <predicado> Exemplo 1: Definir uma restrio de integridade que no permita saldos negativos. create assert saldo_restricao check (not exists (select * from CONTA where saldo < 0) ) Exemplo 2: S permitir a insero de saldos maiores que quantias emprestadas para aquele cliente.

create assert saldo_restricao2 check (not exists (select * from conta where saldo < (select max(quantia) from EMPRESTIMO where EMPRESTIMO.cliente_cod = CONTA.cliente_cod)))

64

6 Arquitetura de Camadas
Est na moda falar agora em arquitetura de camadas no desenvolvimento de aplicativos que acessam banco de dados. Vejamos o que isto quer dizer.

6.1 Uma camada (single-tier)


Inicialmente os aplicativos eram monolticos: no havia uma separao clara entre a linguagem de programao e o acesso ao banco de dados. Por exemplo:

XBase (dBase, Clipper,etc...) COBOL/VSAM Tabelas Paradox (Delphi)

Nestas situaes, o cdigo de acesso a banco de dados era em boa medida inseparvel do cdigo do resto do aplicativo. Para compartilhamento de dados em diversos computadores, um ou mais arquivos localizados no servidor so lidos e atualizados por vrios aplicativos ao mesmo tempo. claro que existe a necessidade de efetuar certo policiamento para evitar, por exemplo, que duas ou mais cpias do aplicativo, rodando em estaes diferentes, atualizem um mesmo dado ao mesmo tempo. Os aplicativos devem ento efetuar travamentos (locks) do todo ou de partes dos arquivos em momentos crticos para evitar perda de informaes.

6.1.1 Problemas do Single-Tier Os problemas com arquitetura tradicional so: integridade, segurana e s vezes, desempenho. Vejamos como um aplicativo tradicional funciona. O servidor de arquivos tradicional funciona simplesmente como um disco remoto, no qual as estaes podem ler e escrever dados em arquivos. A informao que circula na rede parecida com me d os primeiros 1000 bytes do arquivo empregados.dbf ou escreva estes 500 bytes no arquivo emp.ntx a partir da posio 4200. Todo acesso com tabelas DBF ou Paradox deve ser feito desta forma pelos aplicativos.

65

Para os aplicativos poderem ler e alterar os dados necessrio dar aos usurios da rede, previlgio de escrita e leitura nos diretrios de dados. Isto quer dizer que toda a segurana tem que ser implementada pelo aplicativo, pois a rede est fora da jogada. Pouca coisa impede algum de copiar os dados em disquete e lev-los embora ou de examinar campos internos com um aplicativo como o DBU ou Database Desktop trazido de casa em disquete. Durante a operao do sistema, muitas coisas ruins podem ocorrer. Uma estao pode repentinamente cair (travou, foi desligada etc.) e deixar as tabelas em um estado instvel. Uma atualizao, mesmo em um nico registro, uma operao complexa, que depende da atualizao de vrios arquivos de dados e ndices, caso, esta operao seja interrompida no meio, teremos problemas de integridade de dados ou ndices, um problema bastante conhecido dos desenvolvedores Clipper. Vamos supor que o aplicativo precisa localizar o funcionrio cujo cdigo 1000. Para fazer isto com tabelas DBF/DB, o aplicativo precisa saber onde, dentro do arquivo de dados, est o registro do funcionrio 1000. Aqui entram em cena, os ndices: o aplicativo efetua vrias leituras no arquivo de ndice (NDX/NTX/DB etc.) para saber onde est o registro procurado e s ento l os dados da tabela DBF/DB. importante notar que neste processo foram lidos dezenas, talvez centenas de kilobytes do arquivo ndice. Toda esta informao foi obrigada a circular pela rede local. No seria melhor se pudssemos simplesmente pedir me d o registro do funcionrio, cujo cdigo 1000, deixando todas as complexas operaes de busca para serem realizadas dentro do servidor? Pois exatamente o que ocorre em um servidor SQL: enviamos o comando select * from empregados where cdigo = 1000 e recebemos de volta apenas os dados. Isto muito eficiente do ponto de vista de aproveitar a capacidade da rede.

6.2 Duas Camadas (Two-tier)


Este o Client/Server tradicional. Existe uma diviso clara entre o aplicativo e o acesso ao bando de dados. Para resolver os problemas acima, foram criados os servidores de bancos de dados. A idia criar um programa (servidor de banco de dados) que o nico com permisso para acessar os arquivos de dados. Todas as consultas e atualizaes devem ser

66

pedidas para este programa. Isto resolve diversos problemas, pois o servidor de banco de dados pode:

Efetuar verificaes adicionais de segurana (validar usurios, por exemplo) Garantir que as atualizaes so realmente efetuadas completamente ou ento descartadas. Isto possvel, porque o servidor deve possuir no-break e rodar apenas softwares altamente confiveis, ao contrrio das estaes.

Existem diversos servidores de bancos de dados, alguns deles simples e que no usam a linguagem SQL como o ADS ou o BTrieve, este tipo de servidor pode ser uma boa soluo intermediria, especialmente o ADS, que capaz de usar tabelas DBF com grande confiabilidade. Normalmente, no entanto, quando se fala em servidores de bancos de dados est se falando em servidores SQL, como o Oracle, Informix, Sybase, Interbase e MS SQL Server. Todos estes produtos so bons, funcionam e fazem o que prometem.

6.3 Trs camadas (three-tier) / Mltiplas camadas (n-camadas)


Com o passar do tempo, descobriu-se alguns problemas com o Client/Server puro: a lgica de negcios encontra-se misturada com o cdigo da interface com o usurio. Foi idealizada devido ascenso da internet. Vejamos um exemplo, tomemos um sistema de controle de materiais/estoque. Cada vez que for feito um pedido de material, vrias operaes devem ser feitas:

Verificao de disponibilidade de estoque; Verificao, se, aquele usurio pode pedir determinado material e naquela quantidade; Baixa do estoque; Verificao de estoque mnimo e eventual criao de um pedido de compra; Lanamento do custo em conta adequada (centro de custo).

As operaes acima podem ser chamadas de uma transao, que implementa parte da lgica de negcios do aplicativo. Note que ela independente tanto do banco de dados como da interface com o usurio. Se a transao for executada de apenas um nico programa, no existe nenhum problema. O cdigo que implementa a transao estar dentro do executvel do aplicativo.

67

O problema que a transao acima pode ser invocada de uma srie de aplicativos, por exemplo:

Pedido interno de material de escritrio; Pedido de material para produo; Venda pela equipe interna; Venda atravs da WEB.

claro que no desejamos escrever a transao mais de uma vez. Se todos os programas acima forem escritos em uma linguagem como C, Pascal ou Basic, poderamos colocar a transao em um arquivo-fonte, cham-la de vrios lugares. Infelizmente, alguns problemas ainda restam: Caso a transao mude, devemos recopilar e redistribuir todos os aplicativos que usam aquela transao. Manter a consistncia em uma grande organizao, pode ao ser fcil;

Alguns aplicativos podem ser escritos em vrias linguagens e ferramentas, como Delphi, Visual Basic, C++ etc. Isto especialmente provvel no caso de aplicativos WEB; A transao em si pode ser bastante pesada. Roda-la em um micro relativamente lento, no cliente, com acesso a uma linha de comunicao lenta, pode no ser o ideal.

6.4 Soluo em mltiplas camadas


A soluo para os problemas acima dividir o aplicativo em trs camadas (Figura 5.1):

Interface com o usurio. Lgica de negcios (transaes). Acesso a banco de dados (servidor de banco de dados).

Este esquema uma evoluo do Client/Server tradicional. Nele, separamos as transaes da interface com o usurio. Estas transaes so colocadas fisicamente em outro executvel (normalmente uma DLL especial com extenso OCX). Este executvel pode ou no ser rodado na mesma mquina que o aplicativo cliente.

68

Nos modelos mais usualmente propostos, estes executveis contendo as transaes so escritos segundo o padro de objetos da Microsoft, o COM - Component Object Model. Utilizando o padro DCOM, eles podem ser executados em qualquer mquina da rede. Este esquema bastante novo e as ferramentas necessrias sua implantao esto em sua infncia. Para desenvolver um aplicativo verdadeiramente 3-tier hoje em dia, o trabalho adicional ainda ser muito grande. Na maioria dos casos, vale mais a pena esperar um pouco, at que as ferramentas melhorem e a alterar os aplicativos. Alm disto, alguns aplicativos simplesmente no necessitam de toda esta complexidade adicional.

Figura 5.1: Representao da arquitetura de 3 camadas.

7. Servidores SQL
Os servidores SQL esto no mercado h uns 20 anos e neste tempo eles foram adicionando diversos recursos que vo muito alm de simplesmente acessar as tabelas de dados. Um programador Clipper pode achar esta afirmao estranha, pois o que pode haver de to importante alm de acessar os dados? A resposta : muita coisa, se, voc realmente utilizar todos os recursos do servidor SQL o seu aplicativo ser mais poderoso, confivel e bem mais fcil de desenvolver.

Bibliografia
BATISTI, Jlio. SQL server 2000 Administrao e Desenvolvimento: Curso Completo. Rio de Janeiro, 2001.

69

DATE, C. J. Introduo a Sistemas de Bancos de Dados. 7. ed. Rio de Janeiro. Ed. Campus, 2000. GARCIA MOLINA, Hector. Implementao de sistemas de banco de dados. Rio de janeiro. Campus, 2001. HEUSER, Carlos Alberto. Projeto de Banco de Dados. 2. ed. Porto Alegre. SagraLuzzatto, 1999. KORTH, Henry F. SILBERSCHATZ, Abraham, Sistema de Bancos de Dados. 3. Ed. So Paulo. Makron Books, 1999. MACHADO, Felipe N. R. Banco de Dados: Projeto e Implementao. So Paulo: rica, 2004. O NEIL, Patrick. Database - - principles, programming e performance. 2.ed. USA. Morgan Kaufmann Publishers, 2001. RAMALHO, Jos Antnio. Sql Server 7 Iniciao e Referncia. So Paulo. Makron Books, 1999. RAPCHAN, Francisco. Banco de Dados. Documento on-line. Disponvel na WWW <www.geocities.com/chicorapchan > Acesso em: Agosto/2004.

70

Você também pode gostar