Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
DISCIPLINA: Banco de Dados I CURSOS: Sistema de Informao e Desenvolvimento Web PROFESSOR: Fbio Rogrio Milani
Banco de Dados I
SUMRIO
Breve Histria dos Bancos de Dados ............................................................................................... 6 1.1 1.2 Da Necessidade ao Surgimento ................................................................................................ 6 O que Banco de Dados ........................................................................................................... 8
Modelos de Dados ........................................................................................................................... 12 2.1 2.2 2.3 2.4 2.5 Banco de Dados Hierrquicos ................................................................................................. 12 Banco de Dados de Rede ......................................................................................................... 13 Banco de Dados Relacionais ................................................................................................... 14 Banco de Dados Orientados a Objetos .................................................................................... 15 Lista de Exerccios ................................................................................................................... 15
Fundamentos e Conceitos Tcnicos ................................................................................................ 16 3.1 3.1.1 3.1.2 3.1.3 3.2 3.2.1 3.2.2 3.2.3 3.2.4 3.2.5 3.3 3.3.1 3.3.2 Campos, Registros e Tabelas ................................................................................................... 16 Campos de um Registro ...................................................................................................... 16 Registros (ou Linhas) .......................................................................................................... 17 Tabelas de Dados.................................................................................................................18 ndices, Chave Primaria, Chaves Estrangeiras, Chaves Candidata e Domnios .....................18 ndices .................................................................................................................................18 Chave Primaria .................................................................................................................... 19 Chaves Candidatas ............................................................................................................. 20 Chaves Estrangeiras ........................................................................................................... 20 Domnios ............................................................................................................................ 20
Integridade dos Bancos de Dados .......................................................................................... 22 Integridade de Entidade..................................................................................................... 22 Integridade Referencial ...................................................................................................... 23
Banco de Dados I
Modelagem de Dados ..................................................................................................................... 27 4.1 4.2 4.2.1 4.2.2 4.2.3 4.3 4.4 A importncia da modelagem de dados ................................................................................. 27 Conceito de Entidade-Relacionamento ER ............................................................................ 28 Modelo Conceitual ............................................................................................................. 28 Modelo Lgico .................................................................................................................... 29 Modelo Fsico ..................................................................................................................... 30
Normalizao ................................................................................................................................. 37 5.1 5.2 5.3 5.4 5.5 5.6 5.7 5.8 5.9 Dependncia Funcional.......................................................................................................... 37 A Normalizao de Dados ...................................................................................................... 37 Anomalias de Modificaes .................................................................................................... 38 Primeira Forma Normal 1FN .............................................................................................. 38 Segunda Forma Normal 2FN .............................................................................................. 40 Terceira Forma Normal 3FN ............................................................................................... 41 Forma Normal de Boyce/Codd FNBC ................................................................................ 42 Quarta Forma Normal 4FN ................................................................................................ 43 Quinta Forma Normal 5FN................................................................................................. 44
Banco de Dados I
5.10
Roteiro de aplicao da Normalizao ................................................................................... 44 Aplicao da 1FN ............................................................................................................ 44 Aplicao da 2FN ........................................................................................................... 44 Aplicao da 3FN ........................................................................................................... 45 Forma Normal Final....................................................................................................... 45
Linguagem SQL .............................................................................................................................. 46 6.1 6.2 6.3 6.4 6.4.1 A Importncia da Linguagem SQL ......................................................................................... 46 A Linguagem SQL................................................................................................................... 46 Vantagens e Desvantagens da Linguagem SQL ..................................................................... 47 Tipos de dados........................................................................................................................ 48 CHAR(n): ........................................................................................................................... 49 VARCHAR(n) ..................................................................................................................... 49 DATE .................................................................................................................................. 49 TIME .................................................................................................................................. 49 TIMESTAMP ...................................................................................................................... 49 DECIMAL(preciso,escala): .............................................................................................. 49 NUMERIC(preciso,escala) ............................................................................................... 49
6.4.8 SMALLINT ......................................................................................................................... 49 6.4.9 6.4.10 6.4.11 6.4.12 6.5 6.5.1 6.5.2 INTEGER ........................................................................................................................... 49 FLOAT ............................................................................................................................ 49 DOUBLE PRECISION .................................................................................................... 50 BLOB .............................................................................................................................. 50
Comandos SQL ....................................................................................................................... 50 Criando o Banco de Dados ................................................................................................. 50 Criando Domnios .............................................................................................................. 50
Banco de Dados I
6.5.3 6.5.4 6.5.5 6.5.6 6.5.7 6.5.8 6.5.9 6.5.10 6.5.11 6.5.12 6.5.13 6.5.14
Criando Entidades............................................................................................................... 51 Alterando a Estrutura de uma Entidade ............................................................................ 53 Criando ndices .................................................................................................................. 54 Apagando ndices ............................................................................................................... 55 Criando Generators ............................................................................................................ 55 Inserindo dados em uma Entidade .................................................................................... 56 Alterando dados em uma Entidade .................................................................................... 56 Excluindo dados em uma Entidade ................................................................................57 Selecionando dados de uma Entidade ............................................................................57 Ordenando os dados Selecionados ................................................................................. 62 Realizando clculos com informaes selecionadas ...................................................... 62 Utilizando Funes de Agregao sobre Conjuntos ....................................................... 63 Utilizando a Clusula DISTINCT ................................................................................... 63 Agrupando Informaes Selecionadas (GROUP BY e HAVING) .................................. 64 Recuperando dados de Vrias Tabelas........................................................................... 64 Utilizando Consultas Encadeadas (Subqueries) ............................................................ 66
Banco de Dados I
Figura 1 - O Homem comeou a fazer registros de informaes em pinturas e inscries nas paredes
Figura 2 - O papel e os livros so ainda hoje o meio mais comum de registrar informaes
J nos ltimos sculos, a forma mais comum de registro de informaes tem sido o papel. graas a ele hoje temos conhecimento do que se passou na historia humana, podemos expor nossas idias ou escrever um belo romance, foi no papel tambm que o homem armazenou seus primeiros dados. Nossa certido de nascimento ou a enciclopdia que se encontra na estante da sala so exemplos bastante concretos. Apesar de sua indiscutvel utilidade, o registro de informaes em papel tem alguns inconvenientes. Tomemos como exemplo uma loja de produtos eletrnicos, que deve ter o registro de seus funcionrios, de seus clientes e de seus fornecedores. necessrio tambm ter um controle detalhado das contas dessa loja e do estoque dos produtos que so vendidos. Todas essas informaes demandam uma forma de armazenamento e recuperao muito prtica, eficiente e confivel. Podemos imaginar quo trabalhoso seria o fechamento da folha de pagamento dos funcionrios; ou a preparao de uma lista dos clientes em atraso com o pagamento. Certamente esse trabalho levaria mais de um dia para ser concretizado e haveria necessidade de pelo menos dois funcionrios dedicados exclusivamente a cada tarefa. Uma primeira forma de registro de informaes da era computacional foi fita de papel perfurada, posteriormente sucedida pelo carto perfurado. Esses dois sistemas foram idealizados por Hermam Hollerith, o fundador de uma empresa que, em 1924, teve o nome mudado para International Business Machines (IBM). Com os cartes ele pode registrar os dados da populao americana em 1889.
Banco de Dados I
Praticidade, eficincia, rapidez na consulta e confiabilidade das informaes foram os fatores principais que levaram ao desenvolvimento dos bancos de dados computadorizados. Mas possvel encontrar diversas formas de banco de dados no computadorizados em nosso dia-a-dia. Como exemplo pode citar um arquivo de ao, ainda existente em muitos escritrios, que tem por finalidade guardar fichas, pastas e demais documentos em suas gavetas. Com a inveno dos computadores as coisas ficaram um pouco mais fceis. Essa maravilha tecnolgica permite que qualquer informao seja armazenada e recuperada de maneira rpida e com grande facilidade. Programas de banco de dados talvez tenham sido os primeiros a serem desenvolvidos para computadores. Surgiram inicialmente para equipamentos de grande porte, nos anos 1960, como uma evoluo dos sistemas aplicativos que trabalhavam com arquivos em disco. Essa arquitetura tinha vrios inconvenientes, sendo os cinco principais: No havia controle de acesso concorrente de vrios usurios. No era possvel executar mais de um processo ao mesmo tempo num arquivo de dados. A definio da estrutura do arquivo se encontrava inserida no prprio cdigo do aplicativo, o que significa que os programas controlavam as tarefas de gravao e leitura dos dados no arquivo.Isso ocasionava uma dependncia entre o banco de dados e a aplicao, tornando muito complexo o processo de manuteno de todo o sistema. Inconsistncia, redundncia, dificuldade de acesso e isolamento de dados. Problemas relativos segurana nos dados.
Esses sistemas de processamento de arquivos possuam suas estruturas de dados, definidas dentro do cdigo do aplicativo, dificultando compartilhar um mesmo arquivo entre vrios programas, uma vez que todo o cdigo de definio da estrutura do arquivo de dados deveria ser copiado/duplicado entre os programas. Esse fator leva a outro problema: se fosse necessrio alterar a estrutura do arquivo, como a incluso de um novo campo, cada programa que fazia uso do arquivo de dados deveria ser modificada. O acesso ao arquivo era efetuado de forma direta, como mostra a figura abaixo.
Banco de Dados I
Com um sistema de banco de dados, os aplicativos no tm nenhum conhecimento dos detalhes relativos aos mtodos de gravao e leitura fsica dos dados no arquivo. O que eles fazem simplesmente se comunicar com o software de gerenciamento para recuperar ou armazenar os registros, dessa forma diversos programas poderiam acessar um mesmo banco de dados, e qualquer alterao nele no implicava necessariamente em modificaes nos aplicativos, a figura abaixo mostra como esse processo ocorre.
Assim os sistemas gerenciadores ofereciam (ainda oferecem) uma produtividade maior no desenvolvimento e manuteno tanto dos softwares aplicativos quanto dos bancos de dados. Por outro lado, o trabalho dos analistas/projetistas, programadores e mesmo dos usurios finais tornouse menos artesanal e a qualidade dos sistemas tambm alcanou melhor qualidade. A principal vantagem no uso de um sistema de gerenciamento de banco de dados o estado coerente dos dados que se encontram armazenados no banco. Isso faz com que as informaes extradas dele sejam confiveis e de grande credibilidade. Com o advento dos microcomputadores, as empresas produtoras de softwares viram nesse segmento um timo e lucrativo mercado. Hoje encontramos uma grande variedade de bancos de dados, para as mais diversas plataformas de hardware e sistemas operacionais. Sem duvida um dos softwares mais utilizados em computadores. Hoje os bancos de dados so um componente essencial em nossas vidas dirias, uma vez que podemos encontrar as mais variadas atividades que de uma forma ou de outra possuem alguma interao com um banco de dados. A disseminao do uso de computadores, tanto nas empresas quanto em casa, teve com um forte propulsor a tecnologia de banco de dados, ao ponto de eles terem assumido um papel importantssimo em qualquer rea que utiliza recursos informatizados.
Banco de Dados I
em papel, num quadro de aviso ou no disco rgido do computador. Para um melhor entendimento da diferena entre os dois termos, considere o quadro a seguir: Informao Est muito quente hoje Dado A temperatura hoje de 38 graus Celsius
Devemos lembrar que um computador armazena e processam dados e no informaes. Falando de forma bastante genrica, um banco de dados um conjunto de dados com um significado implcito, com essa definio bem simplria, pode-se concluir que uma coleo de palavras e nmeros, como os contidos nesta apostila, forma um banco de dados. Mas o uso do termo banco de dados mais restrito, em virtude das seguintes caractersticas: Um banco de dados representa uma poro do mundo real, o qual chamamos de minimundo ou universo de discurso. Qualquer alterao nesse minimundo deve ser refletida no banco de dados. Um banco de dados um conjunto lgico e ordenado de dados que possuem algum significado, e no uma coleo aleatria. Um banco de dados construdo e povoado com dados que tem um determinado objetivo, com usurios e aplicaes desenvolvidas para manipul-los.
Para termos um banco de dados, so necessrios trs ingredientes: uma fonte de informao da qual derivamos os dados, uma interao com o mundo real e um publico que demonstra interesse nos dados contidos no banco. Um banco de dados pode ser armazenado em um ou mais arquivos gravados num dispositivo de armazenamento, com disco rgido, cartes de memria Flash, DVD e etc. O meio de armazenamento mais comumente utilizado o disco rgido, e os demais so mais empregados como forma de backup de arquivos. Se um banco de dados um conjunto de dados relacionados, um sistema de gerenciamento de banco de dados (SGBD) uma coleo de ferramentas e programas que permitem aos usurios a criao e manuteno do prprio banco de dados. Dessa forma podemos considerar o SGBD como um sofisticado software destinado a definio, construo e manipulao. Esses trs termos podem ser mais bem definidos da seguinte maneira: Definio Construo Manipulao Especificao dos tipos de dados, das estruturas das tabelas e das restries que devem ser impostas aos dados que sero armazenados. Processo de acumular os dados num meio de armazenamento totalmente controlado pelo SGBD Operao com atualizao do banco de dados (incluso, excluso e alterao de registro) e extrao de dados, como consultas e relatrios impressos.
Um SGBD deve ainda permitir que bancos de dados sejam excludos ou que sua estrutura seja alterada, como adio de novas tabelas/arquivos.
Banco de Dados I
10
Alguns sistemas de banco de dados so genricos, ou seja, permitem que praticamente qualquer tipo de dado seja armazenado, uma vez que o prprio usurio define a estrutura do arquivo. Este o caso de programas como Interbase, MySQL, Oracle, etc. Eles so mais flexveis e poderosos, capazes de executar tarefas avanadas de gerenciamento. A maioria possui uma linguagem prpria, ou utiliza a j consagrada SQL, que permite ao usurio criar rotinas especificas ou mesmo aplicativos completos. No entanto, todos esses recursos tm seu preo, e bancos de dados genricos possuem um desempenho inferior ao de sistemas especializados, alem de consumirem mais memria RAM e espao em disco. Como j mencionado no pargrafo anterior, temos tambm sistemas de banco de dados especializado, como os empregados em aplicaes de geoprocessamento (GIS), que trabalham com informaes de formato predefinido. Esses sistemas rodam mais rapidamente que os bancos genricos, em virtude de no oferecerem tantos recursos extras aos usurios. Mas justamente esse fator que restringe sua aplicao a determinadas reas. Faamos uma comparao entre um banco de dados para computador e um pequeno fichrio, daqueles que podem ser vistos em alguns escritrios ou consultrio mdicos. Cada ficha possui diversas colunas ou espaos em brancos, onde so escritas as informaes desejadas. Um banco de dados de computador possui campos que esto agrupados em registros - que representam as fichas. As fichas esto acondicionadas no fichrio, enquanto no computador os registros esto agrupados em arquivos magnticos, gravados em disco. O fichrio em si pode ser comparado ao disco rgido do computador.
Seja qual for o porte do computador, os SGBDs implementados nessas maquinas possuem grandes semelhanas entre si. Algumas caractersticas distinguem um banco de dados de um processamento de arquivos. Como mencionado no tpico anterior, no ultimo sistema cada programa aplicativo possui embutido em seu cdigo-fonte a implementao da estrutura dos arquivos de dados. Se houver mais de um programa que acesse o mesmo arquivo, a descrio dessa estrutura deve ser inserida nele. Exemplos concretos so aplicaes escritas em Pascal, C/C++ ou COBOL. No primeiro as estruturas de registros definem os arquivos do banco de dados. J um banco de dados possui um repositrio no qual as estruturas dos arquivos e os prprios dados so armazenados, no havendo, portanto, redundncia de definies entre aplicaes que fazem uso do mesmo banco. Essa caracterstica denominada Independncia de Programas e Dados, que permitem que qualquer alterao efetuada no banco de dados no implique necessariamente em modificaes nos programas aplicativos. Do outro lado, se o aplicativo for modificado, o banco de dados pode permanecer inalterado.
Banco de Dados I
11
Essa independncia proporcionada por uma caracterstica denominada Abstrao de Dados. Por meio dela o usurio apenas tem acesso a uma representao conceitual dos dados, sem a necessidade de um conhecimento de detalhes relacionados implementao das operaes ou aos modos com os dados so armazenados. Um banco de dados, principalmente os que suportam vrios usurios, precisa ser capaz de gerenciar mltiplas vises dos dados. Essas vises so subconjuntos de dados temporrios, que existem somente durante uma determinada operao, com um comando de consulta SQL. E j que estamos falando em SGBD multiusurio devemos destacar a necessidade de um controle de concorrncia. Para entender melhor o que vem a ser essa caracterstica, vejamos dois exemplos: No primeiro exemplo vamos imaginar um sistema de gesto de uma loja. possvel ter vrios vendedores acessando ao mesmo tempo o banco de dados para efetuar as vendas. O SGBD deve assegurar que as vendas atualizam corretamente o estoque dos produtos, mesmo que haja acesso simultneo ao produto por mais de um usurio. No segundo exemplo vamos supor uma aplicao para reserva de apartamentos num hotel. Se um atendente estiver no momento com um registro de apartamento acessado, os demais atendentes no podero ter acesso a ele, uma vez que se encontra bloqueado. Esse bloqueio somente ser liberado quando o usurio no estiver mais no registro. Ainda hoje h um mito entre alguns usurios, mesmo os mais avanados, de que trabalhar com banco de dados muito complicado. Realmente, em tempos atrs era uma tarefa um tanto rdua, mas atualmente os softwares de gerenciamento de banco de dados so altamente amigveis e de fcil manuseio. Agora possvel criar uma aplicao inteira, com base de dados, formulrio de entrada, relatrios e tudo mais, sem saber programao, como o caso do Microsoft Access.
Banco de Dados I
12
2 Modelos de Dados
Existem alguns critrios que podemos utilizar na classificao de bancos de dados. O primeiro deles o modelo de dados em que se baseia o SGBD. Atualmente h dois modelos utilizados comercialmente: modelo de dados relacional e o modelo de dados de objetos. Ainda hoje podemos encontrar aplicaes antigas que usam bancos de dados baseados no modelo de dados hierrquico e no modelo de dados de rede.
Num diagrama hierrquico, os tipos de registros so apresentados como caixas retangulares e os relacionamentos so exibidos como linhas ligando os tipos (pai e filho), numa organizao estrutural semelhante a uma rvore.
Fornecedor
Produto
Contas a Pagar
Podemos perceber que o esquema hierrquico estruturado em arvore, onde o tipo de registro corresponde a um n. Sendo assim, temos ns pai e ns filhos. Nesse tipo de banco de dados devemos nos referir a um relacionamento pai-filho com um par ordenado, no qual temos o tipo de registro PAI e o tipo de registro FILHO, como nos exemplos (Fornecedor, Produtos) e (Fornecedor, Contas a Pagar). Ele apresenta ainda as seguintes propriedades: Um tipo de registro que no possui um tipo de registro pai denominado de raiz. Com exceo do tipo de registro raiz, todos os demais correspondem a tipos de registro filhos dentro de um nico tipo de relacionamento. Um tipo de registro pai pode aparecer em qualquer numero de relacionamento.
Banco de Dados I
13
Um tipo de registro filho que no possui descendentes (no participa com tipo de registro pai num relacionamento) denominado folha do esquema hierrquico.
Quando um tipo de registro pai participa de mais de um relacionamento, os tipos de registro filhos correspondentes so ordenados, por conveno, da esquerda para a direita. O primeiro sistema de banco de dados hierrquico, e que ainda utilizado num grande numero de organizaes o IMS (Sistema de Gerenciamento de Informaes), desenvolvido pela IBM e pala Rockwell International no fim da dcada de 60, com verses que podem ser executadas em vrios sistemas operacionais da IBM, todos para ambientes de grande porte.
Os comandos de manipulao de registros devem ser incorporados a uma linguagem de programao hospedeira. As duas estruturas fundamentais de um banco de dados de rede so os registros (records) e os conjuntos (sets). Os registros contem dados relacionados e so agrupados em tipos de registros que armazenam os mesmo tipos de informaes (como ocorre no sistema hierrquico). Os conjuntos so a forma de representao dos relacionamentos entre os diversos tipos de registros, na forma 1:N (um para muitos). Esse relacionamento representado de forma grfica como uma seta. Um tipo de conjunto possui em sua definio trs componentes: nome do tipo de conjunto, tipo de registro proprietrio e tipo de registro membro.
Tipo de conjunto Tipo de registro proprietrio Tipo de registro membro DEF_FUNC DEPARTAMENTO FUNCIONARIO
Departamento
DEP_FUNC
Funcionrio
Cada ocorrncia num tipo de conjunto relaciona um registro do tipo de registro proprietrio com um ou mais registros (ou mesmo nenhum) do tipo de registro membro. Isso significa que uma ocorrncia pode ser identificada por um registro proprietrio ou por qualquer registro membro. Tecnicamente podemos dizer que o registro proprietrio possui um ponteiro que aponta para um registro membro. Esse registro, que o primeiro do conjunto, aponta para outros que tambm se relacionam com o mesmo registro proprietrio, como numa lista encadeada, o ultimo registro aponta para o registro proprietrio.
Banco de Dados I
14
Banco de Dados I
15
CodigoCategoria
CodigoFornecedor
NomeProduto
Estoque
5 3 2
NomeFornecedor
Endereco
Bairro
Cidade
Estado
Telefone
SP SP SP
Banco de Dados I
16
3.1.1 Campos de um Registro O campo a menor unidade destinada ao armazenamento de valores existente em um arquivo ou tabela de um banco de dados e pode ser referenciado por um programa aplicativo. Isso significa que os dados armazenados so separados em pequenos fragmentos. Cada campo somente pode conter um tipo de dado. Tomemos como exemplo a seguinte informao:
Brinquedos & Jogos Educar Av. das Naes, 280 Jd. Amrica Atibaia SP
Listada dessa forma, no faz muito sentido do ponto de vista de um banco de dados. Embora fornea uma informao completa sobre uma empresa (no caso um fabricante de brinquedos), para ser armazenada num banco de dados preciso separ-la em diversas partes. Podemos assumir que cada linha uma frao da informao como um todo. Imagine-a distribuda numa folha quadriculada em que cada item/linha ocupa uma coluna (como nas planilhas eletrnicas). Campos
SP SP SP
Durante a estruturao do banco de dados, uma das principais tarefas do projetista do sistema definir os campos que comporo as tabelas. Cada campo recebe um nome de identificao, a especificao do tipo de dado que ser capaz de armazenar e o tamanho para armazenamento, entre outras informaes. Os tipos de dados bsicos que podemos atribuir aos campos so: caractere, numrico (com ou sem casas decimais), data, hora e lgico (valores do tipo verdadeiro ou falso). Nem todos os sistemas de
Banco de Dados I
17
banco de dados suportam o tipo de dado lgico e alguns possuem um tipo especial denominando auto-incremento. Com esse tipo o valor do campo (que numrico sem casa decimal) incrementado pelo prprio sistema quando um novo registro adicionado a tabela. Isso muito til quando precisamos gerar um valor seqencial nico para cada registro. Geralmente um campo desse tipo usado na definio de uma chave primaria. H sistemas de banco de dados, como o caso dos servidores SQL, que permitem a criao de campos calculados. Esse tipo de campo fornecido por uma expresso matemtica, que envolve outros campos da prpria tabela ou mesmo constantes numricas. Seu valor o resultado obtido por meio dessa expresso. Por exemplo, suponhamos que voc tenha uma tabela de pedidos de cliente e nessa tabela constem campos para entrada da quantidade do produto e o preo unitrio. O preo total do item poderia simplesmente ser obtido multiplicando o valor do campo de quantidade pelo valor do campo de preo unitrio. Em termos simples, a especificao do campo seria parecida com a seguinte instruo fictcia:
3.1.2 Registros (ou Linhas) Um registro o conjunto de campos valorizados de uma tabela. a unidade bsica para o armazenamento e recuperao de dados e que identifica a entrada de um nico item de informao em particular numa tabela do banco de dados. So tambm chamados de tuplas ou nuplas. Numa tabela cujos registros so formados por cinco campos, cada registro denominado de 5-upla (ou quntupla). Tambm podemos chamar os registros de linhas de uma tabela, pois durante sua visualizao os dados dos campos so todos listados numa nica linha. Se uma tabela de cadastro de clientes possuir 20.000 linhas ou registros, ento ela estar armazenado dados de 20.000 clientes. Os registros de uma tabela de dados so do mesmo tipo, ou seja, permitem o armazenamento dos mesmos tipos de dados. No entanto, seus campos podem ser de tipos e tamanho varivel, o tamanho do prprio registro pode tambm variar conforme os dados que se encontram armazenados nele. Por exemplo, numa tabela de cadastro de produtos, os registros so utilizados
Banco de Dados I
18
para guardar os dados referentes a produtos, no sendo possvel armazenar qualquer outro tipo de dado (como de clientes ou de funcionrios). durante a estruturao das tabelas do banco de dados que definimos o formato (ou layout) dos registros. Como j mencionado, esse formato de registro envolve a disposio dos seus campos com nomes e atributos. Voltando ao exemplo do tpico anterior, cada linha da tabela representa um registro. Assim a tabela como um todo se resume a um agrupamento de linhas (registros) que so divididos em colunas (campos).
3.1.3 Tabelas de Dados Uma tabela nada mais do que um conjunto ordenado de registros/linhas. Cada registro possui o mesmo numero de colunas (campos). Um banco de dados pode ser formado por uma ou mais tabelas, e cada uma deve ser definida de tal forma que somente possa conter um tipo de informao. Por exemplo, uma tabela para armazenar dados dos clientes, uma para os fornecedores, uma para os produtos, etc. Falando em termos de modelagem de dados, elas representam as entidades do modelo conceitual. Alguns sistemas de banco de dados, como MySQL, criam um arquivo para cada tabela. Outros, como o Interbase, possuem um nico arquivo, dentro do qual esto todas as tabelas (alem de outros recursos, como rotinas autocontidas e ndices).
Cada tabela deve ser identificada por um nome nico dentro do banco de dados. So as tabelas que possuem toda a estrutura/composio dos registros, como nomes, tipos de dados e tamanhos. Uma aplicao de banco de dados somente pode acessar um determinado registro se referenciar a tabela na qual ele esta definido. Na linguagem SQL tambm necessrio especificar o nome da tabela a ser utilizada num comando de consulta ou atualizao de dados. As aplicaes normalmente utilizam varias tabelas do banco de dados para consolidar e retornar informaes nas quais o usurio tem interesse (como na gerao de um relatrio de vendas no ms ou o boletim escolar dos alunos).
Banco de Dados I
19
Alguns sistemas de bancos de dados (notadamente os servidores SQL) fazem uso de ndices automaticamente para agilizar as consultas (quando um ndice tiver sido criado para o campo envolvido no comando de consulta). o que se costuma chamar de plano de consulta. Uma caracterstica interessante que diversos sistemas oferecem com relao aos ndices a capacidade de ordenao dos registros de forma crescente ou decrescente. Outro recurso muito til a possibilidade de definir ndices nicos, ou seja, que no permitem duplicidade de dados. Esse tipo de ndice independente da chave primaria. Vamos supor como exemplo uma tabela de cadastro de fornecedores, em que cada registro possui como chave primaria o cdigo do fornecedor. Podemos definir um ndice com base no campo CNPJ que no permite duplicidade, evitando dessa forma que um mesmo fornecedor seja cadastrado duas vezes. Para localizar um registro utilizando ndice, o banco de dados efetua uma pesquisa binria no ndice e ao encontrar um ponteiro para o valor a ser pesquisado, posiciona no registro correspondente da tabela.
3.2.2 Chave Primaria Uma chave primaria um atributo (campo) da tabela que permite a identificao de forma nica dos seus registros. Ela tem por funo ainda aplicar uma ordenao automtica aos registros, uma vez que seu funcionamento similar ao de um ndice. Isso significa que a ordem fsica dos registros determinada por ela. Como ocorre com os ndices, uma chave primaria pode ser formada por um ou mais campos. No ultimo caso, elas so chamadas de chaves compostas.
Uma chave primaria evita que tenhamos registros duplicados, ou seja, no possvel ter dois ou mais registros contendo os mesmos valores nos campos que a compem. As chaves primrias permitem que uma pesquisa seja realizada com maior velocidade. Suponhamos que se deseja encontrar o registro em um banco de dados de clientes, cujo campo RG seja 10.101.101. Se tivermos definido esse campo como chave primaria, a pesquisa dar-se- com maior rapidez. H basicamente dois critrios importantssimos na hora de escolher os campos que vo definir uma chave primaria. Em primeiro lugar devemos escolher campos cujo tamanho no seja muito grande, assim as atualizaes e consultas da chave primaria sero mais rpida. Pelo mesmo motivo, quando tivermos chave composta, devemos procurar incluir o menor numero possvel de campos. O segundo critrio esta relacionado com a capacidade de alterao do valor armazenado no campo da chave primaria. Esse valor deve ser estvel, ou seja, no pode ser modificado (pelo menos de forma to freqente). Isso se deve ao fato de os bancos de dados relacionais utilizarem a chave primaria no relacionamento de uma tabela com outras, como veremos a seguir. H situaes, no entanto, que mesmo sendo parte de chave primaria, um campo deve permitir que seu valor seja alterado. Vamos supor o caso de uma tabela de cadastro de produtos, na qual o campo de cdigo do produto utilizado para armazenar o cdigo de barras impresso na embalagem. Esse campo deve estar habilitado para permitir modificao, uma vez que o fabricante pode, por um motivo qualquer, alterar o cdigo de barras de um produto que j se encontrava em fabricao. Para que isso no afete de forma desastrosa toda a integridade dos dados do banco, os sistemas relacionais oferecem recursos para atualizao em cadeia dos valores nas tabelas envolvidas nos relacionamentos. Isso, no entanto, acarreta uma ligeira queda no desempenho do sistema, principalmente quando existirem muitos registros a serem atualizados.
Banco de Dados I
20
Preferencialmente, para campos de chaves primarias, devemos utilizar valores que so calculados de forma seqencial pelo prprio sistema, seja por meio de recursos SGDB ou por rotinas do aplicativo que faz uso do banco de dados. Campos que formam chaves primrias so de preenchimento obrigatrio. 3.2.3 Chaves Candidatas Chaves candidatas so campos que poderiam ser utilizados como chaves primrias, mas no so. Por exemplo, numa tabela de cadastro de clientes, a chave primaria definida como o campo de cdigo do cliente, cujo valor seqencial e gerado automaticamente pelo prprio sistema. No entanto, h o campo RG do cliente que, por ser de valor nico (no deve repetir dentro do banco de dados), tambm poderia ser utilizado como chave primria ( uma chave candidata). No entanto, devido ao fato de ser um campo com tamanho demasiadamente grande, e principalmente por no ser ideal para identificar unicamente um cliente, uma vez que no Brasil uma pessoa pode ter mais de um RG, em estados diferentes, ele no utilizado na definio da chave primaria. Sendo prefervel um campo de codificao para cada registro de cliente. um campo de preenchimento obrigatrio tambm. 3.2.4 Chaves Estrangeiras As chaves estrangeiras permitem que os registros de uma tabela sejam relacionados com os de outra tabela pela sua chave primaria. Para exemplificar, vamos supor duas tabelas com as seguintes caractersticas:
Uma tabela de cadastro de categorias de produtos que possua um campo de cdigo de categoria (CodigoCategoria) que chave primria. Uma tabela de cadastro de produtos que possui um campo de cdigo da categoria a que pertence (CodigoCategoria).
Podemos notar que o campo denominado CodigoCategoria existe nas duas tabelas, e na de cadastro de produtos no a chave primria. Como ela utilizada para criar um relacionamento com a tabela de categorias, em que o campo chave primria, dizemos que ela chave estrangeira. Nesse caso, o campo CodigoCategoria chave primria na tabela Categorias e chave estrangeira na tabela Produtos. O vinculo entre as duas tabelas efetuado por meio desses dois campos. Da mesma maneira, o campo CodigoFornecedor chave primria em Fornecedores e chave estrangeira em Produtos. Um outro uso muito comum de chave estrangeira, alm da ligao entre tabelas, no fornecimento de valores de outra tabela (a que contem a chave primaria). Por exemplo, poderamos utilizar uma caixa de listagem para escolha da categoria de produtos numa tela de cadastro de produtos, evitando assim que o usurio entre com informaes indevidas, como cdigo de categoria inexistente. Apesar de normalmente o nome do campo (ou conjunto de campos) que define a chave primria e a chave estrangeira ser o mesmo, perfeitamente possvel nome-los de forma distinta. 3.2.5 Domnios O domnio um tipo de conceito ate certo ponto difcil de demonstrar. A melhor maneira de entend-lo com exemplos concretos. Os domnios se prestam a dois objetivos bsicos: definio
Banco de Dados I
21
de tipos de dados e especificao de valores que podem ser aceitos pelos campos. Nem todos os sistemas de bancos de dados suportam a criao e uso de domnios. Em geral, todos os sistemas padro SQL do suporte total. Uma das maiores vantagens de utilizar domnios na construo de banco de dados o fato de podermos padronizar os atributos de campos que existem em varias tabelas do banco de dados. Vamos supor que precisamos definir cinco campos para armazenar o endereo, bairro, cidade, estado e CEP. O formato desses campos apresentado na seguinte tabela: Campo Endereco Bairro Cidade Estado CEP Tipo de dado Caractere Caractere Caractere Caractere Caractere Tamanho 50 caracteres 35 caracteres 35 caracteres 2 caracteres 9 caracteres
Apesar de a informao do CEP ser composta apenas por nmeros, devemos definir o campo como sendo caractere para que seja possvel armazenar zeros apresentados a esquerda e o trao de separao, como, por exemplo, 00123-456.
Continuando com o exemplo, esses campos sero criados em trs tabelas: cadastro de funcionrios, cadastro de clientes, cadastro de fornecedores. A probabilidade de definirmos um ou mais campos com tamanho diferente grande. Com os domnios essa probabilidade de erro pode ser evitada. Para isso devemos cri-los, especificando os atributos necessrios a cada campo, e depois empreg-los, especificando os atributos necessrios a cada campo, e depois empreg-los na definio dos campos. Vamos utilizar uma linguagem imaginaria para demonstrar a criao de domnios para esse campo:
DM_ENDERECO COM TIPO CARACTERE E TAMANHO 50; DM_BAIRRO COM TIPO CARACTERE E TAMANHO 35; DM_CIDADE COM TIPO CARACTERE E TAMANHO 35; DM_ESTADO COM TIPO CARACTERE E TAMANHO 2; DM_CEP COM TIPO CARACTERE E TAMANHO 9;
Na criao da tabela de dados, devemos fazer referencia a esses domnios da seguinte maneira (linguagem imaginria):
CRIAR TABELA FUNCIONARIOS COM FORMATO (CAMPO ENDERECO COM ATRIBUTO DM_ENDERECO, CAMPO BAIRRO COM ATRIBUTO DM_BAIRRO, CAMPO CIDADE COM ATRIBUTO DM_CIDADE, CAMPO ESTADO COM ATRIBUTO DM_ESTADO, CAMPO CEP COM ATRIBUTO DM_CEP)
O mesmo mtodo seria empregado para as outras duas tabelas de dados. Com isso no h como esquecermos as propriedades para um determinado campo, com, por exemplo, seu tamanho em caracteres.
Banco de Dados I
22
O segundo uso dos domnios, como j mencionado, na especificao de valores limites ou faixa de dados validos. Por exemplo, podemos criar um domnio para no permitir que o usurio tente entrar com um valor menor ou igual a zero no campo de salrio do funcionrio. Utilizando nossa linguagem imaginaria, teramos:
3.3.1 Integridade de Entidade A regra de integridade define que as chaves primrias de uma tabela no podem ser nulas, ou seja, sempre devem conter um valor. No caso de chaves primrias compostas (formadas por mais de um campo), todos os campos que a formam devem ser preenchidos. Essa exigncia se deve ao fato de a chave primria ser um atributo da tabela que identifica um registro nico, alem de determinar a ordem fsica do registro e tambm ser utilizada no relacionamento com outras tabelas. Devemos ressaltar que um valor nulo diferente de 0 ou um espao em branco. Com campo do tipo caractere, um espao em branco considerado um valor valido, enquanto um valor nulo seria realmente a ausncia de qualquer caractere (mesmo espaos). J com campos do tipo numrico, seja inteiro ou decimal, o valor 0 tambm valido. O valor nulo para esse campo tambm seria a ausncia de qualquer dado (mesmo o 0).
Banco de Dados I
23
3.3.2 Integridade Referencial De forma bastante resumida, podemos dizer que a regra de integridade referencial estabelece restries ou bloqueios de algumas operaes (notadamente excluso ou alterao) nos dados de campos das chaves primarias utilizadas no relacionamento de uma tabela com outra. Com um exemplo pratico fica mais fcil de entender. Vamos pegar o exemplo de tabelas de Categorias e Produtos, mostradas anteriormente no tpico sobre chaves estrangeiras. A titulo de recordao, temos um campo denominado CodigoCategoria que chave primaria da tabela Categorias e chave estrangeira na tabela Produtos. A categoria cujo cdigo 00001 se relaciona com um ou mais produtos, como, por exemplo, o de cdigo 123456. Se o usurio, acidentalmente, excluir o registro da categoria 00001, os produtos que pertencem a essa categoria ficaro rfos. Teramos o mesmo resultado se o cdigo da categoria fosse alterado. Nesse caso, alem de registro rfo na tabela de produtos, teramos tambm registros pais sem nenhum vinculo na tabela de categorias. O que a integridade referencial faz proibir esse tipo de inconsistncia, impedindo assim que a relao entre a chave primaria e a chave estrangeira seja quebrada. Quando o prprio sistema de banco de dados se encarrega de mant-las, o desenvolvedor novamente se v livre da codificao de rotinas que devem ser includas em seus aplicativos para executar essas tarefas de vigilncia. O sistema tambm deve permitir que o desenvolvedor especifique a forma de tratamento dessas ocorrncias, escolhendo uma das duas opes: proibio ou execuo em cascata. A proibio de uma operao no permite que o usurio exclua ou altere os dados de uma chave primria que chave estrangeira em outra tabela (a menos que essa ultima no possua nenhum registro relacionado com a tabela da chave primaria). J na execuo em cascata, quando um usurio efetua uma excluso ou alterao, essa ao refletida automaticamente nas tabelas relacionadas. No exemplo citado anteriormente, os produtos que pertencem categoria 00001 sero excludos junto com a prpria categoria. Se houvesse uma alterao no cdigo da categoria, ela seria passada aos registros correspondentes na tabela de produtos. A maioria dos bancos de dados padro SQL da suporte a integridade referencial, permitindo que sejam criadas chaves estrangeiras e restries (chamadas CONSTRAINT) para especificar as aes a serem desempenhadas para operaes de excluso e atualizao de dados. 3.3.3 Integridade de Domnios A integridade de domnios estabelece restries e regras na definio dos domnios em si, em vez de diretamente nos campos. Isso ajuda a economizar tempo e trabalho, pois podemos ter vrios campos que so formatados a partir de domnios, e com a regra de integridade definida neles, esses campos automaticamente herdam essas restries. Este o caso do domnio definido como exemplo anteriormente (em nossa linguagem fictcia):
Banco de Dados I
24
restringir o intervalo aceito entre 400 e 2500. Devemos ressaltar que a integridade de campos nunca deve conflitar com a de domnio. Dentro da integridade de campos tambm podemos mencionar a validao de dados. Essa regra possibilita que o prprio sistema de banco de dados faca uma verificao quanto aos valores entrados pelo usurio serem validos ou no. No exemplo de cadastro de funcionrios, cada funcionrio tem um cargo, e seu salrio definido em funo do cargo que ocupa. Sendo assim, mesmo que o valor dessa informao esteja dentro da regra definida para o campo (no caso entre R$ 400,00 e R$ 2.500,00), deve ser efetuada uma validao para certificar-se de que o valor fornecido esta dentro do padro para o cargo do funcionrio. Essa validao, sendo efetuada pelo prprio ambiente, tambm isola qualquer aplicativo que faca uso do banco de dados. Um terceiro tipo de integridade de campo diz respeito ao formato dos dados. Por exemplo, para o campo que armazena o numero de CNPJ, as informaes devem ter o formato XX.XXX.XXX/XXXXXX. Se pudermos especificar esse formato para entrada de dados do campo diretamente no sistema, no precisaremos nos preocupar em codificar o aplicativo pra fazer alguma converso. O Microsoft Access permite que sejam especificadas mascaras de entrada para cada campo do banco de dados. H ainda regras de integridade que podem ser definidas atravs de rotinas criadas pelo desenvolvedor, como o caso das Stored Procedures e Triggers do padro SQL.
As doze regras estabelecidas por Edgard F. Codd, em 1985, por meio das quais podemos determinar o quanto um banco de dados relacional ou no. Uma vez que elas podem tornar-se uma barreira difcil de transpor, a grande maioria no proporciona suporte a todas elas. Vejamos o que essas regras definem. 1. Regra das informaes em tabelas As informaes a serem armazenadas no banco de dados devem ser apresentadas como relaes (tabelas formadas por linha e colunas) e o vinculo de dados entre as tabelas deve ser estabelecido por meio de valores de campos comuns. Isso se aplica tanto aos dados quanto aos metadados (que so descries dos objetos do banco de dados). 2. Regra de acesso garantido Para que o usurio possa acessar as informaes contidas no banco de dados, o mtodo de referencia deve ser o nome da tabela, o valor da chave primaria e o nome do campo/coluna. No entanto, a ordem de apresentao dos dados no tem importncia no contexto. 3. Regra de tratamento sistemtico de valores nulos O sistema de banco de dados deve ter capacidade para tratar valores que no so fornecidos pelos usurios de maneira que permita a distino de dados reais. Por exemplo, em um campo de armazenamento de dados numricos, podemos ter valores validos, o valor 0 e valores nulos. O termo valor nulo na verdade se refere a falta de informao. Se fossemos efetuar clculos como esse campo, como seriam trados os valores nulos e o valor 0? No caso de valores nulos, mais fcil definirmos uma regra, pois simplesmente podemos ignorar o registro. Mas pra o valor 0 a coisa se complica, j que perfeitamente possvel
Banco de Dados I
25
que ele seja valido. A maioria dos sistemas faz distino entre valores nulos (falta de dado) e um valor em branco (com o 0). 4. Regra do catalogo relacional ativo Toda a estrutura do banco de dados (domnios, campos, tabelas, regras de integridade, ndices, etc.) deve estar disponvel em tabelas (tambm referenciadas como catlogos). Sua manipulao possvel atravs de linguagens permitidas aos dados regulares. Essas tabelas so manipuladas pelo prprio sistema, quando o usurio efetua alterao na estrutura do banco de dado. 5. Regra de atualizao de alto nvel Essa regra diz que o usurio deve ter capacidade de manipular as informaes do banco de dados em grupos de registros, ou seja, ser capaz de inserir, alterar e excluir vrios registros ao mesmo tempo. 6. Regra de sublinguagem de dados abrangente Pelo menos uma linguagem deve ser suportada, para que o usurio possa manipular a estrutura do banco de dados (como criao e alterao de tabelas), assim como extrair, inserirem, atualizar ou excluir dados, definir restries de acessos e controle de transaes (COMMIT e ROLLBACK, por exemplo). Deve ser possvel ainda manipulao dos dados por meio de programas aplicativos. 7. Regra de independncia fsica Quando for necessria alguma modificao na forma como os dados so armazenados fisicamente, nenhuma alterao deve ser necessria nas aplicaes que fazem uso do banco de dados, assim como devem permanecer inalterados os mecanismos de consulta e manipulao de dados utilizados pelos usurios finais. 8. Regra de independncia lgica Qualquer alterao efetuada na estrutura do banco de dados, como incluso ou excluso de campos de uma tabela ou alterao no relacionamento entre tabelas, no deve afetar o aplicativo que o usa. Da mesma forma, o aplicativo somente deve manipular vises dessas tabelas. Essas vises so uma espcie de tabela virtual, que agrupa dados de uma ou mais tabelas fsicas e apresenta ao usurio os dados. 9. Regra de atualizao de vises Uma vez que as vises dos dados de uma ou mais tabelas so, teoricamente, suscetveis a atualizaes, ento um aplicativo que faz uso desses dados deve ser capaz de efetuar alteraes, excluses e incluses neles. Essas atualizaes, no entanto, devem ser repassadas automaticamente as tabelas originais. 10. Regra de independncia de integridade As vrias formas de integridade do banco de dados (integridade de entidade, integridade referencial, restries, obrigatoriedade de valores, etc.) precisam ser estabelecidas dentro do catalogo do sistema ou dicionrio de dados, e ser totalmente independentes da lgica dos aplicativos. 11. Regra de independncia de distribuio Alguns sistemas de banco de dados, notadamente os que seguem o padro SQL, podem ser distribudos em diversas plataformas/equipamentos que se encontrem interligados em rede.
Banco de Dados I
26
Esses equipamentos podem inclusive estar localizados fisicamente distantes entre si. Essa capacidade de distribuio no pode afetar a funcionalidade do sistema e dos aplicativos que fazem uso do banco de dados. 12. Regra no-subversiva O sistema deve ser capaz de impedir qualquer usurio ou programador de passar por cima de todos os mecanismos de segurana, regras de integridade do banco de dados e restries, utilizando algum recurso ou linguagem de baixo nvel que eventualmente possam ser oferecidos pelo prprio sistema.
Banco de Dados I
27
4 Modelagem de Dados
4.1 A importncia da modelagem de dados
Quando pretendemos fazer uma viagem, a primeira preocupao planej-la cuidadosamente e escolher o que vamos levar nas malas. Da mesma forma, quando estamos empenhados no desenvolvimento de um sistema para computador, preciso planejar todas as suas etapas e dedicar ateno especial ao projeto e estruturao do banco de dados. Para isso utilizamos uma tcnica chamada modelagem de dados, cujo objetivo transformar uma idia conceitual em algo que possa ser traduzido em termos computacionais. Com a modelagem de dados possvel refinar um modelo conceitual durante as fases que compem o projeto, eliminando redundncias ou incoerncias que possam inevitavelmente surgir. Sem esse planejamento prvio, com toda certeza, a manuteno do sistema ser mais complicada e constante. No podemos pensar que todo o projeto do banco de dados deva ser assumido somente pela equipe de profissionais de informtica. Muito pelo contraio, preciso que os prprios usurios faam parte das etapas mais criticas como levantamento dos dados, testes de usabilidade e validao. No h duvida de que os profissionais tambm precisam conhecer o negocio da empresa, ou podero aparecer resultados desastrosos. Uma vez que a realidade muda de uma empresa para outra, preciso estabelecer uma formapadro para estruturar um banco de dados independente do tipo de ambiente ou negocio. Para isso foi definido o que chamamos de metamodelo, sendo que o mais utilizado EntidadeRelacionamento (ER). O processo de desenvolvimento de um projeto de banco de dados envolve varias fases. O minimundo representa uma poro da realidade que se deseja transportar para o sistema informatizado. Na fase de levantamento e analise de necessidades a equipe de desenvolvimento deve consultar os potenciais usurios para saber quais so os requisitos bsicos do banco de dados e assim document-los adequadamente. A partir dessa fase so gerados dois produtos, os requisitos funcionais que englobam todas as funes da aplicao, e os requisitos do banco de dados. O prximo passo a criao de um esquema conceitual do banco de dados valendo-se de um modelo de dados de alto nvel. Esse esquema consiste numa descrio detalhada dos requisitos de dados apontados no levantamento junto aos usurios. Nessa descrio encontram-se detalhes sobre as entidades, relacionamentos e restries. Na implementao propriamente dita se encontram as tarefas de criao do banco de dados fsico, utilizando um dos produtos oferecidos no mercado, e na programao das rotinas e transaes que o aplicativo deve conter a partir de ferramentas de desenvolvimento e linguagens disponveis. no projeto fsico que so especificados a estrutura do banco de dados, os caminhos para acesso e a forma de organizao dos arquivos que o compem. No processo de modelagem de dados podemos destacar como bsicas as seguintes etapas: 1. Definio do problema ou objetivo principal; 2. Pesquisa dos sistemas de banco de dados existentes no mercado para adoo; 3. Projeto da estrutura de dados; 4. Construo dos relacionamentos entre os dados;
Banco de Dados I
28
5. Implementao de regras de negocio e restries; 6. Implementao do desenho da interface com usurio, que tambm envolve a criao de relatrios do sistema.
Durante a fase inicial de modelagem conceitual dos dados, o profissional precisa observar atentamente tudo que for relevante no mundo real e que deva ser transportado para o sistema que se esta projetando. Com essas informaes j possvel criar um esboo representando de forma grfica o processo. A isso denominamos abstrao ou modelo abstrato. Nela podemos encontrar trs componentes muito importantes: modelo conceitual, modelo lgico e modelo fsico. 4.2.1 Modelo Conceitual a primeira etapa do projeto, na qual se representa a realidade atravs de uma viso global e genrica dos dados e seus relacionamentos. Seu objetivo conter todas as informaes dessa realidade que sero armazenadas no banco de dados, sem que se retratem aspectos relativos ao banco de dados que ser utilizado. Essas informaes podem aparecer no formato de uma lista descritiva das operaes executadas pelos usurios e os dados que eles devem manipular. Veja a seguir um pequeno exemplo: 1. Cadastro de Clientes Dados necessrios: nome completo, tipo de pessoa (fsica/jurdica), endereo, bairro, cidade, estado, CEP, telefone, e-mail, nome para contato. 2. Cadastro de fornecedores Dados necessrios: nome completo, tipo de pessoa (fsica/jurdica), endereo, bairro, cidade, estado, CEP, telefone, e-mail, nome para contato. 3. Cadastro de produtos Dados necessrios: cdigo do produto, nome do produto, modelo, unidade de medida, preo unitrio de compra, preo unitrio de venda, estoque mnimo, estoque Maximo, estoque atual, data ultima compra.
Banco de Dados I
29
4. Pedidos Dados necessrios: cdigo do produto, quantidade, cdigo do cliente, cdigo do vendedor. 5. Operaes a. Cadastro de produtos O funcionrio adiciona um registro quando um novo produto comprado, incluindo sua descrio, preo de compra e de venda e a quantidade que esta entrando em estoque. b. Cadastro de clientes O funcionrio adiciona um registro quando o cliente que esta efetuando um pedido a prazo no possui cadastro. c. Vendas O funcionrio entra com os produtos que o cliente deseja comprar. Pra finalizar a venda, deve-se especificar se a vista ou a prazo. Na finalizao da venda, a nota fiscal impressa e o estoque dos produtos atualizado. Se for venda a prazo, um carne emitido para pagamento das parcelas mensais. 4.2.2 Modelo Lgico A segunda etapa compreende a descrio das estruturas que sero armazenadas no banco de dados e que resulta numa representao grfica dos dados numa maneira lgica, inclusive j nomeando os componentes e as aes que exercem um sobre o outro. Nessa etapa tambm se define a abordagem de banco de dados que ser utilizada: hierrquica, de rede ou relacional.
Banco de Dados I
30
4.2.3 Modelo Fsico Do modelo lgico podemos derivar o modelo fsico, no qual se encontram detalhados os componentes de estrutura fsica do banco de dados, como tabelas, campos, tipos de valores, ndices, etc. Quando chegarmos a esse ponto, estaremos prontos para a criao propriamente dita do banco de dados, utilizando o sistema gerenciador que mais se adequar as tarefas. Veja um exemplo hipottico: Estrutura do Cadastro de Paciente Nome do campo Cdigo do Paciente Nome do Paciente Endereo Bairro Cidade Estado CEP Data de Nascimento Tipo de dado Numrico Alfanumrico Alfanumrico Alfanumrico Alfanumrico Alfanumrico Alfanumrico Data Tamanho do Campo 5 dgitos 50 caracteres 50 caracteres 40 caracteres 40 caracteres 2 caracteres 9 caracteres 10 caracteres
4.3 Entidades
No modelo ER (Entidade-Relacionamento) os dados so descritos como entidades, atributos e relacionamentos, que podem ser exibidos num formato grfico denominado diagrama ER. Sendo a entidade o objeto bsico representado no modelo ER, veremos seu conceito em primeiro lugar. Podemos definir entidade como um objeto do mundo real que possui atributos capazes de torn-lo identificvel e que possui uma existncia independente. Essa existncia pode ser fsica como no caso de pessoas, casa, relgio, computadores, funcionrios, etc. ou apenas conceitual como um servio, uma disciplina escolar, uma consulta medica, etc. As entidades possuem atributos que as descrevem, como a entidade de um produto, que representada pelo seu cdigo, nome, modelo, preo e estoque. Esse atributo so partes importantes dos valores armazenados no banco de dados. Os atributos podem ser classificados em simples ou compostos. Quando a informao contida no atributo no pode ser dividida, como o preo unitrio de um produto, ento ele tido como simples. J os atributos compostos permitem uma diviso em partes menores da informao. Tomemos como exemplo a entidade de endereos, que pode ser quebrada em nome do logradouro, numero do imvel, bairro, cidade, estado CEP.
Banco de Dados I
31
Mas como podemos reconhecer uma entidade? Isso pode ser feito pela analise criteriosa de cada informao levantada. nessa analise que se procura agrupar as informaes conforme suas caractersticas, ou que esto relacionadas com um mesmo assunto. Vamos supor o caso de um cadastro de funcionrios de uma empresa. Alem da lista de funcionrios, temos tambm uma relao de setores em que cada um trabalha. Dessa forma podemos identificar de imediato dois grupos de informaes. Funcionrios Setor
Como foram j mencionadas, as entidades possuem atributos que diferenciam uma das outras. Esses atributos contem valores que descrevem as diversas ocorrncias de uma entidade, que so identificadas como os registros de uma tabela no banco de dados fsico. Entidade Setor Cdigo do Setor 0001 0002 0003 0004 0005 Entidade Funcionrio Matrcula 20145-8 13002-1 09021-4 80240-1 84230-8 12090-3 Nome do Funcionrio Jos Bento Figueira Augustino Valentin Alberto Vasconcelos Denise Souza Bruno Lima Iris da Costa Cdigo de Setor 0002 0003 0004 0003 0004 0005 Nome do Setor Administrao Tesouraria Atendimento Almoxarifado Contabilidade
Existe uma caracterstica dos atributos que indica quantas vezes ele pode ocorrer, a qual recebe o nome de cardinalidade. A maioria dos atributos somente armazena um nico valor, e chamamos isso de cardinalidade 1. Este o caso do atributo do nome do funcionrio. Em algumas situaes, no entanto, possvel termos atributos que devem conter mais de um valor, que denominados de
Banco de Dados I
32
atributos multivalorados. O atributo para armazenamento da formao profissional do funcionrio um exemplo, j que pode conter um ou mais valores, no caso de se ter vrios cursos superiores. Os atributos tambm so formados por um tipo de dado (numrico, caractere, data, etc.) e por um tamanho que representa a quantidade de dgitos ou caracteres alfanumricos que podem ser armazenados. Um atributo especial (ou conjunto de atributos) pode representar uma ocorrncia nica de entidade dentro de toda a coleo. a chave da entidade, que no banco de dados fsico representada pela chave primaria. As entidades que no possuem atributos chaves so denominadas de tipos de entidades fracas, ao contrario dos tipos de entidades fortes, que so aquelas que possuem atributos chaves. Os itens/registros de entidades que pertencem ao primeiro tipo se relacionam com itens/registros existentes em outra entidade, sendo essa ultima denominada entidade identificadora.
4.4 Relacionamentos
Um relacionamento pode ser definido como a representao de uma ao ou fato que associa os itens de uma entidade com os itens de outra entidade. Falando em termos matemticos, um relacionamento pode ser parecer com as linhas que ligam os elementos de um conjunto aos elementos de outro. Na modelagem de dados, os relacionamentos so representados graficamente como um losango. Vamos utilizar o exemplo anterior das entidades SETOR e FUNCIONRIO. Nele podemos perceber que para ser funcionrio da empresa ele deve estar lotado num determinado setor. Assim temos um vinculo entre essas duas entidades.
Como podemos notar, h um verbo (de preferncia na voz ativa) ligando as duas entidades que descrevem com exatido como elas se relacionam. As ocorrncias da entidade SETOR se associam com as ocorrncias de entidade FUNCIONRIO. Da mesma forma as ocorrncias de FUNCIONRIO esto lotadas nas ocorrncias de SETOR. 4.4.1 Condicionalidade A Condicionalidade refere-se capacidade de uma entidade poder ter ou no ligao/vnculo com outra. Isso significa que pode haver ocorrncias numa entidade que no possuem um relacionamento ou associao com ocorrncias de outra entidade. No exemplo de cadastro de funcionrio, h uma obrigatoriedade de vincular um funcionrio a um setor. No entanto, no obrigatrio que todos eles tenham filhos, o que indica que o relacionamento da entidade FUNCIONRIO com outra entidade denominada FILHO nem sempre ocorrera.
Banco de Dados I
33
S porque alguns itens no participam do relacionamento no significa que o fato no possa existir. Isso define dois grupos de relacionamentos: condicionais e incondicionais. Nos relacionamentos condicionais pode haver elementos que no participam do relacionamento, ao contrario dos relacionamentos incondicionais, em que o relacionamento dos elementos entre as entidades obrigatrio, ou seja, todos os elementos de uma entidade devem ser associar com pelo menos um elemento de outra entidade. Entidade Funcionrios Jos Bento Figueira Augusto Valentim Alberto Vasconcelos Denise Souza Bruno de Souza Iris da Costa Gomes Entidade Filhos Ingrid Bento Figueira Carlos Valentim Cesar Valentim Mercedes Gomes Joo Gomes David Gomes
4.4.2 Tipos e Graus de Relacionamento Quando num relacionamento temos envolvidas duas entidades, dizemos que ele binrio. Se forem trs entidades, temos um relacionamento ternrio. At agora todos os exemplos eram do primeiro tipo. Como exemplo de relacionamento ternrio pode citar o caso em que temos trs entidades: Fornecedor, Produto e Fornecimento. Por meio delas podemos associar os fornecedores com os produtos que eles fornecem. Fornecedor Fornecedor 1 Fornecedor 2 Fornecedor 3 Fornecedor 4 Fornecedor 5 Fornecimento Fornecedor 1/Produto 1 Fornecedor 1/Produto 2 Fornecedor 2/Produto 3 Fornecedor 3/Produto 4 Fornecedor 5/Produto 5 Produto Produto 1 Produto 2 Produto 3 Produto 4 Produto 5
O grau de relacionamento indica a quantidade de ocorrncias de uma entidade que se encontram relacionadas com ocorrncias de outra entidade. H trs tipos de grau de relacionamento: umpara-um; um-para-muitos e muitos-para-muitos. 4.4.2.1 Relacionamento Um-para-Um Esse tipo tambm conhecido como relacionamento 1:1 e define que cada ocorrncia de uma entidade somente se associa a uma nica ocorrncia da outra entidade.
Banco de Dados I
34
Entidade Funcionrios Jos Bento Figueira Augusto Valentim Alberto Vasconcelos Denise Souza
Nem sempre h obrigatoriedade de existir o relacionamento, mas quando houver, ele no pode envolver mais de um par de elementos na associao. Como exemplo pode citar um funcionrio que no acessa o sistema, assim no ser necessrio ter um registro de senha para ele. Para ter um relacionamento um-para-um, preciso que os dois sentidos sejam analisados. Se encontrarmos um nico item de uma entidade que se associa a mais de um na outra entidade, no podemos considerar o relacionamento com um-para-um. A figura abaixo mostra o diagrama E-R desse tipo. Note que prximo a cada retngulo que representa as entidades foram adicionados marcadores (1 no caso), indicando assim o grau do relacionamento.
4.4.2.2 Relacionamento Um-para-Muitos No segundo tipo de relacionamento (tambm chamado relacionamento 1:N) temos casos em que cada ocorrncia de uma entidade A pode se relacionar com uma ou mais de uma ocorrncia da entidade B, porem o contrario no pode acontecer. Temos um bom exemplo do relacionamento entre Funcionrio e Filho. Entidade Funcionrios Jos Bento Figueira Augusto Valentim Alberto Vasconcelos Denise Souza Bruno de Souza Iris da Costa Gomes Entidade Filhos Ingrid Bento Figueira Carlos Valentim Cesar Valentim Mercedes Gomes Joo Gomes David Gomes
Banco de Dados I
35
4.4.2.3 Relacionamento Muitos-para-Muitos Um bom exemplo para entender esse tipo de relacionamento, tambm denominado relacionamento N:N, o caso de pedidos nos quais constam vrios produtos. Um nico pedido pode estar associado a vrios produtos. Por outro lado, um mesmo produto pode constar em mais de um pedido.
Produtos Bobina de Ignio Rele da buzina Regulador de voltagem Bandeja de suspenso Jogo de Pastilha Plat de embreagem
Banco de Dados I
36
Smbolo
Significado Entidade
Entidade fraca
Relacionamento
Relacionamento identificado
Atributo
Atributo composto
Atributo derivado Participao total de E2 em R Razo da cardinalidade 1:N para E1:E2 em R Restrio estrutural (Min,Max) na participao de E em R
Banco de Dados I
37
5 Normalizao
5.1 Dependncia Funcional
A dependncia funcional talvez o conceito mais importante no projeto de esquemas relacionais e pode ser definida como uma restrio entre dois conjuntos de atributos de uma mesma entidade/relao. de grande importncia sua compreenso para entender melhor normalizao de dados. Dependencia funcional um relacionamento entre pelo menos dois atributos. Se o valor de um conjunto de atributos A permite descobrir o valor de um outro conjunto B, dizemos que A determina funcionalmente B ou que B depende de A. Exemplo: Cdigo_Aluno -> Nome, Idade, Curso (Sigla, Sala, Hora) -> Codigo_Turma
A normalizao de dados um processo que nos conduz por uma serie de analises para verificao de esquemas de relao quanto sua situao diante de uma forma normal. Essas analises so efetuadas com base nas dependncias funcionais e chaves primarias, procurando assim reduzir possveis redundncias e as anomalias oriundas de incluso, excluses e atualizaes. A forma normal de uma relao indica o grau de normalizao em que ela se encontra. Academicamente falando, existem cinco formas normais, embora apenas as trs primeiras j sejam suficientes para se ter uma boa definio da estrutura do banco de dados. No fim da normalizao teremos a resposta a principal pergunta que surge quando iniciamos um projeto: quantas tabelas sero necessrias em nosso banco de dados? As regras de normalizao permitem que bancos de dados robustos e eficientes possam ser criados e facilmente alterados. Se essas regras forem seguidas com cuidado, o sistema todo (banco de dados e aplicativo) ser bastante flexvel e confivel.
Banco de Dados I
38
Um projeto de banco de dados bem elaborado pode ocupar um tempo considervel, mas a economia que ser proporcionada posteriormente sem dvida compensadora. Por isso esta deve ser a prioridade mxima do projeto.
Suponha a excluso da tupla do aluno Jos, bem neste caso, perdemos, alem do nome do aluno, as informaes referentes atividade Musculao, bem como seu valor.
Este problema denominado Anomalia de Eliminao. Outro problema ocorre quando a academia implanta um novo curso e no podemos inseri-lo at que um aluno tenha a disposio de faz-lo. Isto denominado Anomalia de Insero. Agora, note que Jud, esta grafado de forma errada na tupla do aluno Manoel. Se uma busca for feita por Jud, s ir aparecer 1 aluno e no 2 alunos. Denominamos este problema com Anomalia de Modificao.
A chave primria da nova entidade ser obtida pela concatenao da chave primria da esntidade inicial e a do grupo repetitivo.
Banco de Dados I
39
Exemplo 1FN: Considere a tabela cliente abaixo: Cliente, Cdigo_cliente, Nome, *Telefone, Endereo Agora a tabela com os dados: Cdigo_cliente C001 C002 C003 Nome Jos Maria Jonas Telefone 9563-6352 9847-2501 3265-8596 8545-8956 9598-6301 Endereo Rua Seis, 85 Morumbi 12536-965 Rua Onze, 64 Moema 65985-963 Praa Ramos, Liberdade 68858-633
Analisando teremos: Todos os clientes possuem Rua, CEP e Bairro, e essas informaes esto na mesma clula da tabela, logo ela no esta na primeira forma normal. Para normalizar, deveremos colocar cada informao em uma coluna diferente, como no exemplo a seguir. Cdigo_cliente C001 C002 C003 Nome Jos Maria Jonas Telefone 9563-6352 9847-2501 3265-8596 8545-8956 9598-6301 Rua Rua Seis, 85 Rua Onze, 64 Praa Ramos Bairro Morumbi Moema Liberdade CEP 12536-965 65985-963 68858-633
Mesmo com o ajuste acima, a tabela ainda no esta na primeira forma normal, pois h clientes com mais de um telefone e os valores esto em uma mesma clula. Para normalizar ser necessrio criar uma nova tabela para armazenar os nmeros dos telefones e o campo-chave da tabela cliente. Veja o resultado a seguir: Cdigo_cliente C001 C002 C003 Cdigo_cliente C001 C001 C002 C003 C003 Nome Jos Maria Jonas Telefone 9563-6352 9847-2501 3265-8596 8545-8956 9598-6301 Rua Rua Seis, 85 Rua Onze, 64 Praa Ramos Bairro Morumbi Moema Liberdade CEP 12536-965 65985-963 68858-633
Banco de Dados I
40
No exemplo acima foi gerado uma segunda entidade para que a primeira forma normal fosse satisfeita, contudo possvel manter a tabela original, admitindo-se valores duplos em uma mesma coluna, como exemplo o campo telefone ficaria assim: 11-3400-3536 e 19-3500-9899.
A chave primaria da nova entidade ser o atributo do qual os atributos removidos so funcionalmente dependentes.
Exemplo 2FN: Considere a tabela vendas abaixo: Vendas, N_pedido, Codigo_produto, Produto, Quant, Valor_unit, Subtotal Agora a tabela com os dados: N_Pedido 1005 1006 1007 1008 Codigo_produto Produto 1-934 1-956 1-923 1-908 Impressora Laser Impressora Deskjet Impressora matricial Impressora Mobile Quant 5 3 1 6 Valor_unit 1.500,00 350,00 190,00 980,00 Subtotal 7.500,00 1.050,00 190,00 5.880,00
Analisando teremos: O nome do produto depende do cdigo do produto, porem no depende de N_pedido que a chave primaria da tabela, portando no esta na segunda forma normal. Isto gera problemas com a manuteno dos dados, pois se houver alterao no nome do produto teremos que alterar em todos os registros da tabela venda. Para normalizar esta tabela teremos de criar a tabela produto que ficara com os atributos Codigo_produto e produto e na tabela Venda manteremos somente os atributos N_pedido, cdigo_produto, quant, valor_unit e subtotal. Veja o resultado abaixo:
Banco de Dados I
41
Codigo_produto Produto 1-934 1-956 1-923 1-908 N_Pedido 1005 1006 1007 1008 Impressora Laser Impressora Deskjet Impressora matricial Impressora Mobile Codigo_produto Quant 1-934 1-956 1-923 1-908 5 3 1 6 Valor_unit 1.500,00 350,00 190,00 980,00 Subtotal 7.500,00 1.050,00 190,00 5.880,00
Conforme visto na primeira forma normal, quando aplicamos normalizao comum gerar novas tabelas a fim de satisfazer as formas normais que esto sendo aplicadas.
Para uma entidade estar na terceira forma normal, preciso que ela j esteja na segunda e no possua nenhum atributo dependente de outro que no faz parte da chave primaria (dependncia transitiva). Na terceira forma normal temos de eliminar aqueles campos que podem ser obtidos pela equao de outros campos da mesma tabela. Procedimentos: Identificar todos os atributos que so funcionalmente dependentes de outros atributos nochave; Retira-se da relao esse grupo de atributos; Cria-se uma nova relao que contem esse grupo de atributos e inclui-se nela como chave os atributos dos quais esse grupo depende diretamente.
A chave primaria da nova entidade ser o atributo do qual os atributos removidos so funcionalmente dependentes. Exemplo 3FN: Considere a tabela abaixo: N_Pedido 1005 1006 1007 1008 Codigo_produto Quant 1-934 1-956 1-923 1-908 5 3 1 6 Valor_unit 1.500,00 350,00 190,00 980,00 Subtotal 7.500,00 1.050,00 190,00 5.880,00
Banco de Dados I
42
Considerando ainda a nossa tabela Venda, veremos que a mesma no esta na terceira forma normal, pois o subtotal o resultado da multiplicao Quant X Valor_unit, desta forma a coluna subtotal depende de outras colunas no-chave. Para normalizar esta tabela na terceira forma normal teremos de eliminar a coluna subtotal, como no exemplo a seguir: N_Pedido 1005 1006 1007 1008 Codigo_produto Quant 1-934 1-956 1-923 1-908 5 3 1 6 Valor_unit 1.500,00 350,00 190,00 980,00
Conforme visto nas outras formas normais, a normalizao torna a tabela mais otimizada e sem anomalias.
Assim, para estar na FNBC, uma entidade precisa possuir somente atributos que so chaves candidatas. Vamos analisar o caso em que temos uma entidade formada pelos seguintes atributos: CodAluno, CodCurso, CodTurma, CodProfessor CodAluno A001 A002 A003 CodCurso SI01 DR01 AD01 CodTurma 1P 2P 3P CodProfessor 345 432 432
Um mesmo professor pode ministrar aulas entre cursos e turmas diferentes. Sendo assim podemos identificar trs chaves candidatas que so determinantes nessa entidade: CODCURSO+CODTURMA, CODCURSO+CODPROFESSOR e CODTURMA+CODPROFESSOR. O atributo CODPROFESSOR parcialmente dependente do CODCURSO e de CODTURMA, mas totalmente dependente da chave candidata composta CODCURSO+CODTURMA. Dessa forma a entidade deve ser desmembrada, resultando em duas: uma que contem os atributos que descrevem o aluno em si, e outra cujos atributos designam um professor.
Banco de Dados I
43
Essa caracterstica pode levar a seguinte situao: termos de repetir o valor de um dos atributos com o valor de outro atributo, quando houver dois ou mais atributos multivalorados independentes. Para melhor entender, vamos supor que em nosso exemplo de sistema de pedido tenhamos uma classificao dos produtos quanto a sua categoria (por exemplo, Material Escolar, Informtica, Papelaria, Pintura, etc.). Cada produto ento associado a uma categoria e devido ao fato de os produtos pertencerem a um pedido, possvel estender essa associao ate os fornecedores, para facilitar, por exemplo, a identificao de fornecedor que vendem produtos de uma determinada categoria. Dessa maneira teramos algo parecido com o mostrado a seguir: Cdigo Categoria 015 001 001 015 Cdigo Produto 97892567 85146879 85146879 564779 Cdigo Fornecedor 00341 00341 00187 00094
Do jeito que est, embora a normalizao se encontre na 3FN, ainda apresenta uma dependncia multivalorada entre os pares de atributos Cdigo Categoria/Cdigo Produto e Cdigo Categoria/Cdigo Fornecedor. O que devemos fazer criar duas entidades nas quais o atributo comum seja Cdigo Categoria:
Banco de Dados I
44
Entidade Categoria-Produto Cdigo Categoria 015 001 015 Cdigo Produto 97892567 85146879 564779
Entidade Categoria-Fornecedor Cdigo Categoria 015 001 001 015 Cdigo Fornecedor 00341 00341 00187 00094
5.10.2 Aplicao da 2FN Para entidades que contenham chaves primarias concatenada, destacar os atributos que tenham dependncia parcial em relao chave primaria concatenada; Criar uma nova tabela que conter estes atributos, e que ter como chave primria o(s) atributo(s) do(s) qual(quais) se tenha dependncia parcial; Sero criadas tantas entidades quanto forem os atributos da chave primaria concatenada, que gerem dependncia parcial; Estabelecer o relacionamento e a cardinalidade entre a(s) nova(s) entidade(s) gerada(s) e a entidade geradora.
Banco de Dados I
45
5.10.3 Aplicao da 3FN Verificar se existem atributos que sejam dependentes transitivos de outros que no pertencem chave primria, sendo ela concatenada ou no, bem como atributos que sejam dependentes de calculo realizado a partir de outros atributos; Destacar os atributos com dependncia transitiva, gerando uma nova entidade com este atributo e cuja chave primaria o atributo que originou a dependncia; Eliminar os atributos obtidos atravs de clculos realizados a partir de outros atributos.
5.10.4 Forma Normal Final O processo de normalizao leva ao refinamento das entidades, retirando delas grande parte das redundncias e inconsistncias. Naturalmente, para que haja uma associao entre entidades preciso que ocorram redundncias mnimas de atributos que evidenciam estes relacionamentos. Sem estas redundncias no haveria relacionamento entre entidades.
Banco de Dados I
46
6 Linguagem SQL
6.1 A Importncia da Linguagem SQL
O nome SQL significa Structured Query Language Linguagem Estruturada de Pesquisa. Essa linguagem, de grande utilizao, teve seus fundamentos no modelo relacional de Codd (1970). Sua primeira verso recebeu o nome de SEQUEL (Structured English Query Language), sendo definada por D.D.CHAMBERLIN, entre outros, em 1974, nos laboratrios de pesquisa da IBM (California). Em 1975, foi implementado um prottipo de aplicao dessa nova linguagem. Entre 1976 e 1977, o SEQUEL foi revisado e ampliado, e teve seu nome alterado para SQL por razes jurdicas. Com esta reviso foi posto em pratica um projeto ambicioso da IBM chamado System R. novas alteraes foram introduzidas na SQL, graas as idias apresentadas pelos diversos usurios do ambiente. Devido ao sucesso dessa nova forma de consulta a manipulao de dados, dentro de um ambiente de banco de dados, a utilizao da SQL foi se tornando cada vez maior. Com isso uma grande quantidade de SGBDs foi tendo como linguagem bsica a SQL. A SQL se tornou um padro de fato, no mundo dos ambientes de banco de dados relacionais. Bastava agora se tornar de direito. Ento, em 1982, o American National Standard Institute (ANSI) tornou a SQL padro oficial de linguagem em ambiente relacional.
A linguagem SQL foi desenvolvida especialmente para o ambiente relacional, podendo ser adaptada qualquer ambiente no relacional.
Banco de Dados I
47
Linguagem para banco de dados distribudos A SQL auxilia na distribuio dos dados por meio de vrios nos conectados ao sistema de computao. Auxilia tambm na comunicao de dados com outros sistemas; Caminho de acesso a outros bancos de dados em diferentes maquinas A SQL auxilia na converso entre diferentes produtos de banco de dados colocados em diferentes maquinas (de micro ate mainframe).
Por ser uma linguagem de numerosas aplicaes, a SQL pode manipular objetos de diferentes classes entre as funes de um SGBD.
Definio de dados (DDL) Permite ao usurio a definio da estrutura e organizao dos dados armazenados, e as relaes que existem entre eles; Manipulao de dados (DML) Permite ao usurio ou a um programa de aplicao, a incluso, remoo, seleo ou atualizao de dados previamente armazenados no banco; Controle de acesso Protege os dados de manipulao no autorizada; Compartilhamento de dados Coordena o compartilhamento dos dados por usurios concorrentes, sem, contudo interferir na ao de cada um deles; Integridade dos dados Auxilia no processo de definio da integridade dos dados, protegendo contra corrupes, inconsistncia e falhas do sistema de computao.
Banco de Dados I
48
Independncia de fabricante A SQL oferecida em praticamente todos os SGBDs, e os que ainda no tm esto se encaminhando para l. Com isso posso mudar de SGBD sem me preocupar com novo que vai chegar; Portabilidade entre computadores A SQL pode ser utilizada desde um computador pessoal, passando por uma estao de trabalho, at um computador de grande porte; Reduo dos custos com treinamentos Baseado no item anterior, as aplicaes podem se movimentar de um ambiente para o outro sem que seja necessria uma reciclagem de equipe de desenvolvimento; Ingls estruturado de alto nvel A SQL formada por um conjunto bem simples de sentenas em ingls, oferecendo um rpido e fcil entendimento; Consulta Interativa A SQL prove um acesso rpido aos dados, fornecendo respostas ao usurio, a questes complexas, em minutos ou segundos; Mltiplas vises dos dados - A SQL permite ao criador do banco de dados levarem diferentes vises dos dados a diferentes usurios; Definio dinmica dos dados Por meio da SQL, podem-se alterar, expandir ou incluir, dinamicamente, as estruturas dos dados armazenados com a mxima flexibilidade;
A padronizao leva a uma, natural, inibio da criatividade, pois quem desenvolve aplicaes fica preso a solues padronizadas, no podendo sofrer melhorias ou alteraes; A SQL esta longe de ser uma linguagem relacional ideal Segundo C.J. Date, em seu livro Relational Database: selected Writing (Addison Werley, 1986), algumas criticas so feitas a linguagem SQL: o o o o o o Falta de ortogonalidade nas expresses, funes embutidas, variveis indicadoras, referencia a dados correntes, constantes NULL, conjuntos vazios, etc; Definio formal da linguagem aps sua criao; Discordncia com as linguagens hospedeiras; Falta de algumas funes; Erros (valores nulos, ndices nicos, clausula FROM, etc.); No d suporte a alguns aspectos do modelo relacional (atribuio de relao, join explicito, domnios, etc.);
Mesmo enfrentando alguns problemas e criticas, a linguagem SQL veio para ficar, auxiliando de forma bastante profunda a vida dos usurios e analistas no trabalho de manipulao dos dados armazenados em um banco de dados relacional.
Banco de Dados I
49
6.4.1 CHAR(n): O tipo de Dado CHAR, tem o seu tamanho definido na hora da criao da tabela. Seu tamanho mximo de 32767, 32k. Este tipo tem o seu tamanho fixo. 6.4.2 VARCHAR(n) O tipo de Dado VARCHAR, tem o seu tamanho definido na hora da criao da tabela. Seu tamanho mximo de 32767, 32k. Este tipo tem o seu tamanho variado na tabela. Isto , se voc criar uma coluna de 45 Caracteres, mas, a coluna tenha apenas 20 caracteres gravados, o restante, os 25 caracteres so descartados. 6.4.3 DATE O tipo de Dado DATE, armazena a Data, e seu tamanho de 32 bits inteiros longos. 6.4.4 TIME O tipo de Dado TIME, armazena a hora, e seu tamanho de 32 bits inteiros longos. 6.4.5 TIMESTAMP O tipo de Dado TIMESTAMP, armazena a Data e a hora ao mesmo tempo, e seu tamanho de 32 bits inteiros longos. 6.4.6 DECIMAL(preciso,escala):
O tipo de Dado DECIMAL armazena dgitos a serem gravados na preciso especificada na criao da tabela. Por exemplo: DECIMAL(10,3). Armazena valores do tipo ppppppp.eee. 6.4.7 NUMERIC(preciso,escala) O tipo de Dado NUMERIC, armazenas dgitos a serem gravados na preciso especificada na criao da tabela. Por exemplo: DECIMAL(10,3). Armazena valores do tipo ppppppp.eee 6.4.8 SMALLINT O tipo de Dado SMALLINT, armazena dgitos a serem gravados, mas, com o limite de : -32.768 a 32.767. Serve para armazenar dados numricos pequenos. 6.4.9 INTEGER O tipo de Dado INTEGER, armazena dgitos a serem gravados, mas, diferente do SMALLINT, no existe um limite aparentemente, este tipo de 32 bits, tem a escala de valores em: 2.147.483.648 at 2.147.483.648 6.4.10 FLOAT O tipo de Dado FLOAT, armazena dgitos a serem gravados, mas, com preciso simples de 7 dgitos. Intervalo de valores: 1.175x10-38 a 3.402x1038.
Banco de Dados I
50
6.4.11 DOUBLE PRECISION Este o tipo de campo no qual recomenda para uso monetrio/valores. Sua preciso de 64 bits, na documentao fala em usar apenas para valores cientficos. Intervalo de valores: 2.225x10-308 a 1.797x10308. 6.4.12 BLOB Armazena em forma binria, qualquer informao, como vdeo, imagens, sons e etc;
CREATE DOMAIN domain [AS] <datatype> [DEFAULT { literal | NULL | USER}] [NOT NULL] [CHECK ( <dom_search_condition>)];
Exemplo:
Banco de Dados I
51
CREATE DOMAIN "NOME" AS VARCHAR(40); //Cria um domnio chamado Nome do tipo VARCHAR, com o tamanho de 40 bytes. CREATE DOMAIN CODIGO AS SMALLINT DEFAULT 0; //Cria um Domnio chamado codigo, do tipo SmallInt e especifica que o valor padro dele ZERO. CREATE DOMAIN CIDADE AS VARCHAR(20) DEFAULT 'ARIQUEMES' NOT NULL; //Cria um domnio chamado CIDADE, do tipo VarChar, com o tamanho de 20 Bytes, com valor padro sendo ARIQUEMES, sendo que este no poder ser NULO.
Observe que os nomes dos Atributos devero sempre vir entre Aspas Duplas, e os possveis valores devero sempre vir entre aspas simples.
CREATE DOMAIN SALARIO AS DOUBLE PRECISION DEFAULT 0 NOT NULL CHECK(VALUE BETWEEN 0 AND 5000); //Cria um domnio chamado SALRIO, do tipo Doubple Precision, com valor padro 0, no podendo este ser nulo e com a restrio de que seu valor s poder estar dentro do intervalo de 0 a 5000); CREATE DOMAIN "CIVIL" AS VARCHAR(10) DEFAULT 'SOLTEIRO' NOT NULL CHECK(VALUE IN ('CASADO','SOLTEIRO','DESQUITADO','VIVO')); //Cria um domnio chamado civil, do tipo VarChar, com o tamanho de 10 bytes, com valor padro 'solteiro', sendo que os valores possveis s podero ser os que estiverem no intervalo estabelecido. CREATE DOMAIN "CODIGO" AS CHAR(10) NOT NULL CHECK(VALUE NOT LIKE '00%'); //Cria um domnio chamado codigo, do tipo char, com 10 Bytes fixos, sendo que este no pode ser nulo e no poder ser iniciado com '00xxxxxxxx'.
6.5.3 Criando Entidades Como visto anteriormente, as entidades so locais especficos onde os dados em comum so armazenados dentro de um banco de dados. Construir tabelas no InterBase/Firebird significa mais do que criar estruturas que acomodaro dados na forma bsica de intercesso de linhas por colunas.
Banco de Dados I
52
O InterBase/Firebird antes de tudo, um Sistema Gerenciador de Banco de Dados Relacional, que conjuga as tarefas de armazenamento de forma a possibilitar o relacionamento dos dados destas estruturas tabular. Desta forma, alm dos aspectos bsicos como definir quais colunas sero definidas para quais tipos, deve-se observar a anlise necessria para modelar o relacionamento entre as tabelas existente. J na etapa de definio da estrutura, possvel agregar restries que garantam a total integridade dos dados, definir valores padro e status que obrigam ao preenchimento de certas colunas. Para se criar uma nova entidade, utilizamos o seguinte comando:
CREATE TABLE nome da tabela ( colunas tipo_dados (tamanho), colunas tipo_dados (tamanho) )
Por exemplo:
CREATE TABLE PRODUTOS_CATEGORIA ( CODCATEG INTEGER NOT NULL, CATEGORIA VARCHAR(20) NOT NULL, CONSTRAINT PK_PROD_CATEG PRIMARY KEY (CODCATEG), CONTRAINT AK_PROD_CATEG UNIQUE(CATEGORIA) ); CREATE TABLE PRODUTOS ( CODPROD INTEGER NOT NULL, NOME VARCHAR(50) NOT NULL, DATA DATE DEFAULT 'TODAY' NOT NULL, PRECO DOUBLE PRECISION DEFAULT 0 CHECK(PRECO >= 0), ESTOQUE INTEGER DEFAULT 0 CHECK(ESTOQUE >= 0), VALOR COMPUTED BY ( PRECO*ESTOQUE ), MINIMO DOUBLE PRECISION DEFAULT 0, MAXIMO DOUBLE PRECISION DEFAULT 0, CODCATEG INTEGER NOT NULL, CONSTRAINT PK_PRODUTOS PRIMARY KEY(CODPROD), CONSTRAINT FK_PROD_CATEG FOREIGN KEY(CODCATEG) REFERENCES PRODUTOS_CATEGORIA (CODCATEG), CONSTRAINT CC_MAX_MIN CHECK (MAXIMO >= MINIMO) );
Banco de Dados I
53
6.5.4 Alterando a Estrutura de uma Entidade Para alterarmos a estrutura de uma entidade j criada, utilizamos o comando Alter Table, sendo que com ele, podemos adicionar atributos, restries de domnio, chaves primrias, estrangeiras e candidatas.
ALTER TABLE "CLIENTES" ADD "SEXO" CHAR(1) DEFAULT 'M' NOT NULL CHECK("SEXO" IN ('M','F')); //Altera a entidade Clientes, adiciona um atributo denominado SEXO, do tipo caractere fixo, com o tamanho de 1 Byte, com uma restrio de valor suportado somente para M ou F. ALTER TABLE CLIENTES DROP SEXO; //Altera a entidade Clientes e exclui o atributo SEXO; ALTER TABLE CLIENTES ADD CONSTRAINT CE_CIDADES FOREIGN KEY("CODCIDADE") REFERENCES "CIDADES"("CODCIDADE"); //Altera a entidade Clientes e adiciona uma Construo denominada CE_Cidades, do tipo chave estrangeira, com o campo CodCidade referente entidade Cidadades com o Campo CodCidade;
ALTER TABLE CLIENTES ADD CONSTRAINT RD_STATUS CHECK (STATUS IN (0, 1)); //Altera a entidade Clientes e adiciona uma construo denominada RD_Status do tipo Restrio de Domnios, para o campo STATUS, sendo que esse s poder aceitar valores 0 ou 1; ALTER TABLE CLIENTES ADD CONSTRAINT RD_TIPO CHECK (TIPO IN ( 'J', 'F')); //Semelhante ao exemplo anterior; ALTER TABLE "CLIENTES" ADD CONSTRAINT "CC_CPF" UNIQUE("CPF"); //Altera a entidade Clientes e adiciona uma construo do tipo nica chamada CC_CPF, (Chave candidata) para o campo CPF.
Banco de Dados I
54
6.5.5 Criando ndices O ndice est ligado diretamente a desempenho do seu banco de dados. O conceito de ndices em ambientes Desktops xBase, Access, Paradox muito diferente do conceito de ndices em ambiente Client/Server. Um ndice em ambiente Client/Server InterBase, Oracle, DB2, no tem a funo de organizar a tabela, pois, voc tem o mesmo efeito com ORDER BY. A funo de um ndice em ambiente Client/Server de desempenho em primeiro lugar, caso o ndice seja um PK Primary Key, tem a funo de manter a integridade da tabela, caso o ndice seja um FK Foreign Key, tem a funo de relacionamento e integridade da tabela, caso o ndice seja UNIQUE, tem a funo de no deixar valores iguais serem includos. H alguns critrios que devem ser observados, quando da criao de um ndice. Algumas colunas so boas candidatas a comporem ndices, ficando a definio para os aspectos relacionados a seguir: Colunas utilizadas com freqncia em clusulas Where e Order By. Colunas utilizadas na operaes que envolvam Group By Colunas referenciadas nas funes de agregao Min e Max Colunas definidas com Chave Estrangeira e Chave Primria
Colunas em que a ocorrncia de valores nulos constante Colunas de tipos Booleano, Blob Colunas com muita ocorrncia de linhas idnticas Colunas de tabelas com poucos registros
De forma conclusiva, ressalta-se o fato de no nos perdermos em adoo de um nmero excepcionalmente exagerado na criao de ndices, j que isto acarretaria uma sobre carga no processo de manuteno (Update, Insert e Delete), devido ao fato das diversas estruturas de ndices terem que ser atualizadas. As clusulas ASCENDING e DESCENDING, tem a funo de organizar da maneira desejada o ndice. O valor default ASC.
CREATE [UNIQUE] [ASC[ENDING] | DESC[ENDING]] INDEX index ON table ( col [, col ...]); CREATE INDEX IND_NOME ON CLIENTES (NOME); //Cria um ndice denominado IND_NOME na entidade Clientes, com o campo NOME; CREATE DESCENDING INDEX IND_NOME ON CLIENTES (NOME);
Banco de Dados I
55
//Cria um ndice denominado IND_NOME na entidade Clientes, com o campo NOME, em ordem decrescente. CREATE INDEX IND_NOME_SOBRENOME ON CLIENTES (NOME,SOBRENOME); //Cria um ndice denominado IND_NOME_SOBRENOME na entidade Clientes, com os campos Nome e Sobrenome; CREATE UNIQUE INDEX IND_CPF ON CLIENTES(CPF); //Cria um ndice nico denominado IND_CPF na entidade Clientes, com o campo CPF.
Para se criar um ndice nico de um campo, este no pode conter valores duplicados bem como no aceitar valores Nulos. 6.5.6 Apagando ndices Para se excluir um ndice previamente criado, utiliza-se o comando DROP INDEX.
Banco de Dados I
56
6.5.8 Inserindo dados em uma Entidade Para inserirmos dados em uma entidade, temos que utilizar o comando DML (Insert).
INSERT INTO CIDADES (CODCIDADE,CIDADE,ESTADO) VALUES (1,'ARIQUEMES', 'RO'); //Insere na entidade CIDADES, nos atributos (CodCidade, Cidade, Estado) os valores especificados na funo VALUES. INSERT INTO CATEGORIAS (CODCATEGORIA,CATEGORIA,GRUPO) SELECT CODIGO,GRUPO,TIPO FROM GRUPOS WHERE TIPO = 'ARMARINHOS'; //Insere na entidade CATEGORIAS, nos atributos (CodCategoria, Categoria e Grupo) todos os valores dos atributos (Codigo, Grupo e Tipo) da entidade GRUPOS onde o tipo for igual a 'ARMARINHOS';
A clusula VALUE especifica os dados que voc deseja inserir na tabela. Se no especificado os nomes de colunas, essa lista de valores dever estar na ordem das colunas definidas na hora da criao da tabela.
INSERT INTO produto VALUES (108, Parafuso, Kg, 1.25); //Insere os dados sem especificar as colunas da entidade produtos
6.5.9 Alterando dados em uma Entidade Para alterar (atualizar) os dados em uma entidade previamente criada, utilizamos o comando DML (UPDATE).
UPDATE ESTOQUE SET VALORVENDA = VALORVENDA * 1.20 WHERE CODCATEGORIA = 1; //Atualiza a entidade ESTOQUE e fixa o atributo ValorVenda para um aumento de 20%, de todos os produtos cuja categoria seja igual a 1. UPDATE VENDAS SET CODCLIENTE = 100 WHERE CODCLIENTE= 10; //Atualiza a entidade VENDAS e fixa o atributo CodCliente para 100, onde o cdigo do cliente for 10;
Banco de Dados I
57
UPDATE CLIENTES CL SET LIMITECREDITO = LIMITECREDITO * 1.10 WHERE LIMITECREDITO < (SELECT AVG(TOTALVENDA) FROM VENDAS VE WHERE VE.CODCLIENTE = CL.CODCLIENTE); //Atualiza a entidade clientes e fixa o valor de LimiteDeCredito para 10% a mais, onde o atributo LimiteDeCredito seja menor que a mdia geral de compras feitas pelo cliente.
No exemplo anterior, observe que as Entidades receberam um Apelido (CLIENTES = CL e VENDAS = VE), o que facilita na hora da especificao de atributos.
6.5.10 Excluindo dados em uma Entidade Para excluir dados em uma entidade, utilizamos o comando DML (DELETE).
DELETE FROM ESTOQUE WHERE CODCATEGORIA = 100; //Exclui todos os produtos da entidade ESTOQUE, onde o cdigo da categoria seja igual a 100 DELETE FROM CLIENTES WHERE CODCLIENTE NOT IN (SELECT CODCLIENTE FROM VENDAS); //Exclui todas as tuplas da entidade CLIENTES onde no haja nenhuma venda cadastrada para este; DELETE FROM VENDAS VE WHERE STATUS = 'ORCAMENTO' AND CODCLIENTE NOT IN (SELECT CODCLIENTE FROM CONTAS_RECEBER CR WHERE STATUS = 'PENDENTE'); //Exclui todas as tuplas da entidade VENDAS onde o atributo STATUS desta seja igual a 'ORCAMENTO' e o atributo CODCLIENTE no pode estar na entidade CONTAS_RECEBER com o Atributo STATUS = 'PENDENTE';
6.5.11 Selecionando dados de uma Entidade Uma das operaes mais comuns, realizadas sobre um banco de dados, examinar (selecionar) as informaes armazenadas. Essas operaes so realizadas por meio do comando SELECT. O comando SELECT tem palavras-chaves em um comando bsico:
Banco de Dados I
58
SELECT especifica as colunas da tabela que queremos selecionar; FROM especifica as tabelas; WHERE especifica as linhas.
SELECT <nome da coluna> FROM <tabela>; SELECT descricao, unidade, valor_unitario FROM produto; //Lista todos os produtos com respectivas descrio, unidades e valores unitrios SELECT * FROM vendedores; //Lista todo o contedo de vendedor com todos os campos da entidade
6.5.11.1 Alterando o Heading (Cabealho) da coluna
Por default, o heading (nome da coluna criado no banco de dados) apresentado na saida do SELECT o nome d coluna na tabela. O SQL permite que se apresente a sada de um SELECT com cabealhos de colunas ao nosso gosto.
SELECT cabealho da coluna = nome da coluna FROM nome da tabela; SELECT numero = cdigo_vendedor, nome = nome_vendedor, rendimentos = salrio_fixo, comissao = faixa_comissao FROM vendedor; //Resultado seria os nomes das colunas cdigo_vendedor, nome_vendedor, salrio_fixo e faixa_comissao
6.5.11.2 Manipulando dados numricos
Operadores aritmticos podem ser usados sobre qualquer coluna numrica, incluindo colunas do tipo de dado int, smallint, tinyint, float, real, Money. Os operadores aritmticos so: + (adio), - (subtrao), / (diviso), * (multiplicao) e % (modulo).
SELECT vendedor, salrio_fixo = (salrio_fixo * 2) FROM vendedor //o resultado apresenta o salrio multiplicado por dois
6.5.11.3 Selecionando somente algumas linhas da tabela
A clusula WHERE em um comando SELECT especifica quais linhas queremos obter, baseada em condies de seleo.
Banco de Dados I
59
6.5.11.4
Operadores de Comparao
Operadores de comparao: = (igual), <> ou != (diferente), < (menor do que), > (maior do que>, >= (maior ou igual do que), !> (no maior), !< (no menor) e <= (menor ou igual do que). Quando a coluna do tipo caractere, o <valor> deve estar entre aspas (); Ex: PARAFUSO Na linguagem SQL, existe a diferenciao entre maiscula e minscula em alguns SGBD, logo PARAFUSO diferente de parafuso.
SELECT num_pedido, cdigo_produto, quantidade FROM item_do_pedido WHERE quantidade = 35; //Lista os itens do pedido com a quantidade igual a 35 da tabela item_do_pedido. SELECT nome_cliente FROM cliente WHERE cidade = Alto Paraso; //Lista os cliente que moram em Alto Paraso
6.5.11.5 Operadores Lgicos
SELECT descricao_produto FROM produto WHERE unidade = M AND Val_unit = 1.05; //Lista os produtos que tenham unidade igual a M e valor unitrio igual a R$ 1,05 da tabela produto. SELECT nome_cliente, endereo FROM cliente WHERE (CEP >= 30077000 AND CEP <=30079000) OR cidade = So Paulo; //Lista os cliente e seus respectivos endereos, que moram em So Paulo ou estejam na faixa de CEP entre 30077000 e 30079000. SELECT num_pedido FROM pedido WHERE (prazo_entrega <> 15); //mostra todos os pedidos que no tenham prazo de entrega igual a 15 dias
Banco de Dados I
60
6.5.11.6
... WHERE <nome da coluna> BETWEEN <valor1> AND <valor2> ... WHERE <nome da coluna> NOT BETWEEN <valor1> AND <valor2>
Esse operador propicia a pesquisa por uma determinada coluna e selecionando as linhas cujo valor da coluna esteja dentro de uma faixa determinada de valores, sem a necessidade dos operadores >=, <= e AND. Tanto o VALOR1 quanto o VALOR2 tem de ser do mesmo tipo de dado da coluna.
SELECT cdigo_produto, descricao_produto FROM produto WHERE Val_unit BETWEEN 0.32 AND 2.00; //Lista o cdigo e a descrio dos produtos que tenham o valor unitrio na faixa de R$ 0,32 ate R$ 2,00
6.5.11.7 Operadores baseados em string de caracteres LIKE e NOT LIKE
Ou seja, todos os registros que contenham LPIS seguido de qualquer palavra ou conjunto de caracteres. Ex: LIKE BROCA N_ pode enxergar os seguintes registros: BROCA N1 BROCA NB BROCA N3
Banco de Dados I
61
LIKE %o_ pode enxergar qualquer nome que termine em o. LIKE [CM]% permite enxergar qualquer nome que comece com C ou com M. LIKE [C-X]% permite enxergar qualquer nome que comece com C at X. LIKE M[^o]% permite enxergar qualquer nome que comece com M e no tenha a letra o como segunda letra.
SELECT cdigo_produto, descricao_produto FROM produto WHERE descricao_produto LIKE Q_; //Lista todos os produtos que tenham o seu nome comeado por Q SELECT codigo_vendedor, nome_vendedor FROM vendedor WHERE nome_vendedor NOT LIKE Jo%; //Lista os vendedores que no comeam por Jo
6.5.11.8 Operadores baseados em listas IN e NOT IN
SELECT nome_vendedor FROM vendedor WHERE faixa_comissao IN (A, B); //Lista os vendedores que so da faixa de comissao A e B.
6.5.11.9 Operadores baseados em valores desconhecidos IS NULL e IS NOT NULL
Banco de Dados I
62
SELECT * FROM cliente WHERE IE IS NULL; //Mostra os clientes que no tenham inscrio estadual
6.5.12 Ordenando os dados Selecionados Quando se realiza uma seleo, os dados recuperados no esto ordenados. Os dados so recuperados pela ordem em que se encontram dispostos fisicamente na tabela do SGBD. A SQL prev a clusula ORDER BY para realiza uma ordenao dos dados selecionados.
SELECT <nome da coluna> FROM <tabela> WHERE <condio> ORDER BY <nome da coluna> ASC SELECT <nome da coluna> FROM <tabela> WHERE <condio> ORDER BY <nome da coluna> DESC
As palavras ASC e DESC significam respectivamente, ascendente e descendente. A forma ascendente de ordenao assumida como padro.
SELECT nome_vendedor, salrio_fixo FROM vendedor ORDER BY nome_vendedor; //Mostra em ordem alfabtica a lista de vendedores e seus respectivos salrios fixos. SELECT nome_cliente, cidade, UF FROM cliente ORDER BY UF DESC, cidade DESC; //Lista os nomes, cidades e estados de todos os clientes, ordenados por estado e cidade de forma descendente. SELECT descricao, val_unit FROM produto WHERE unidade = M ORDER BY Val_unit ASC; //Mostra a descrio e o valor unitrio de todos os produtos que tenha unidade KG, em ordem de valor unitrio ascendente.
6.5.13 Realizando clculos com informaes selecionadas Com a linguagem SQL pode-se criar um campo que no pertena a tabela original, e seja fruto de calculo sobre alguns campos da tabela.
SELECT nome_vendedor, novo_salario = (salrio_fixo * 1.75) +120 FROM vendedor WHERE faixa_comissao = C ORDER BY nome_vendedor;
Banco de Dados I
63
//Mostra o novo salrio fixo dos vendedores, de faixa de comisso C, calculando com base no reajuste de 75% acrescido de R$ 120,00 de bonificao. Ordenado pelo nome do vendedor
6.5.14 Utilizando Funes de Agregao sobre Conjuntos As funes de agregao resultam sempre em uma nova coluna no resultado da pesquisa.
6.5.14.1
SELECT MIN(salario_fixo), MAX (salrio_fixo) FROM vendedor; //Mostra o menor e o maior salrio da tabela vendedor
6.5.14.2 Totalizando os valores de Colunas (SUM)
SELECT SUM(quantidade) FROM item_pedido WHERE cdigo_produto = 78; //Mostra a quantidade total pedida para o produto VINHO de cdigo 78 na tabela item_de_pedido.
6.5.14.3
SELECT AVG(salrio_fixo) FROM vendedor; //Mostra a mdia dos salrios fixos dos vendedores
6.5.14.4 Contando os Registros (COUNT)
SELECT COUNT (*) FROM vendedor WHERE salrio_fixo > 2500; //Mostra a quantidade de vendedores que ganham acima de R$ 2.500,00 de salrio fixo
O comando COUNT, quando utilizado sem a clausula WHERE, realiza a contam das linhas da tabela.
6.5.15 Utilizando a Clusula DISTINCT Normalmente, vrios registros dentro de uma tabela podem conter os mesmos valores, com exceo da chave primaria. Com isso, muitas consultas podem trazer informaes erradas. A clausula DISTINCT, aplicada em uma consulta, foi criada pra no permitir que certas redundncias, obviamente necessrias, causem problemas. A clausula DISTINCT elimina repeties de valores em relao a uma coluna.
Banco de Dados I
64
SELECT DISTINCT unidade FROM produto; //Mostra as unidades de produtos, diferentes, na tabela produto
6.5.16 Agrupando Informaes Selecionadas (GROUP BY e HAVING) A funo de agregao por si prpria produz um nmero simples para uma tabela. A clusula organiza esse sumario de dados em grupos, produzindo informaes sumarizadas para os grupos definidos na tabela objeto de seleo. A clusula HAVING realiza as restries das linhas resultantes da mesma forma que a clusula WHERE o faz em um SELECT. Podemos igualmente continuar com a clusula WHERE selecionando as condies da seleo.
SELECT <nome da coluna> FROM <tabela> WHERE condio GROUP BY <nome da coluna>; HAVING <condio>; SELECT num_pedido, total_produtos = COUNT(*) FROM item_de_pedido GROUP BY num_pedido; //Lista o nmero de produtos que cada pedido contm.
Inicialmente, os registros so ordenados de forma ascendente por numero de pedido. Num segundo passo, aplicada a operao COUNT(*) para cada grupo de registros que tenha o mesmo numero de pedido. Aps a operao de contagem de cada grupo, o resultado da consulta utilizando a clusula GROUP BY apresentado. Geralmente, a clusula GROUP BY utilizada em conjunto comas operaes COUNT e AVG.
6.5.16.1
Utilizando o HAVING
SELECT num_pedido, total_produto = COUNT(*) FROM item_pedido GROUP BY num_pedido HAVING COUNT(*) > 3 //Lista os pedidos que tm mais do que trs produtos.
6.5.17 Recuperando dados de Vrias Tabelas At gora viemos trabalhando com recuperao de dados sobre uma nica tabela, mas o conceito de banco de dados rene, evidentemente, varias tabelas diferentes. Para que possamos recuperar informaes de um banco de dados, temos, muitas vezes, a necessidade de acessar simultaneamente varias tabelas relacionadas entre si.
Banco de Dados I
65
6.5.17.1
O qualificador de nome consiste no nome da tabela seguido de um ponto e o nome da coluna na tabela, por exemplo: O qualificador de nome para a coluna DESCRICAO da tabela PRODUTO ser o PRODUTO.descrio
Os qualificadores de nomes so utilizados em uma consulta para efetivar a juno entre tabelas, uma vez que o relacionamento entre tabelas realizado por meio de chaves estrangeiras, e isto implica na existncia de colunas com o mesmo nome em tabelas diferentes.
SELECT cliente.nome_cliente, pedido.cod_cliente, pedido.num_pedido FROM cliente, pedido WHERE cliente.codigo_do_cliente = pedido.codigo_do_cliente; //Mostra os pedidos de cada cliente
Nesta juno, so apresentados os pedidos de cada cliente, pois a condio restringe e qualifica a juno dos dados entre as tabelas. A equao apresentada na clusula WHERE chamada de EQUAO DE JUNO.
6.5.17.2
Juntando tudo
SELECT cliente.nome_cliente, pedido.cod_cliente, pedido.num_pedido FROM cliente, pedido WHERE cliente.codigo_do_cliente = pedido.codigo_do_cliente AND UF IN (SP, RJ) AND pedido.prazo_entrega > 15 //Mostras os clientes que tm prazo de entrega superior a 15 dias e pertencem aos estados de So Paulo (SP) ou Rio de Janeiro (RJ). SELECT cliente.nome_cliente, pedido.prazo_entrega FROM cliente, pedido WHERE cliente.cod_cliente = pedido.cod_cliente ORDER BY pedido.prazo_entrega DESC; //Mostra os clientes e seus respectivos prazos de entrega, ordenados do maior para o menor.
Banco de Dados I
66
SELECT V.nome_vendedor, P.prazo_entrega FROM vendedor V, pedido P WHERE V.salario_fixo >= 1000.00 AND P.prazo_entrega > 15 AND V.cod_vendedor = P.cod_vendedor ORDER BY V.nome_vendedor; //Mostrar os vendedores (ordenados) que emitiram pedidos com prazo de entrega superior a 15 dias e tenham salrios fixos iguais ou superiores a R$ 1.000,00
6.5.18 Utilizando Consultas Encadeadas (Subqueries) Que uma subquery? Em linhas gerais, quando o resultado de uma consulta utilizado por outra consulta, de forma encadeada e contida no mesmo comando SQL. 6.5.18.1 Utilizando IN
SELECT descricao FROM produto WHERE cod_produto IN (SELECT cod_produto FROM item_pedido WHERE quantidade = 10) //Mostra os produtos que participam de qualquer pedido cuja quantidade seja 10.
6.5.18.2 Utilizando AVG
SELECT nome_vendedor FROM vendedor WHERE salrio_fixo < (SELECT AVG (salrio_fixo) FROM vendedor; //Mostra os vendedores que ganham um salrio fixo abaixo da mdia
6.5.18.3 Utilizando NOT IN
SELECT cod_produto, descricao FROM produto WHERE cod_produto NOT IN (SELECT * FROM item_pedido WHERE item_de_pedido.cod_produto = produto.cod_produto) //Mostra os produtos que no esto presentes em nenhum pedido
Na consulta anterior, a subquery no executada diretamente de uma vez s; ela executada para cada valor do registro do produto, ou seja, para cada execuo da subquery utilizado um valor do cdigo do produto dentro do produto, o qual comparado, via condio de subquery, com vrios valores em itens do pedido.