Universidade do Sul de Santa Catarina
Banco de Dados I Disciplina na modalidade a distância
3ª edição revista e atualizada
Palhoça UnisulVirtual 2008
banco_dados_I_2008a.indb 1
3/3/2008 16:48:22
Créditos Unisul - Universidade do Sul de Santa Catarina UnisulVirtual - Educação Superior a Distância Campus UnisulVirtual Avenida dos Lagos, 41 Cidade Universitária Pedra Branca Palhoça – SC - 88137-100 Fone/fax: (48) 3279-1242 e 3279-1271 E-mail:
[email protected] Site: www.virtual.unisul.br Reitor Unisul Gerson Luiz Joner da Silveira Vice-Reitor e Pró-Reitor Acadêmico Sebastião Salésio Heerdt Chefe de Gabinete da Reitoria Fabian Martins de Castro Pró-Reitor Administrativo Marcus Vinícius Anátoles da Silva Ferreira Campus Sul Diretor: Valter Alves Schmitz Neto Diretora adjunta: Alexandra Orsoni Campus Norte Diretor: Ailton Nazareno Soares Diretora adjunta: Cibele Schuelter
Coordenação dos Cursos Adriano Sérgio da Cunha Aloísio José Rodrigues Ana Luisa Mülbert Ana Paula Reusing Pacheco Bernardino José da Silva Charles Cesconetto Diva Marília Flemming Eduardo Aquino Hübler Fabiano Ceretta Francielle Arruda (auxiliar) Itamar Pedro Bevilaqua Janete Elza Felisbino Jorge Cardoso Jucimara Roesler Lauro José Ballock Luiz Guilherme Buchmann Figueiredo Luiz Otávio Botelho Lento Marcelo Cavalcanti Maria da Graça Poyer Maria de Fátima Martins (auxiliar) Mauro Faccioni Filho Michelle Denise Durieux Lopes Destri Moacir Fogaça Moacir Heerdt Nélio Herzmann Onei Tadeu Dutra Patrícia Alberton Rose Clér Estivalete Beche Raulino Jacó Brüning Rodrigo Nunes Lunardelli
Campus UnisulVirtual Diretor: João Vianney Diretora adjunta: Jucimara Roesler
Criação e Reconhecimento de Cursos Diane Dal Mago Vanderlei Brasil
Equipe UnisulVirtual
Desenho Educacional Daniela Erani Monteiro Will (Coordenadora)
Avaliação Institucional Dênia Falcão de Bittencourt Biblioteca Soraya Arruda Waltrick Capacitação e Assessoria ao Docente Angelita Marçal Flores (Coordenadora) Caroline Batista Elaine Surian Noé Vicente Folster Patrícia Meneghel Simone Andréa de Castilho
Design Instrucional Ana Cláudia Taú Carmen Maria Cipriani Pandini Carolina Hoeller da Silva Boeing Cristina Klipp de Oliveira Flávia Lumi Matuzawa Karla Leonora Dahse Nunes Leandro Kingeski Pacheco Lívia da Cruz Lucésia Pereira Luiz Henrique Milani Queriquelli Márcia Loch Viviane Bastos Acessibilidade Vanessa de Andrade Manoel Avaliação da Aprendizagem Márcia Loch (Coordenadora) Karina da Silva Pedro Sidneya Magaly Gaya
banco_dados_I_2008a.indb 2
Disciplinas a Distância Enzo de Oliveira Moreira (Coordenador) Marcelo Garcia Serpa
Monitoria e Suporte Rafael da Cunha Lara (Coordenador) Adriana Silveira Andréia Drewes Caroline Mendonça Cláudia Noemi Nascimento Cristiano Dalazen Dyego Helbert Rachadel Gabriela Malinverni Barbieri Jonatas Collaço de Souza Josiane Conceição Leal Maria Eugênia Ferreira Celeghin Maria Isabel Aragon Priscilla Geovana Pagani Rachel Lopes C. Pinto Tatiane Silva Vinícius Maykot Serafim
Gerência Acadêmica Márcia Luz de Oliveira Bubalo
Relacionamento com o Mercado Walter Félix Cardoso Júnior
Gerência Administrativa Renato André Luz (Gerente) Valmir Venício Inácio
Secretaria de Ensino a Distância Karine Augusta Zanoni Albuquerque (Secretária de ensino) Ana Paula Pereira Andréa Luci Mandira Andrei Rodrigues Carla Cristina Sbardella Djeime Sammer Bortolotti Franciele da Silva Bruchado James Marcel Silva Ribeiro Jenniffer Camargo Liana Pamplona Luana Tarsila Hellmann Marcelo José Soares Olavo Lajús Rosângela Mara Siegel Silvana Henrique Silva Vanilda Liordina Heerdt Vilmar Isaurino Vidal
Design Visual Cristiano Neri Gonçalves Ribeiro (Coordenador) Adriana Ferreira dos Santos Alex Sandro Xavier Edison Rodrigo Valim Fernando Roberto D. Zimmermann Higor Ghisi Luciano Pedro Paulo Alves Teixeira Rafael Pessi Vilson Martins Filho
Gerência de Ensino, Pesquisa e Extensão Ana Paula Reusing Pacheco Gerência de Produção e Logística Arthur Emmanuel F. Silveira (Gerente) Francisco Asp Gestão Documental Janaina Stuart da Costa Lamuniê Souza Logística de Encontros Presenciais Graciele Marinês Lindenmayr (Coordenadora) Aracelli Araldi Cícero Alencar Branco Daiana Cristina Bortolotti Douglas Fabiani da Cruz Fernando Steimbach Letícia Cristina Barbosa Priscila Santos Alves
Secretária Executiva Viviane Schalata Martins Tecnologia Osmar de Oliveira Braz Júnior (Coordenador) Jefferson Amorin Oliveira Marcelo Neri da Silva Pascoal Pinto Vernieri
Formatura e Eventos Jackson Schuelter Wiggers Logística de Materiais Jeferson Cassiano Almeida da Costa (Coordenador) José Carlos Teixeira
3/3/2008 16:48:26
Apresentação Este livro didático corresponde à disciplina Banco de Dados I. O material foi elaborado visando a uma aprendizagem autônoma, abordando conteúdos especialmente selecionados e adotando uma linguagem que facilite seu estudo a distância. Por falar em distância, isso não significa que você estará sozinho. Não esqueça que sua caminhada nesta disciplina também será acompanhada constantemente pelo Sistema Tutorial da UnisulVirtual. Entre em contato sempre que sentir necessidade. Nossa equipe terá o maior prazer em atendê-lo, pois sua aprendizagem é nosso principal objetivo. Bom estudo e sucesso! Equipe UnisulVirtual.
banco_dados_I_2008a.indb 3
3/3/2008 16:48:26
banco_dados_I_2008a.indb 4
3/3/2008 16:48:26
Marcelo Medeiros Luciano José Sávio
Banco de Dados I Livro didático
Design instrucional Flavia Lumi Matuzawa Viviane Bastos
3ª edição revista e atualizada
Palhoça UnisulVirtual 2008
banco_dados_I_2008a.indb 5
3/3/2008 16:48:27
Copyright © UnisulVirtual 2008 Nenhuma parte desta publicação pode ser reproduzida por qualquer meio sem a prévia autorização desta instituição.
Edição – Livro Didático Professores Conteudistas Marcelo Medeiros Luciano José Sávio
Design Instrucional Flavia Lumi Matuzawa Viviane Bastos Leandro Kingeski Pacheco
Projeto Gráfico e Capa Equipe UnisulVirtual Diagramação Rafael Pessi Adriana Ferreira dos Santos (atualização 3ª edição) Revisão Ortográfica Simone Rejane Martins
005.75 M43 Medeiros, Marcelo Banco de dados I : livro didático / Marcelo Medeiros, Luciano José Sávio ; design instrucional Flavia Lumi Matuzawa, Vivane Bastos. – 3. ed. rev. e atual. – Palhoça : UnisulVirtual, 2008. 240p. : il. ; 28 cm. Inclui bibliografia. 1. Banco de dados. I. Sávio, Luciano José. II. Matuzawa, Flavia Lumi. III. Bastos, Viviane. IV. Título. Ficha catalográfica elaborada pela Biblioteca Universitária da Unisul
banco_dados_I_2008a.indb 6
3/3/2008 16:48:27
Sumário Palavras dos professores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 09 Plano de estudo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 UNIDADE UNIDADE UNIDADE UNIDADE UNIDADE UNIDADE
1 2 3 4 5 6
– – – – – –
Banco de Dados e a Tecnologia da Informação . . . . . . . . . 15 Conceitos de bancos de dados . . . . . . . . . . . . . . . . . . . . . . . . . 31 Modelagem de Dados e Projeto de Banco de Dados . . . . 63 Produtos de Banco de Dados . . . . . . . . . . . . . . . . . . . . . . . . . . 83 Implementação do Projeto de Banco de Dados . . . . . . . . 111 Ferramentas CASE para apoio ao Projeto de Banco de Dados. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135 UNIDADE 7 – Acesso e manipulação de Dados . . . . . . . . . . . . . . . . . . . . . . 155 UNIDADE 8 – Recuperação de informações do Banco de Dados . . . . . . 173 UNIDADE 9 – Recuperação de informações através de tabelas . . . . . . . 201 Para concluir o estudo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223 Referências . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225 Sobre os professores conteudistas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227 Respostas e comentários das atividades de auto-avaliação . . . . . . . . . . . . 229
banco_dados_I_2008a.indb 7
3/3/2008 16:48:27
banco_dados_I_2008a.indb 8
3/3/2008 16:48:27
Palavras dos professores Olá, você esta iniciando o estudo da disciplina Banco de Dados I. Se você parar um pouco para avaliar o seu dia a dia, notará que convive com um mundo de informações, que são usadas nas suas atividades diárias, por mais simples que sejam. Ao fazer uma ligação telefônica, realizar uma compra ou simplesmente utilizar o seu meio de transporte até o trabalho, um conjunto de informações são necessárias para que cada uma destas atividades seja realizada de forma rápida e eficiente. Nessa disciplina você conhecerá sobre as formas de armazenamento e acesso aos dados gravados no computador e sobre algumas ferramentas existentes no mercado de trabalho que permitirão a você organizar suas informações de forma confiável. Verá também que o ambiente de banco de dados utiliza uma linguagem padrão para manipulação dos dados, chamada de SQL. Enfim, você poderá entender melhor o funcionamento das principais ferramentas de banco de dados e poderá criar alguns modelos de banco de dados e manipulá-os de forma prática. Espero que você possa aproveitar ao máximo o conteúdo desta disciplina. Bom estudo! Profs. Marcelo Medeiros e Luciano Sávio
banco_dados_I_2008a.indb 9
3/3/2008 16:48:27
banco_dados_I_2008a.indb 10
3/3/2008 16:48:27
Plano de estudo O plano de estudo visa orientá-lo/a no desenvolvimento do Projeto Integrador. Nele, você encontrará elementos que esclarecerão o contexto do mesmo e sugerirão formas de organizar o seu tempo de estudos. O processo de ensino e aprendizagem na UnisulVirtual leva em conta instrumentos que se articulam e se complementam. Assim, a construção de competências se dá sobre a articulação de metodologias e por meio das diversas formas de ação/mediação. São elementos desse processo:
o livro didático;
o Espaço UnisulVirtual de Aprendizagem EVA;
as atividades de avaliação a distância (não serão feitas avaliações presenciais);
o Sistema Tutorial.
Ementa Origens de um sistema de banco de dados. Características de um sistema de banco de dados. Modelo de dados. Bancos de dados relacionais e orientados a objetos. Linguagens de definição e manipulação de dados. Modelos de entidaderelacionamento. Ferramentas computacionais para implementação de bancos de dados. Perfil do profissional de banco de dados.
banco_dados_I_2008a.indb 11
3/3/2008 16:48:27
Universidade do Sul de Santa Catarina
Objetivo geral A disciplina de Banco de Dados I tem como objetivo apresentar e compreender o desenvolvimento e a utilização de sistemas de Banco de Dados. Para isso, serão trabalhados os conceitos fundamentais sobre Banco de Dados, os seus sistemas de gerenciamento, formas de modelagem de dados e as características da linguagem de programação para Banco de Dados.
Objetivos específicos
Definir conceitos básicos sobre banco de dados e a sua forma de funcionamento.
Apresentar as principais ferramentas de sistema de banco de dados do mercado atual.
Mostrar a linguagem de programação para banco de dados SQL.
Possibilitar ao aluno a criação e manipulação de um modelo de banco de dados.
Apresentar ao aluno os conceitos de bancos de dados orientados a objeto.
Atualizar o aluno sobre as tendências de ferramentas e profissionais para área de banco de dados.
Carga horária
A carga horária total da disciplina é de 60 horas-aula.
12
banco_dados_I_2008a.indb 12
3/3/2008 16:48:27
Banco de Dados I
Agenda de atividades/ Cronograma
Verifique com atenção o EVA, organize-se para acessar periodicamente o espaço da Disciplina. O sucesso nos seus estudos depende da priorização do tempo para a leitura; da realização de análises e sínteses do conteúdo; e da interação com os seus colegas e tutor.
Não perca os prazos das atividades. Registre no espaço a seguir as datas, com base no cronograma da disciplina disponibilizado no EVA.
Use o quadro para agendar e programar as atividades relativas ao desenvolvimento da Disciplina.
13
banco_dados_I_2008a.indb 13
3/3/2008 16:48:28
Universidade do Sul de Santa Catarina
Cronograma de estudo Atividades obrigatórias
Demais atividades (registro pessoal)
14
banco_dados_I_2008a.indb 14
3/3/2008 16:48:28
UNIDADE 1
Banco de Dados e a Tecnologia da Informação
1
Objetivos de aprendizagem
Compreender a importância dos bancos de dados na área de Tecnologia da Informação.
Entender a evolução dos sistemas de armazenamento para Sistemas Gerenciadores de Banco de Dados.
Compreender o papel dos profissionais de banco de dados.
Seções de estudo Seção 1 Banco de Dados e a área de Tecnologia da Informação.
Seção 2 De Sistemas de Arquivos a Sistemas Gerenciadores de Banco de Dados.
Seção 3 O mercado de trabalho e seus profissionais.
banco_dados_I_2008a.indb 15
3/3/2008 16:48:28
Universidade do Sul de Santa Catarina
Para início de estudo Nesta unidade será contextualizada a área de banco de dados nas organizações, sua importância, bem como dos profissionais que nela atuam e também como os bancos de dados evoluíram e se consolidaram no mercado. Porém, para compreender melhor o mercado de informática voltado para área de banco de dados, é preciso analisá-lo a partir de dois importantes aspectos, que são: a informática como meio de produção ou a informática como produto final. Mas o que significa analisar estes aspectos dos Bancos de Dados?
Quando uma empresa utiliza a informática como complemento à sua produção, ou à criação do seu produto final, não está vendendo um serviço de informática, mas sim utilizando-se desse serviço para alcançar os seus objetivos. Essa empresa usa a informática como um processo complementar às suas atividades, por isso é referida como empresa que utiliza a informática como meio. Um exemplo disso são os supermercados. Um supermercado utiliza a informática, os sistemas de banco de dados e softwares para permitir que seus clientes realizem os serviços desejados. Entretanto, esse serviço não está sendo diretamente vendido ao cliente, que muitas vezes nem se dá conta da quantidade de recursos de informática que foram necessários para a realização de determinada tarefa. Há também no mercado as empresas que têm a informática como seu principal produto, criando softwares, realizando consultorias na área da computação, instalando e montando equipamentos. Essas empresas têm a informática como seu produto final. Por exemplo, a MicroSoft é uma empresa que tem na criação de produtos de informática, nesse caso, softwares, o seu principal recurso financeiro. A informática é o produto final da sua linha de produção e seus produtos serão utilizados como meio de produção em muitas empresas de todo o mundo.
16
banco_dados_I_2008a.indb 16
3/3/2008 16:48:28
Banco de Dados I
Você deve estar se perguntando: “e daí”? Bem, como temos cenários diferentes para o uso da informática, temos também necessidades de profissionais diferentes para desenvolver as tarefas do dia-a-dia. E é nesse escopo que esta unidade será inserida, de forma a apresentar a você, o contexto da área de banco de dados dentro da Tecnologia da Informação das empresas, o papel dos profissionais que estão envolvidos com a informática, seja ela produto meio ou fim. Além disso, você vai conhecer como ocorreu a evolução dos sistemas de armazenamento de dados até o advento dos Sistemas Gerenciadores de Banco de dados ou SGBDs.
SEÇÃO 1 – Banco de Dados e a área de Tecnologia da Informação A Tecnologia da Informação, ou simplesmente TI, está em constante evolução, assim como tudo na área da informática. A cada dia surgem novos conceitos e jargões utilizados pelo mercado, a fim de representar uma nova tecnologia, técnica ou mesmo um novo produto. Se vocês fizerem uma pesquisa pela rede mundial, poderão se deparar com termos já não mais utilizados, ou em desuso no mercado da informática, como por exemplo, downsizing, rightsizing, mainframe, dentre outros, mas que em algum momento da história estiveram presentes e indicavam algum tipo de técnica ou tecnologia utilizada. Atualmente, banco de dados está posicionada nas áreas de TI das empresas juntamente com as áreas de redes, telecomunicações e hardware, formando a infra-estrutura base da área de informática destas empresas. Ter uma infra-estrutura consolidada e robusta é indispensável para qualquer organização, pois representa segurança nas operações fundamentais para o fluxo das informações na empresa. Dentre estas operações fundamentais destacam-se o fornecimento de informações e os mecanismos que permitem com que estas informações circulem pela organização. Unidade 1
banco_dados_I_2008a.indb 17
17
3/3/2008 16:48:28
Universidade do Sul de Santa Catarina
Os elementos formadores da área de infra-estrutura são ditos de funções críticas, ou seja, muito importantes para que toda a área de TI funcione adequadamente. Imagine você em uma empresa com 500 pontos de redes interconectados, utilizando-se de 25 tipos de softwares. Todo este pessoal depende exclusivamente das redes de comunicações, para que consiga trocar e armazenar informações, e também do banco de dados, onde as informações utilizadas por estes usuários são registradas através dos sistemas de informação e processadas. Seguindo esta lógica, qualquer problema envolvendo algum elemento da área de infra-estrutura pode causar uma paralização das atividades de grande parte da empresa, inviabilizando o trabalho de muitas pessoas. Daí, atualmente, a grande importância atribuída à esta área e, conseqüentemente, ao banco de dados das organizações. O elemento principal responsável pelo fornecimento das informações na área de TI é, sem dúvida, o banco de dados, ou melhor, o Sistema Gerenciador de Banco de Dados. Ele é o responsável por toda a manutenção da informação que é mantida pela empresa, conforme apresentado na próxima seção.
SEÇÃO 2 – De Sistemas de Arquivos a Sistemas Gerenciadores de Banco de Dados O armazenamento de dados passou por algumas transformações e adaptações ao longo do tempo. Estas mudanças se deram em função da evolução da tecnologia, com novos equipamentos e soluções para o armazenamento de dados, e também pela própria evolução das novas necessidades de armazenamento de dados, dentre elas, a necessidade do armazenamento de volumes cada vez maiores de informação, além da recuperação e armazenamento mais rápidos e eficientes, com maior segurança.
18
banco_dados_I_2008a.indb 18
3/3/2008 16:48:28
Banco de Dados I
Até 30 anos atrás, o foco principal da área de informática estava no processamento dos dados e no aprimoramento da tecnologia para que este processamento tivesse melhor performance. tTrabalhou-se muito para que os processadores, memória e o conjunto de componentes internos evoluíssem e se tornassem cada vez mais performáticos e seguros nas suas operações. Uma vez que se adquiriu uma qualidade significativa com estes elementos, uma necessidade pelo armazenamento mais seguro das informações começou a ser delineada, já que, com muita capacidade de processamento à disposição, deveria haver mecanismos para que se armazenasse o resultado deste processamento ou que servisse de fonte de informações para serem processadas. Esta nova necessidade de armazenar mais e mais informações levou a área de informática a desenvolver novas tecnologias para que pudesse suportar maiores capacidades de armazenamento e que estas informações fossem armazenadas com um mínimo de segurança e confiabilidade. Com o aumento da capacidade de armazenamento e recuperação das informações, e também com o desenvolvimento de novas metodologias de desenvolvimento de softwares, tornou viável o processamento de grandes volumes de informações, e as organizações passaram a se informatizar num ritmo mais acelerado, vislumbrando maior agilidade e conseqüentemente maior competitividade no mercado em que estavam inseridas. A arquitetura utilizada pelos sistemas de informação era bastante simples, conforme mostra a figura a seguir. SISTEMAS Contabilidade
Estoque
Arq 1
Arq 2
RH
Arq 3
ARQUIVOS DE DADOS Figura 1.1 – Arquitetura de Sistemas de Informação
Unidade 1
banco_dados_I_2008a.indb 19
19
3/3/2008 16:48:28
Universidade do Sul de Santa Catarina
De acordo com a Figura 1.1, nesta arquitetura cada sistema de informação é proprietário, detentor da sua própria base de dados. Isto significa que cada sistema de informação detém o conhecimento, quero dizer, código de como manipular os dados mantidos e quais as regras que devem ser seguidas para que se insira, altere ou elimine cada uma das informações ali armazenadas. Neste tipo de arquitetura, fica evidente algumas limitações, como por exemplo, a necessidade de redundância das informações, ou seja, informações idênticas cadastradas em mais de um sistema. Um exemplo claro desta limitação é o fato de que existem informações que são de uso de vários departamentos da empresa. Estas informações são denominadas informações corporativas. Como nesta arquitetura cada sistema mantém seu próprio arquivo de dados, se o sistema X necessita do endereço do cliente e o sistema Y também necessita desta informação, esta será registrada em duplicidade. Ao longo do tempo esta redundância pode acarretar problemas, pois caso o cliente atualize o endereço no departamento X, eventualmente o departamento Y pode não ser informado desta atualização, gerando dados inexatos na organização. Outra limitação que pode ser identificada é no que diz respeito ao compartilhamento das informações. Como cada sistema mantém o controle de como acessar e manipular as informações nos seus arquivos de dados, os demais sistemas estão limitados a trabalharem apenas com as informações de seus próprios arquivos, por não possuírem conhecimento da estrutura de organização dos arquivos de dados dos outros sistemas, não sendo possível efetuar o seu acesso. Mas apesar das limitações, esta arquitetura cumpria com o seu papel, uma vez que a consolidação das informações e o compartilhamento dos dados não era uma necessidade premente, pois as empresas estavam organizadas departamentalmente. Houve, porém, uma mudança significativa na forma como as empresas estavam sendo administradas. Por uma nova necessidade de mais agilidade, as organizações começaram a ter o estilo de administração por processos, ao invés do estilo departamental. Neste tipo de administração, uma ação ocorrida num departamento, pode ecoar em alterações em diversos outros setores da empresa. Veja um exemplo prático. 20
banco_dados_I_2008a.indb 20
3/3/2008 16:48:29
Banco de Dados I
Caso o setor de almoxarifado pretenda contratar um novo funcionário, este deve comunicar ao setor de RH, o qual deve comunicar ao pessoal de recrutamento e seleção, além de comunicar ao setor financeiro que a folha de pagamento vai passar a ter gastos extras. A área de finanças por sua vez, deve comunicar ao pessoal de vendas que as estas devem aumentar, pois os gastos aumentaram. O pessoal de vendas se comunica com a produção que deve ser incrementada, a fim de suprir as novas vendas.
Um novo desafio foi lançado: como prover tamanha integração entre os sistemas de forma a suportar esta nova necessidade administrativa? Um dos reflexos imediatos foi que esta arquitetura, na qual estavam arquitetados os sistemas de informação, logo começou a apresentar dificuldades para se manter, uma vez que uma nova necessidade passou a ser cobrada por parte das organizações, o compartilhamento das informações entre os diversos sistemas. Isso decorre das práticas administrativas das empresas que estavam em franca evolução e à troca de informações entre os diversos departamentos passou a ser elemento fundamental para que as empresas pudessem ter maior agilidade nos seus processos e conseqüentemente adquirir maior competitividade no mercado. A partir desta necessidade, a arquitetura para a implementação de sistemas de informação passou a ter que vencer um grande obstáculo: permitir o compartilhamento de informações entre os diversos sistemas existentes. Cabe citar aqui, que a 20, 30 anos atrás não havia tecnologias tão avançadas para interoperabilidade e interconectividade entre as tecnologias existentes, desta forma, não era trivial encontrar sistemas operacionais conversando entre si, nem tampouco sistemas de informação compartilhando informações. Neste momento, você pode perguntar: mas não basta apenas o Sistema X acessar a base de dados do Sistema Y para que se compartilhem as informações? Realmente é apenas este o desafio e por quê está sendo tratado como desafio? Por duas razões principais:
Unidade 1
banco_dados_I_2008a.indb 21
21
3/3/2008 16:48:29
Universidade do Sul de Santa Catarina
1. O sistema de informação X não tem conhecimento de como o sistema Y trabalha os seus dados, pois toda a estrutura e as regras de manipulação dos dados armazenados estão codificadas dentro do sistema Y. Como exemplo, imagine que o sistema X precise armazenar uma nova informação na base de dados do sistema Y. Como ele vai conseguir isto se não tem conhecimento de quais as regras estabelecidas para que se faça a inserção desta nova informação? Assim sendo, fica muito difícil um sistema compartilhar uma informação de outro sistema, inclusive tendo que manter informações duplicadas em vários sistemas, incorrendo na redundância de dados, causando mais dificuldades para a manutenção e o seu controle. Novamente você pode concluir: simples, basta que um sistema conheça como o outro sistema trabalha os seus dados!!! Isto mesmo, mas para que isto ocorra implica numa questão de mercado, de concorrência, apresentada no próximo item. 2. O mercado de algum tempo atrás era muito segmentado e com atuações pontuais. Desta forma, a empresa A fornecia o software para RH e Finanças, por exemplo. A empresa B fornecia o software para Vendas e Estoque, assim por diante. Como as organizações estavam orientadas a trabalhar de forma departamental, ou seja, cada departamento resolvia os seus problemas internamente, normalmente cada departamento também escolhia no mercado o software que mais se adaptava às suas necessidades e o adquiria, sem a preocupação com o compartilhamento das informações com outros departamentos e outros sistemas. Com esta nova necessidade de compartilhamento de informações, passou-se a ter grandes dificuldades, pois os softwares adquiridos pelos diversos departamentos não conversavam entre si, e por duas razões principais: ou a tecnologia utilizada era incompatível entre si, dificultando a interoperabilidade, ou o próprio fabricante do software não tinha o menor interesse em abrir a estrutura dos dados do seu software para outro fabricante, que inclusive poderia ser seu concorrente em outros softwares.
22
banco_dados_I_2008a.indb 22
3/3/2008 16:48:29
Banco de Dados I
Como pode ser percebido, a arquitetura para os sistemas de informação apresentada na figura 1.1 já não era a mais adequada para as necessidades atuais das organizações. Então começaram a ser trabalhadas novas alternativas para a problemática do compartilhamento das informações e para a diminuição da redundância dos dados. A alternativa que obteve mais êxito e aceitação foi a de que os sistemas de informação se tornassem clientes das bases de dados, e não mais proprietários, a fim de proporcionar um método de acesso único a estas bases de dados, de forma que qualquer sistema de informação pudesse se conectar a qualquer base de dados e dela compartilhar as informações de seu interesse. Para que os sistemas de informação pudessem se tornar clientes de bases de dados, alguém deveria prover um método único e padronizado para o acesso a bases de dados e também armazenar as regras de manipulação dos dados mantidos por ela. Começava a nascer um novo tipo de aplicação, o gerente para as bases de dados, ou mais propriamente falando, o Sistema Gerenciador de Banco de Dados - SGBD. Para que o SGBD pudesse ser contemplado, uma nova arquitetura para a construção de sistemas de informação deveria ser definida. Esta arquitetura é apresentada na figura 1.2. SISTEMAS Contabilidade
Estoque
RH
SGBD
BD 1
BD 2
BD 3
BD 4
Figura 1.2 – Arquitetura de Sistemas de Informação com SGBD
Unidade 1
banco_dados_I_2008a.indb 23
23
3/3/2008 16:48:29
Universidade do Sul de Santa Catarina
O SGBD atua como um elemento intermediário entre os sistemas de informação e a base de dados, padronizando a forma de acesso às informações ali mantidas, proporcionando o compartilhamento das informações entre os sistemas e atuando fortemente no controle da redundância dos dados, uma vez que vários sistemas podem acessar uma mesma informação, não necessitando armazená-la novamente, com duplicação. Nas próximas unidades, este assunto será trabalhado de forma mais técnica.
Mas afinal, o que é SGBD? O SGBD nada mais é do que um sistema intermediário que atua entre os sistemas de informação e a base de dados, provendo aos sistemas as informações armazenadas através de mecanismos eficientes e seguros, a fim de proporcionar maior performance no armazenamento e recuperação das informações, além de garantir integridade e consistência aos dados.
O SGBD então assume a responsabilidade pela manutenção das informações, retirando esta responsabilidade dos sistemas de informação. Portanto, se uma data é inválida, ou se uma informação depende de uma outra para poder ser armazenada, o sistema de informação não precisa mais se preocupar com isto, pois estas questões ficam a cargo do SGBD. Assim sendo, os sistemas de informação puderam se preocupar muito mais e dedicar mais esforços em ergonomia e apresentação das informações ao usuário, deixando a tarefa de tratamento das informações com os SGBDs. Agora que está mais claro o surgimento e a consolidação dos SGBDs no mercado da informática, veja, na próxima seção, a importância e o papel dos profissionais que atuam nesta área.
24
banco_dados_I_2008a.indb 24
3/3/2008 16:48:29
Banco de Dados I
SEÇÃO 3 – O mercado de trabalho e seus profissionais Dentro de uma análise em que a informática é tida como produto fim, de forma resumida, o mercado de trabalho na área de informática pode ser dividido em três grandes linhas profissionais:
desenvolvimento de software - programadores;
análise de sistemas.
Na primeira opção tem-se o especialista em linguagens e técnicas de programação de computadores, que é aquele profissional que domina algumas linguagens de programação, tendo como sua principal base de conhecimento os algoritmos. Já na segunda, tem-se o profissional com alta capacidade analítica, que domina metodologias de modelagem e desenvolvimento de sistemas. Então qual é a terceira linha profissional na área da informática?
Nesse caso é que entra o profissional de banco de dados. Ele não está em uma única categoria dentro das áreas citadas. Talvez esteja aí a grande complexidade nas atividades desse profissional. Um programador de computador é responsável por transformar as tarefas executadas pelo ser humano em um conjunto de comandos que serão executados pelo computador. Porém quando essas atividades envolvem armazenamento de dados, passa a ser necessário um especialista para projetar e manipular o modelo de banco de dados criado. O mesmo tipo de problema pode ocorrer quando um analista de sistemas precisa modelar um sistema que envolva banco de dados. Será necessário que ele tenha um especialista em banco de dados para auxiliá-lo nesse processo de modelagem.
Unidade 1
banco_dados_I_2008a.indb 25
25
3/3/2008 16:48:29
Universidade do Sul de Santa Catarina
É importante que se distinga a tarefa de modelar um sistema de a tarefa de modelar um banco de dados:
quando o analista está modelando um sistema, ele está na verdade definindo todas as atividades de interação do usuário para com o sistema que será implementado;
já a modelagem do banco de dados representa a forma como os dados que são manipulados pelo sistema serão armazenados.
Modelar sistema - define as regras de interação do usuário com o sistema. Modelar banco de dados - define as regras de armazenamento dos dados que serão manipulados pelo sistema.
O profissional de banco de dados interage com o programador e como analista de sistemas, formando uma equipe de desenvolvimento. A não ser em casos muito específicos essa interação pode ser realizada. Se a interação do profissional de banco de dados na área de informática é alta, quando se analisa as empresas em que a informática é o meio de produção, ela se torna maior ainda, pois na maioria das vezes esse profissional interage com profissionais das mais diversas áreas. Dentro de um ambiente desses, o profissional de banco de dados possui as mais diversas tarefas, que são de grande importância para o funcionamento da empresa, pois todos os processos da empresa estão baseados no seu desempenho. Conheça algumas atividades executadas por esse profissional.
População das tabelas dos bancos de dados – cadastramento de dados.
Manutenção do banco de dados – garantir que o mesmo não pare de funcionar.
Backup dos dados – realizar a cópia de segurança dos dados para garantir a fidelidade dos mesmos.
26
banco_dados_I_2008a.indb 26
3/3/2008 16:48:30
Banco de Dados I
Gerenciar o banco de dados – definir senhas e prioridades de acesso ao sistema, evitando que acessos indevidos sejam realizados.
Manter o contato com o fabricante da ferramenta de banco de dados – para realização de atualizações e instalações de novos recursos.
Observe que essas atividades são fundamentais para que a empresa se mantenha em funcionamento. A maioria das atividades de produção é dependente do sistema de banco de dados, por isso é grande a responsabilidade desse profissional, ou da equipe que ele gerencia. Quanto maior for a organização, maior a complexidade do sistema de banco de dados e conseqüentemente maior deve ser a equipe envolvida. Em pequenas organizações é comum encontrar o analista de sistemas atuando como programador, modelando banco de dados e gerenciando os projetos de informática.
Síntese Nesta unidade, você pôde observar que a área de banco de dados é essencial para que se consiga uma área de TI consolidada e robusta, pois estas ferramentas propiciam maior agilidade e garantia no armazenamento das informações, essenciais para qualquer organização na sociedade em que vivemos. Esta agilidade e garantia no armazenamento serão melhor discutidas nas próximas unidades desta disciplina, onde poderão ser constatados diversos mecanismos presentes nos SGBDs que proporcionem estas características com relação ao armazenamento dos dados. Os SGBDs são fruto de uma evolução nos sistemas de armazenamento, inicialmente constituídos apenas um sistema de arquivos de dados onde os sistemas de informação os manipulavam diretamente, evoluindo para um modelo onde há uma padronização na forma de acesso aos dados através da figura do gerente dos dados, ou Sistemas Gerenciadores de Banco de Unidade 1
banco_dados_I_2008a.indb 27
27
3/3/2008 16:48:30
Universidade do Sul de Santa Catarina
Dados. Isto proporcionou um compartilhamento mais eficiente das informações armazenadas, bem como na diminuição da redundância dos dados armazenados. Foi apresentado também, nesta unidade, o papel do profissional de banco de dados e como está organizado o mercado de trabalho para estes profissionais. Este profissional tem tido importante posição no mercado de trabalho, principalmente pelo grande fluxo de informações que trafegam nesse mundo globalizado. É praticamente inadmissível que nos dias atuais alguém utilize papel ou algo similar como forma de organizar e armazenar informações para suas atividades do dia-a-dia. E é junto a essa quantidade de informações que o profissional de tecnologia da informação executará as suas tarefas de projetar, criar e manipular um conjunto de sistemas de banco de dados, essenciais ao funcionamento de uma empresa que tenha a informática como produto final, ou como meio de produção. Nesse mercado, esse profissional deve estar atento às diversas tendências, avaliando novas ferramentas e novas tecnologias, mantendo-se sempre atualizado, sem nunca esquecer que sua ferramenta de trabalho é o seu cérebro, seus conhecimentos adquiridos, tendo o computador como a ferramenta que irá auxiliá-lo nas tarefas diárias.
Atividades de auto-avaliação 1) Por que a área de banco de dados é considerada crítica numa empresa?
28
banco_dados_I_2008a.indb 28
3/3/2008 16:48:30
Banco de Dados I
2) Na maioria dos países de primeiro mundo, as empresas utilizam um profissional especialista para cada área. O analista de sistemas e o programador executam cada um a sua tarefa. Já no Brasil, o profissional de informática tenda a agrupar todas as funções numa única pessoa. Em sua opinião, porque isso acontece?
3) Quais os principais benefícios proporcionados pelo surgimento do SGBD para as empresas?
Unidade 1
banco_dados_I_2008a.indb 29
29
3/3/2008 16:48:30
banco_dados_I_2008a.indb 30
3/3/2008 16:48:30
UNIDADE 2
Conceitos de bancos de dados Objetivos de aprendizagem
Compreender o conceito de banco de dados.
Conhecer os diferentes tipos de banco de dados.
Entender a arquitetura que compõe um banco de dados.
2
Seções de estudo Seção 1 Conceitos de banco de dados. Seção 2 Tipos de sistemas de gerenciamento de banco de dados.
Seção 3 Modelos de banco de dados.
banco_dados_I_2008a.indb 31
3/3/2008 16:48:30
Universidade do Sul de Santa Catarina
Para início de estudo O computador é uma máquina e como tal deve ser sempre assim referenciado. Essa máquina possui algumas características que a distingue das demais, como a velocidade de processamento e a capacidade de armazenamento. É considerado um equipamento, que com o passar dos anos se tornou de uso pessoal e profissional, podendo ser usado no lazer e no dia-a-dia, nas mais variadas tarefas e de complexidades mais diversas. Olhando por um prisma mais direto, o computador possui três tarefas básicas, que são: entrada de dados, processamento de dados e saída de dados. A entrada de dados é responsável pela importação das informações para o computador e está diretamente relacionada à interação com usuário, pois na maioria das vezes depende da informação digitada pelo mesmo, na forma mais simples de interação, o teclado. Já a saída de dados representa os dados informados na entrada, mas que de alguma forma foram transformados atendendo as expectativas do usuário e são apresentados por meio de algum dispositivo de saída, como impressora ou monitor.
A essa transformação dos dados da entrada em dados da saída chama-se processamento.
Até aqui, se fosse apenas isso, seria muito mais simples compreender o ambiente em volta de um computador, porém com o passar dos anos uma nova propriedade foi adicionada a essas três tarefas, e não sendo menos importante: o armazenamento dos dados. Tão importante quanto informar os dados, processá-los e apresentá-los, a organização e o armazenamento desses dados passaram a ser uma tarefa essencial, principalmente pelo grande número de usuários que interagem com o equipamento ao mesmo tempo. Com passar dos anos, o número de dados processados por um computador cresceu de forma assustadora, e de forma inversamente proporcional o computador tem 32
banco_dados_I_2008a.indb 32
3/3/2008 16:48:30
Banco de Dados I
diminuído de dimensões físicas e aumentado a sua capacidade de armazenamento e processamento de dados, tornando-se cada vez mais pessoal. Gerenciar e armazenar dados tornou-se uma tarefa complexa, que envolve muitas ferramentas e tecnologias de armazenamento e acesso aos dados. Com a grande evolução da computação em geral, ou da informática em geral, os equipamentos têm evoluído muito, deixando seu custo mais acessível. Com isso, o uso dos computadores tem atingido os mais variados perfis de usuários, dos mais experientes – que o usam sem nenhuma dificuldade–, aos mais novatos – que o vêem como uma “máquina do outro mundo”. Dessa forma, o parque tecnológico em todo o mundo tem atingido números expressivos. Fazendo uma matemática simples, imagine que a principal finalidade do computador é armazenar dados que possam ser acessados a qualquer momento e em qualquer lugar do mundo; quanto maior o número de computadores, maior o número de dados para serem gerenciados e processados. Como a tendência é que esse número deva aumentar a cada ano, a complexidade dos dados armazenados deverá ser um grande problema da área de informática. Seria possível resumir em: mais computadores significam mais problemas?
Em paralelo ao grande número de novos usuários de computadores, bem como a expansão na facilidade de acesso aos computadores e às novas tecnologias em hardware, há também o surgimento de novas ferramentas computacionais para gerenciamento e integridade dos dados. Essa demanda gera uma nova expectativa ao profissional da informática quanto ao seu envolvimento com as tecnologias de banco de dados. Além de ser um especialista em banco de dados, o profissional deve ter capacidade de compreender as diferentes tecnologias do mercado, de escolher aquela que melhor atenda às suas necessidades e deve propor e modelar soluções aos diversos problemas que farão parte das suas atividades profissionais.
Unidade 2
banco_dados_I_2008a.indb 33
33
3/3/2008 16:48:31
Universidade do Sul de Santa Catarina
A esse conjunto que envolve ferramentas computacionais, gerenciamento de dados, armazenamento e integridade aos dados, chamase sistema de gerenciamento de banco de dados.
E é nesse mundo que você embarca, a partir de agora, interagindo com um mundo de armazenamento e manipulação de dados. Seja bem-vindo!
SEÇÃO 1 – Conceitos de banco de dados Quando me refiro ao computador como uma máquina, tenho como foco a sua capacidade de gerenciamento e armazenamento de informações. Vale salientar que as outras propriedades, como velocidade de processamento e fácil interação com usuário, são também muito importantes, porém como o escopo desta disciplina é banco de dados, será dada maior ênfase ao armazenamento dos dados. De forma simplificada, pode-se conceituar banco de dados como sendo um sistema de armazenamento de dados baseado em computador, cujo objetivo é registrar e manter informações consideradas significativas a qualquer organização ou a um único usuário. (DATE, 1990)
É importante que você se atenha aos seguintes aspectos: Um banco de dados é um sistema de armazenamento de dados baseado nos relacionamentos entre elementos de dados, buscando a não-redundância dos dados. (SALEMI, 1983)
34
banco_dados_I_2008a.indb 34
3/3/2008 16:48:31
Banco de Dados I
O banco de dados possui uma estrutura física que representa os dados que estão armazenados, com estruturas e regras de manipulação bem definidas. No caso da computação, o banco de dados representa o arquivo físico de dados armazenados em dispositivos periféricos, nos quais estão os dados de diversos sistemas para consulta e atualização pelo usuário. Sendo assim, a partir dos conceitos anteriormente citados, pode-se chegar a um conceito mais amplo de banco de dados: Banco de dados é um sistema de armazenamento que possui um arquivo físico de dados armazenados em dispositivos periféricos, nos quais estão armazenados os dados relacionados entre si, de diversos sistemas, para consulta e atualização pelo usuário.
Definindo “dado” e “informação” Uma vez que você teve o primeiro contato com o conceito de banco de dados, é importante que se defina um aspecto importante, a diferença entre dado e informação. A princípio parecem ter o mesmo significado, mas quando se refere a esse tema no escopo de banco de dados, existe sim uma significativa diferença. O dado é o valor cadastrado no banco de dados, que será exportado para o usuário por meio das consultas realizadas. Cada conjunto de informações exportadas, ou listadas, está diretamente relacionado à forma pela qual foi definida a regra de seleção dos dados. Neste contexto, um dado pode ser representado pelo nome de um cliente, pela rua onde mora, número da casa, enfim, dado representa um elemento de informação. A informação diz respeito a um conjunto de dados que, devidamente contextualizados, representam algo para o usuário. Por exemplo, rua, número da casa, bairro, CEP, cidade, estado (UF) podem ser encarados como dados cadastrais de um cliente, porém, o conjunto destes dados compõe uma informação, representando o endereço completo do cliente. Unidade 2
banco_dados_I_2008a.indb 35
35
3/3/2008 16:48:31
Universidade do Sul de Santa Catarina
Os dados abrangem uma grande e variada forma de representação. Como qualquer informação armazenada no banco de dados é um dado, eles podem representar qualquer tipo de informação, como uma data, uma hora, um nome, uma idade, etc. Assim sendo, os dados serão armazenados num banco de dados sob um determinado padrão pré-estabelecido, visando delimitar o que pode ser armazenado como um valor para o dado. Estes padrões são denominados Tipos de Dado, onde cada dado definido como elemento componente de um SGBD deve estar associado ao seu tipo de dado correspondente. Seguindo este raciocínio, podemos encontrar num banco de dados um tipo de dado que só armazena números inteiros utilizado, por exemplo, para armazenar o número de uma nota fiscal, ou o código do DDD de um número de telefone. Já para armazenar uma data de nascimento o tipo inteiro não consegue representá-la, pois as regras que regem as datas são mais complexas, por exemplo, se tentarmos armazenar a data de 31/02/2008 em um tipo data, certamente o SGBD não aceitará este valor, uma vez que esta data é inválida. As regras de definição dos dados são essenciais para manter os dados dentro de um padrão esperado e de fácil compreensão. Não faz muito sentido utilizar um dado do tipo inteiro para se armazenar o nome de uma pessoa, pois dessa forma o armazenamento dos dados não estará representando fielmente a realidade.
Sistemas de gerenciamento de banco de dados (SGBD) Dentro da informática em geral, principalmente quando se refere ao desenvolvimento de softwares, o banco de dados recebe uma nomenclatura bem mais ampla: sistema gerenciador de banco de dados, ou simplesmente SGBD. O SGBD é o software responsável pelo gerenciamento, armazenamento e recuperação dos dados no banco de dados.
36
banco_dados_I_2008a.indb 36
3/3/2008 16:48:31
Banco de Dados I
Os sistemas gerenciadores de banco de dados surgiram no início da década de 70 com a finalidade de promover maior performance e segurança na tarefa de armazenamento, recuperação e manutenção dos dados, impactando também numa maior padronização no acesso aos mesmos por parte das aplicações. Os primeiros produtos de SGBDs tinham um custo elevado, desenvolvidos sob uma tecnologia que necessitava de um alto grau de especialização para serem operados. Na medida em que novos investimentos foram aplicados na área e novas pesquisas desenvolvidas, os SGBDs evoluíram consideravelmente, tornando a sua utilização muito mais simplificada e os seus recursos mais avançados. Atualmente encontram-se como padrão no mercado o banco de dados relacional, que opera sob o enfoque de relacionamento entre os dados armazenados, o que será apresentado em maiores detalhes no decorrer da disciplina. A partir da década de 80, com o barateamento na produção de equipamentos e a produção em grande escala de computadores, esse sistema de banco de dados passou a dominar o mercado, tornando-se um padrão internacional. Entretanto, as pesquisas não pararam por aí. Com a evolução tecnológica dos equipamentos, o mercado passou a investir na pesquisa de novas metodologias, técnicas e padrões para a modelagem de bancos de dados, ou projeto de banco de dados. Sendo assim, até hoje são várias as metodologias ou técnicas que surgem com a finalidade de auxiliar os profissionais na árdua tarefa de projetar banco de dados. Pode-se dizer então que um sistema gerenciador de banco de dados é uma ferramenta computacional em constante atualização e evolução.
Uma ferramenta de banco de dados exige do seu usuário um largo conhecimento de projetos de banco de dados que serão amplamente testados e implementados.
Unidade 2
banco_dados_I_2008a.indb 37
37
3/3/2008 16:48:31
Universidade do Sul de Santa Catarina
Fundamentos de um sistema gerenciador de banco de dados Algumas características importantes dos sistemas de banco de dados os diferenciam dos sistemas de arquivos tradicionais, que também são formas de armazenamento de dados. Essas características são:
a separação entre programas e dados;
o compartilhamento de dados e processamento multiusuário;
o armazenamento no próprio banco de dados da sua estrutura ou esquema.
Você poderá ler a seguir uma breve explicação de cada um desses itens, a fim de facilitar a sua compreensão sobre o que há de diferente em um sistema de banco de dados que o torna tão especial.
Separação entre “programas” e “dados” Esse tópico refere-se a uma propriedade fundamental para o bom desempenho de um sistema de banco de dados. Planejar um banco de dados não é tarefa simples, ou fácil. O projeto de um banco de dados deve representar fielmente as tarefas executadas diariamente fora do computador e que, por algum motivo, foram implementadas nele.
Ou seja, um projeto de banco de dados deve representar o mundo real, de forma eficiente e íntegra.
Porém quando se refere à computação, principalmente à área de desenvolvimento de softwares, o projeto de um banco de dados envolve duas tarefas distintas:
a criação do modelo de banco de dados – realizada por meio de uma ferramenta computacional;
38
banco_dados_I_2008a.indb 38
3/3/2008 16:48:31
Banco de Dados I
a implementação de um programa de computador – que será responsável por interagir com esse banco de dados. A criação do programa de computador se faz por meio das linguagens de programação.
A criação do modelo de dados e sua implementação num SGBD é tarefa geralmente designada a um especialista da área, o qual deve ter conhecimentos específicos de como desenvolver e implementar o projeto do banco de dados de forma a obter maior performance da ferramenta. Já o desenvolvedor ou analista de sistemas deve implementar o programa de computador de forma que este consiga ineragir com o SGBD de modo eficiente e com toda performance nas operações realizadas no banco de dados. Este é m dos pontos cruciais de um projeto de um sistema de informação. Por vezes, porém, tanto o projeto do banco de dados quanto o programa em si podem ser desenvolvidos pelo mesmo profissional, uma vez que tenha as qualificações adequadas às funções. As ferramentas de banco de dados têm como principal propriedade a abstração dos dados. Isso significa dizer que o programador de uma linguagem de programação não precisa implementar o funcionamento das estruturas que compõem o banco de dados, muito menos saber como elas funcionam e foram criadas. Cabe ao programador usar os recursos que a ferramenta de banco de dados disponibiliza, independente da linguagem de programação usada.
Veja a figura a seguir, ela ilustra um esquema de desenvolvimento de software com acesso a banco de dados:
Unidade 2
banco_dados_I_2008a.indb 39
39
3/3/2008 16:48:32
Universidade do Sul de Santa Catarina
Banco de dados Linguagem de programação
Programador
Sistema gerenciador de Banco de dados
Especialista em Banco de dados
Figura 2.1 – Esquema de desenvolvimento de Software com acesso a Banco de Dados
O programador é responsável por criar o programa de computador que fará a integração da interface gráfica com os dados do banco de dados. Será por meio dessa aplicação que os dados serão cadastrados e manipulados pelo usuário. As regras de funcionamento, ou de negócio, dessa aplicação serão criadas pela linguagem de programação utilizada pelo programador, sem que o mesmo tenha que saber como é o funcionamento interno do gerenciador de banco de dados. O banco de dados representa as tabelas que foram criadas para o armazenamento e relacionamento dos dados. Esse esquema segue as regras definidas pelo sistema gerenciador de banco de dados. O banco de dados é uma estrutura física armazenada em algum dispositivo de armazenamento, como um hard disk (HD). O sistema gerenciador de banco de dados é a ferramenta computacional utilizada pelo especialista em banco de dados para modelar e projetar o banco de dados físico, que deverá representar as tarefas executadas pelo mundo real. O especialista em banco de dados, que em alguns casos é também o programador, é responsável por modelar o banco de dados, identificando junto ao cliente final quais são as suas reais necessidades. 40
banco_dados_I_2008a.indb 40
3/3/2008 16:48:32
Banco de Dados I
É importante salientar que a aplicação desenvolvida possui regras separadas das implantadas no banco de dados. A aplicação desenvolvida ou o programa de computador representa as regras de utilização do sistema, chamadas de regras de negócio. Os dados armazenados estão em uma outra camada que representa a forma pela qual os dados serão manipulados e armazenados. Uma camada não precisa saber detalhes de como a outra foi desenvolvida, que linguagem usou ou como os dados são fisicamente armazenados no computador. Isso é abstração. Veja a próxima figura. Ela representa essa separação entre programa e dados, e ainda acrescenta uma camada que representa a interface gráfica de interação entre usuário e programa de computador.
Figura 2.2 – Separação entre programas e dados
O compartilhamento de dados e processamento multiusuário Tão importante quanto a defi nição de uma solução em camadas, na qual há um grande nível de abstração como visto anteriormente, o compartilhamento de dados é uma característica predominante em soluções que utilizam banco de dados.
Unidade 2
banco_dados_I_2008a.indb 41
41
3/3/2008 16:48:32
Universidade do Sul de Santa Catarina
Essa característica é fundamental para que dados cadastrados em um sistema possam ser acessados por vários usuários ao mesmo tempo, de lugares distintos. Além de permitir que os dados sejam acessados por vários usuários, evita-se o cadastro repetido da mesma informação em banco de dados diferentes, o que acarretará uma redundância de informações e imprecisão dos dados. Cabe salientar que aqui se tem mais um exemplo da separação entre dados e programa, pois ao programador da aplicação computacional não é necessário que saiba como esse multiacesso funciona, mas é essencial que ele possa utilizar-se desses recursos do sistema gerenciador de banco de dados. Na representação a seguir, temos uma solução em que cada usuário acessa uma única base de dados, idênticas, porém sem integração. Em cada base de dados estão os produtos vendidos por cada filial, gerando dessa forma um controle de estoque essencial ao funcionamento da empresa.
Filial A
Filial B
Aplicação
Usuário
Aplicação
Banco de dados / produtos
Usuário
Banco de dados / produtos
Figura 2.3 – Acesso a dados em bancos independentes
Além de ter um único acesso à base de dados idênticas – o que pode gerar dados incorretos e redundância das informações –, não há uma distribuição de equipamentos, pois tanto a filial A como a filial B terão um computador dedicado ao armazenamento dos dados, bem como um computador para cada usuário, pois o acesso aos dados é local.
42
banco_dados_I_2008a.indb 42
3/3/2008 16:48:32
Banco de Dados I
O que significa afirmar que para cada usuário haverá um computador com acesso a uma base de dados local e, conseqüentemente, mais uma réplica dos dados armazenados, o que com certeza resultará em uma grande redundância de informações e dados incorretos. Além disso, há o custo mais alto para se manter essa solução que parece ser a mais simples. Alguns problemas são comuns de acontecerem quando se utiliza uma solução não-compartilhada. Veja a seguir:
entrada repetida da mesma informação;
inconsistência dos dados;
excesso de dados;
falta de padrão dos dados cadastrados.
Para resolver esse problema é primordial que se utilize o aspecto de compartilhamento de dados que um sistema gerenciador de banco de dados disponibiliza. Além de uma base de dados mais confiável, o custo de manutenção e instalação da solução será mais barato, pois será um computador dedicado ao armazenamento de dados e a vários terminais de acesso, que não necessariamente precisam ser computadores de alto valor no mercado. Veja essa solução no diagrama: Filial A
Banco de dados / produtos
Aplicação
Filial B
Aplicação
Usuário
Usuário Usuário
Usuário
Usuário
Figura 2.4 – Acesso a banco de dados centralizado
Unidade 2
banco_dados_I_2008a.indb 43
43
3/3/2008 16:48:32
Universidade do Sul de Santa Catarina
O armazenamento no próprio banco de dados da sua estrutura ou esquema De forma sucinta, um banco de dados pode ser visto como sendo uma estrutura formada pelos dados armazenados e pelas regras que criam as tabelas do modelo projetado.
Assim como os dados são armazenados fisicamente no banco de dados, no dispositivo de armazenamento disponibilizado para o mesmo, como o hard disk (HD), o esquema que defi ne quais são as tabelas do banco, o relacionamento entre elas e o tipo de dado de cada coluna também são armazenados junto ao banco de dados. Assim sendo, os dados e as regras de manipulação e armazenamento dos dados não precisam ser tratados de forma diferente pelo especialista em banco de dados que utiliza a ferramenta, na verdade é mais um nível de abstração, pois para ele é indiferente a forma pela qual a ferramenta computacional armazena essas regras. Veja a figura a seguir:
SGDB SGBD Esquema Dados
Figura 2.5 – Base de Dados
Nesta primeira seção você teve um contato inicial com os conceitos do sistema gerenciador de banco de dados, ou simplesmente SGBD. Você deve ter percebido que em alguns momentos nos referimos aos dados armazenados como sendo tabelas. Entretanto, essa é uma notação normalmente utilizada quando se interage com banco de dados, mas que não reflete a realidade de mercado atual. Quando nos referimos a um SGBD, ele pode ter duas formas básicas de representação dos dados, as tabelas, base de um SGBD relacional, e as classes, que são a base de um SGBD orientado a objetos. 44
banco_dados_I_2008a.indb 44
3/3/2008 16:48:32
Banco de Dados I
SEÇÃO 2 – Tipos de sistemas de gerenciamento de banco de dados Dentro das características de cada ferramenta computacional de banco de dados, ou SGBD, os bancos podem ser divididos em duas formas de representação dos dados: banco de dados relacional e banco de dados orientado a objetos. Alguns autores poderiam ampliar essa definição, porém essa definição está voltada para as ferramentas de gerenciamento de banco de dados existentes no mercado atual, ou seja, voltada para o escopo de ferramenta computacional e a forma pela qual os dados são armazenados e gerenciados pelo sistema.
a) Banco de dados relacional Em um banco de dados relacional os dados são armazenados em tabelas físicas que possuem relacionamentos entre si. Essas estruturas físicas recebem o nome de tabelas relacionais. Uma tabela relacional é uma simples estrutura de linhas e colunas. Cada linha contém um mesmo conjunto de colunas ou campos, porém as linhas seguem um determinado tipo de ordem.
Cada linha da tabela, formada por um conjunto de colunas, representa um registro (ou tupla). Os registros não precisam necessariamente conter dados em todas as colunas, ocorrendo a ausência de informação, caracterizando o que denominamos valor nulo, a ser melhor apresentado na seção 2 da Unidade 5. As colunas de uma tabela também são chamadas de campos. Os campos possuem características que definem o dado que será armazenado na tabela. Os sistemas de banco de dados possuem regras para consistir os dados que serão armazenados.
Cada coluna é identificada por um nome e um tipo de dado.
Em um banco de dados relacional podem existir uma ou centenas de tabelas. O limitador é imposto exclusivamente pela ferramenta computacional, ou o SGBD utilizado.
Unidade 2
banco_dados_I_2008a.indb 45
45
3/3/2008 16:48:33
Universidade do Sul de Santa Catarina
Comparando uma tabela relacional com um arquivo tradicional, do sistema de arquivos de um computador, identificam-se as seguintes diferenças: Quadro 2.1 - Diferença entre tabela relacional e arquivos TABELA RELACIONAL
ARQUIVOS
Os registros podem ser armazenados de forma ordenada, por meio da aplicação de algortimos de ordenação.
As linhas de uma tabela não possuem nenhum tipo de ordenação. A busca a um desejado dado na tabela não pode ser feita por indexação. Não é possível acessar uma linha da tabela com base na posição da mesma dentro da estrutura. Um campo da tabela é monovalorado, ou seja, formado por um único valor.
Cada registro do arquivo pode ser representado por vários valores de tipos diferentes.
O acesso aos dados de uma tabela pode obedecer aos mais variados critérios, sem que novas estruturas precisem ser criadas.
O acesso ao arquivo pode ser randômico, seqüencial ou indexado.
As tabelas são formadas por linhas e colunas.
Os arquivos são formados por registros.
Para ilustrar melhor uma tabela relacional, veja a representação abaixo:
↔
Colunas /Campos
↔
↕ Linhas / Registros
↕ Cada coluna de uma tabela obedece às regras definidas na criação da tabela, recebendo um tipo de dado, que representa o conjunto de valores que podem ser armazenados.
46
banco_dados_I_2008a.indb 46
3/3/2008 16:48:33
Banco de Dados I
Uma coluna do tipo numérico só poderá armazenar dados do tipo numérico. Ao se tentar inserir dados que não sejam numéricos, o SGBD recusará o cadastro, da forma pela qual a ferramenta executa essa tarefa. Cada ferramenta pode executar essa tarefa de forma diferente, porém todas elas evitaram o cadastro indevido dos dados.
Basicamente, cada coluna representa o tipo de cada dado, ou seja, as regras de entrada dos dados, evitando a incompatibilidade dos dados. Já as linhas representam todos os dados cadastrados, ou seja, um conjunto de colunas ou campos. Imagine o cadastro de alunos de uma escola. Os dados ou colunas que representam um aluno poderiam ser nomeados como: Matricula, Nome, Idade e Sexo entre outros. As linhas da tabela representam um registro único, ou seja, os dados de um único aluno, com os valores cadastrados: Matricula
Nome
Idade
Sexo
1
Marcelo Medeiros
35
M
Alguns campos da tabela, além do tipo de dados e do nome de identificação, possuem uma propriedade adicional. Esses campos recebem o nome de chave.
Lembre-se que as linhas representam o número de registros cadastrados na tabela e as colunas representam campos que compõem a estrutura.
Chaves O conceito básico para identificar linhas e estabelecer relações entre linhas de tabelas de um banco de dados relacional é o de chave.Em um banco de dados relacional há ao menos dois tipos de chaves a considerar: a chave primária e a chave estrangeira.
As chaves são restrições de integridades impostas ao banco de dados.
Unidade 2
banco_dados_I_2008a.indb 47
47
3/3/2008 16:48:33
Universidade do Sul de Santa Catarina
Chave primária A chave primária é a chave que identifica cada registro dando-lhe unicidade. Essa chave primária nunca se repetirá dentro da estrutura da tabela. Ela pode ser formada por um único campo ou coluna ou por vários campos. A chave primária é uma coluna ou conjunto de colunas cujos valores distinguem uma linha das demais dentro de uma mesma tabela.
Quando uma chave é formada por vários campos, diz-se que a mesma é uma chave primária composta. Uma tabela não pode ter mais de uma chave primária. Na tabela de Alunos vista anteriormente, o campo Matricula é uma coluna sujeita a ser uma chave primária, uma vez que não poderão ser cadastrados vários alunos com a mesma matrícula. Entretanto os campos Idade, Nome e Sexo podem ser repetidos durante o cadastro de alunos, e dessa forma não podem ser de forma alguma chaves primárias.
Você verá a forma de criar e definir essas chaves nas próximas unidades. Por isso, não se preocupe por enquanto com a forma de como se fazer isso em um sistema gerenciador de banco de dados, mas sim com a finalidade de cada uma dessas estruturas dentro de um banco de dados relacional.
Chave estrangeira A chave estrangeira corresponde aos campos, ou campo, de uma tabela, cujos seus valores cadastrados aparecem necessariamente na chave primária de outra tabela.
A chave estrangeira é o mecanismo que permite a implementação de relacionamentos em um banco de dados relacional. Uma chave estrangeira impõe algumas restrições ao banco de dados modelado, são elas:
48
banco_dados_I_2008a.indb 48
3/3/2008 16:48:33
Banco de Dados I
quando há a inclusão de uma linha na tabela que contém a chave estrangeira é necessário que o valor inserido exista na tabela principal, caso contrário a inclusão não poderá ser realizada;
quando da alteração de valores da chave estrangeira é necessário que o novo valor cadastrado exista na chave primária da tabela principal, caso contrário a alteração não será realizada;
quando da exclusão de um dado da tabela principal, cujo valor exista em alguma tabela relacionada, a exclusão deve ser cancelada ou o registro na tabela relacionada também deverá ser excluído;
quando da alteração de um campo da chave primária que é chave estrangeira para outra tabela, a alteração deve se refletir a todas as tabelas relacionais, contendo o novo valor do campo.
Continuando no estudo da estrutura de uma banco de dados relacional, a definição de uma chave estrangeira é essencial ao sistema de tabelas relacionais.
A chave estrangeira é fundamental na criação de um relacionamento entre tabelas.
Unidade 2
banco_dados_I_2008a.indb 49
49
3/3/2008 16:48:33
Universidade do Sul de Santa Catarina
Imagine um sistema computacional para o cadastramento, cursos e matrículas de alunos. As tabelas de Alunos e Cursos representam diretamente os dados cadastrados. A entrada de dados acontece diretamente nas tabelas. Já na tabela de Matrículas, as linhas ou registros devem representar o aluno e o curso na qual o mesmo se matriculou. Diferente das tabelas anteriores, a tabela de Matrícula tem dois relacionamentos diretos: um com o aluno que está cadastrado na tabela de Alunos e outro com o curso que está cadastrado na tabela de Cursos. Sendo assim, diz-se que a tabela de matrículas está relacionada com a tabela de alunos e com a tabela de cursos. Isso é possível porque a tabela de Matrículas possui uma chave estrangeira para tabela de Alunos, que se relaciona com o campo matrícula dessa tabela, e outra chave estrangeira para tabela de cursos, que se relaciona com o campo Codigo dessa tabela.
Veja a seguir uma representação da chave estrangeira: Alunos
Cursos
Matricula Nome Idade Sexo
Codigo Descricao Vagas
Chave estrangeira
Matriculas Aluno Curso Data
Chave estrangeira
Figura 2.6 – Representação de Chaves Estrangeiras
Sempre que se for cadastrar uma matrícula de aluno, não é necessário recadastrar os dados do aluno e nem mesmo do curso. A tabela de matrícula cadastrará como aluno a matrícula do aluno desejado na tabela de alunos e em curso o código do curso originário da tabela de cursos.
50
banco_dados_I_2008a.indb 50
3/3/2008 16:48:34
Banco de Dados I
Isso garante uma propriedade importante de um SGBD: a integridade dos dados. Como os campos estão relacionados, não será possível cadastrar numa matrícula um aluno inexistente ou um curso inexistente.
b) Banco de dados orientado a objetos Hoje, o banco de dados orientado a objetos é um fator emergente que integra o banco de dados e a tecnologia de orientação a objetos. Os bancos de dados orientados a objetos iniciaram-se primeiramente em projetos de pesquisa nas universidades e centros de pesquisa. Em meados dos anos 80, eles começaram a se tornar produtos comercialmente viáveis e se mantêm em constante evolução até os dias atuais. O desenvolvimento dos sistemas de gerenciamento de banco de dados orientado a objetos (SGBDOO) teve origem na combinação de idéias dos modelos de dados tradicionais, SGBD, e de linguagens de programação orientada a objetos, LPOO.
Os modelos de dados orientados a objetos têm um papel adicional nos SGBDs, pois são mais adequados para o tratamento de objetos complexos, como: textos, gráficos e imagens.
Modelos de dados orientados a objetos Resumidamente, pode-se dizer que orientação a objetos corresponde à organização de sistemas como uma coleção de objetos que integram estruturas de dados e comportamentos. Dessa forma, um banco de dados orientados a objetos não possui a sua arquitetura baseada em tabelas, como no sistema relacional, mas sim em objetos. Afinal, o que são esses objetos?
Unidade 2
banco_dados_I_2008a.indb 51
51
3/3/2008 16:48:34
Universidade do Sul de Santa Catarina
Objeto Os objetos são abstrações de dados do mundo real, com um estado descrito por atributos que podem apenas ser acessados ou modificados por meio de operações definidas pelo criador do objeto. Um objeto individual é chamado de instância ou ocorrência de objeto.
A parte estrutural de um objeto é similar à noção de tabelas no modelo relacionamento. Ou seja, fazendo uma correlação com o banco de dados relacional, a sua estrutura é formada por tabelas, que são a junção de linhas e colunas. As informações de cada tabela são definidas pelas estruturas de cada campo ou coluna. Em um objeto não há a figura de uma tabela, mas sim um conjunto de atributos ou propriedades que definem as suas características e a forma pela qual o mesmo pode ser acessado. A forma de acesso acontece por meio dos métodos que foram atribuídos ao mesmo, caso contrário seus valores não podem ser modificados. Para quem cria as regras dos objetos, é importantíssimo que sejam avaliadas todas as possibilidades de uso desse objeto. Já para quem usa esses objetos, há um alto grau de abstração, pois o mesmo não precisa saber como essas regras foram implementadas, mas é essencial que saiba como utilizá-las. Importante: vale destacar que, em alguns casos, a mesma pessoa responsável pela definição do objeto pode ser o seu usuário final.
De forma sucinta, pode-se imaginar que o criador do objeto define as suas propriedades e as regras de uso do mesmo. Já o usuário do objeto é o responsável por aplicá-lo nas resoluções dos seus problemas. Em uma solução orientada a objetos podem ser utilizados vários objetos, como se fossem as tabelas de um modelo relacional. A esse conjunto de objetos chamamos de classe. Cada classe segue as regras implementadas nos objetos que a compõem.
52
banco_dados_I_2008a.indb 52
3/3/2008 16:48:34
Banco de Dados I
O objeto pode ser visto como a descrição ou especificação de objetos. Esse objeto possui duas partes: a interface, que é visível para o usuário, e a implementação, visível só para o usuário construtor do objeto.
Representação do objeto Em um modelo relacional, cada tabela representa unicamente a estrutura dos dados que serão armazenados ali e as regras de integridade, como chaves primárias e estrangeiras. Em um modelo orientado a objetos, essa representação é alterada significativamente, pois além dos dados armazenados, também são armazenadas as regras de uso do objeto, com as operações e validações que serão permitidas. Veja a figura a seguir, que representa um objeto Aluno: Alunos Matricula Nome Idade Sexo
Figura 2.7 – Representação do Objeto Aluno
Note que não há mais a representação em forma de tabelas, com linhas e colunas. O que temos é um único objeto Aluno que possui como propriedades a matrícula, o nome, a idade e o sexo. O objeto Aluno deve conter as regras de uso desse objeto. As propriedades do objeto só podem ser alteradas pelos métodos implementados pelo criador do objeto. Assim, o objeto Aluno passa a ter uma estrutura mais complexa, como a seguir:
Unidade 2
banco_dados_I_2008a.indb 53
Os métodos representam a forma de acesso ao objeto. É pelos métodos que se executa uma determinada tarefa do objeto ou se altera as suas propriedades. Os métodos podem ser do tipo construtor, recuperador ou modificador.
53
3/3/2008 16:48:34
Universidade do Sul de Santa Catarina
Alunos Matrícula Nome Idade Sexo AlterarMatrícula AlterarNome AlterarIdade AlterarSexo RecuperarMatrícula RecuperarNome RecuperarIdade RecuperarSexo LerDados VisualizarDados
Figura 2.8 – Objeto Aluno e seus métodos
Para cada atributo de Alunos, há um método para alterar o seu valor e um método para visualizar o seu valor atual. Essas são as únicas formas de se alterar e visualizar os dados de um aluno cadastrado. Além dos métodos modificadores e recuperadores, há um método para cadastrar todos os dados do aluno (LerDados) e um método para listar os dados de um determinado aluno (VisualizarDados). Muitos outros métodos poderão ser agregados a esse objeto, com as mais variadas finalidades. O usuário que for interagir com esse objeto não precisa saber como essas regras foram implementadas ou criadas, porém precisa saber usá-las de forma a alcançar os resultados esperados. Para o cadastramento de vários alunos, não há uma estrutura como tabela, mas sim um conjunto de instâncias (criações) de objetos Alunos, conforme pode ser visto na figura a seguir:
54
banco_dados_I_2008a.indb 54
3/3/2008 16:48:34
Banco de Dados I
Alunos Alunos Alunos Alunos Matricula Nome Idade Sexo
Matricula Nome Idade Sexo
Matricula Nome Idade Sexo
Figura 2.9 – Instâncias de Aluno
Nesta disciplina vamos adotar o modelo relacional por se tratar ainda do modelo mais usado no mercado de trabalho. Entretanto, os conhecimentos adquiridos poderão ser aplicados a quaisquer tipos de banco de dados, independente de ferramenta, tipo ou fabricante.
SEÇÃO 3 – Modelos de banco de dados Um modelo de banco de dados é uma descrição dos tipos de informações que estão armazenadas em um banco de dados.
No caso da tabela de alunos, vista na Seção 2, o modelo de dados poderia informar que o banco de dados armazena informações de alunos e que, para cada aluno, são armazenados a sua matrícula, nome, idade e sexo. Em um modelo de dados não são informados os valores dos campos cadastrados para cada tabela, mas sim a estrutura que compõe a tabela de maneira formal e padronizada. A criação de um modelo de dados deve seguir algumas regras para que qualquer pessoa possa compreender a sua finalidade.
Unidade 2
banco_dados_I_2008a.indb 55
55
3/3/2008 16:48:34
Universidade do Sul de Santa Catarina
Para tanto, é necessária a utilização de uma metodologia de modelagem de dados. Existem, basicamente, duas formas de se representar um modelo de banco de dados: textuais e gráficas.
O modelo criado para um banco de dados é denominado esquema de banco de dados.
Para que você possa compreender melhor as definições apresentadas, veja a figura a seguir:
Esquema Modelo de dados Descrição formal das tabelas
Figura 2.10 – Esquema de Banco de Dados
Em um modelo de banco de dados, normalmente são considerados dois níveis de representação: o modelo conceitual e o modelo lógico.
O modelo conceitual pode ser facilmente encontrado nas referências bibliográficas como modelo de entidade relacionamento, ou simplesmente MER.
Modelo conceitual Um modelo de dados conceitual é uma descrição do banco de dados que será projetado de forma independente da ferramenta computacional de SGBD.
Esse modelo representa os dados de cada tabela sem se preocupar com a forma pela qual esses serão registrados no SGBD utilizado. A estrutura de cada tabela passa a ser referenciada como entidade, que compõe o esquema de banco de dados, porém,de forma independente do SGBD a ser utilizado.
56
banco_dados_I_2008a.indb 56
3/3/2008 16:48:35
Banco de Dados I
Para essa representação é adotada uma técnica chamada de entidade-relacionamento, cuja principal finalidade é descrever as entidades, seus atributos e relacionamentos.
A partir deste momento usaremos a mesma representação para o modelo conceitual. Acompanhe: na seção 2, foi feita uma representação da tabela Alunos da seguinte forma: Matricula
Nome
Idade
Sexo
1
Marcelo Medeiros
35
M
Agora vamos representá-la a partir de um modelo de entidade relacionamento, MER, por se tratar de um modelo mundial. Assim, a tabela Alunos será representada como: Idade
Sexo
Alunos Nome Matricula Figura 2.11 – Representação do MER
Nesse modelo estão descritos os campos da entidade Alunos, com uma informação adicional de que o campo Matricula se trata de uma chave primária (única), por isso a representação ● . Como o modelo pode e normalmente representa várias tabelas do esquema de banco de dados, vamos incluir mais algumas tabelas a esse modelo para que você tenha uma visão mais ampla desse tipo de representação:
Unidade 2
banco_dados_I_2008a.indb 57
57
3/3/2008 16:48:35
Universidade do Sul de Santa Catarina
Idade
Sexo
Vagas
n
Alunos
1
Cursos Descricao
Nome Matricula
Codigo
Figura 2.12 – MER e duas tabelas
De acordo com o modelo anterior, tem-se o relacionamento entra as entidades Alunos e Cursos. Os atributos da entidade Alunos continuam os mesmos, sendo que cada aluno é identificado unicamente pela sua matrícula. Na entidade Cursos, que possui os atributos Codigo, Descricao e Vagas, a identificação de unicidade é realizada pelo atributo Codigo. Note que forçadamente não foram acentuados os nomes de atributos. Isso é uma regra que deve ser mantida, uma vez que na criação formal deste modelo as ferramentas computacionais não aceitam acentuação. Voltando ao modelo: surgiu uma nova entidade, representada por um losango que representa uma entidade associativa e indica que a relação de Alunos para Curso é de 1 e de Cursos para Alunos é de “N”, ou seja:
O Aluno pode se matricular em APENAS 1 curso e o Curso pode conter “N” alunos.
Na próxima unidade você terá um contato direto com essas formas de relacionamento. Por enquanto é importante que você compreenda a representação em forma de MER.
58
banco_dados_I_2008a.indb 58
3/3/2008 16:48:35
Banco de Dados I
Modelo lógico O modelo lógico é uma representação do esquema de banco de dados que leva em consideração a ferramenta computacional que será utilizada para o projeto do banco de dados.
Dessa forma, se o SGBD for relacional, ele terá um tipo de representação. Caso seja orientado a objetos, ele terá outra representação. Em outras palavras, o modelo torna-se dependente direto do SGBD utilizado. Como esta disciplina se baseia no modelo relacional, adotaremos o modelo lógico para SGBD relacional, que se estrutura a partir de tabelas de banco de dados. Essas tabelas compõem o esquema de banco de dados e, para cada tabela, os nomes das colunas. O modelo lógico tem como principal finalidade descrever as tabelas que compõem o banco de dados e as suas respectivas colunas, sem se preocupar em demonstrar o tipo de relacionamento entre elas.
Veja o mesmo modelo conceitual apresentado anteriormente, agora em uma representação de modelo lógico:
Figura 2.13 – MER nível lógico
Cabe observar que um modelo não exclui o outro, ou seja, em um projeto de banco de dados pode-se adotar ambos os modelos, dependendo do grau de representação que o especialista deseja implantar. Para cada um dos modelos utilizados há um conjunto de regras para auxiliar na definição dos relacionamentos entras as tabelas, que recebem o nome de cardinalidade.
Unidade 2
banco_dados_I_2008a.indb 59
Perceba que o nível de detalhamento das informações deste nível é bem maior. São indicados as colunas que são chaves primárias (PK), as que pertencem como chaves estrangeiras (FK), tipos de dados, dentre outras informações.
59
3/3/2008 16:48:35
Universidade do Sul de Santa Catarina
Síntese Você teve a oportunidade, nesta unidade, de se familiarizar com alguns conceitos importantes de banco de dados. De forma simplificada, quando se fala de banco de dados, está se falando em gerenciamento de informações ou dados. Um banco de dados é um sistema complexo, que envolve recursos humanos e materiais, que vão além do computador. Na computação, o gerenciamento de dados é representado pelo SGBD, que pode utilizar duas formas de armazenamento de dados, o Relacional e o Orientado a Objetos. No modelo relacional os dados são armazenados em Tabelas, representadas através de linhas e colunas. Cada coluna possui um tipo de dado que define as regras de entrada dos valores que serão armazenados. Já as linhas representam os registros (ou conjunto de colunas) armazenados na tabela. As tabelas possuem regras para garantir a integridade dos dados. As principais regras são: definição do campo que não pode repetir (chave primária) e a definição dos campos que dependem de outra tabela (chave estrangeira). Já no modelo orientado a objetos, os dados são armazenados em objetos, que são definidos através de classes. As classes representam a estrutura do objeto e as regras de manipulação dos objetos. As características de cada objeto são definidas através dos atributos da classe, que define as regras de entrada dos valores no objeto.
60
banco_dados_I_2008a.indb 60
3/3/2008 16:48:35
Banco de Dados I
Atividades de auto-avaliação 1) Se lhe fosse apresentado um conjunto de ferramentas computacionais para o gerenciamento de dados, quais requisitos você utilizaria para avaliar a melhor ferramenta?
2) A utilização de uma ferramenta computacional do tipo SGBD significa garantia de que o banco de dados modelado atenderá a todas as necessidades do usuário?
Unidade 2
banco_dados_I_2008a.indb 61
61
3/3/2008 16:48:35
Universidade do Sul de Santa Catarina
Saiba mais Para aprofundar as questões abordadas nesta unidade, você poderá pesquisar em:
CHU, S. Y. Banco de dados: organização, sistemas e administração. São Paulo: Atlas, 1983.
CHEN, P. Modelagem de dados: a abordagem entidade-relacionamento para projeto lógico. São Paulo: Makron Books, 1990.DATE, C. J. Bancos de dados: fundamentos. Rio de Janeiro: Campus, 1985.
. Introdução a sistemas de banco de dados. 8. ed. Rio de Janeiro: Campus, 1990.
62
banco_dados_I_2008a.indb 62
3/3/2008 16:48:36
UNIDADE 3
Modelagem de Dados e Projeto de Banco de Dados
3
Objetivos de aprendizagem
Compreender os processos para se projetar um banco de dados.
Entender o conceito de modelagem de dados.
Identificar os tipos de cardinalidades nas relações entre os elementos do modelo de dados.
Seções de estudo Seção 1 Projetando um banco de dados. Seção 2 Entendendo e definindo as cardinalidades.
banco_dados_I_2008a.indb 63
3/3/2008 16:48:36
Universidade do Sul de Santa Catarina
Para início de estudo Como você observou na unidade anterior, um banco de dados é formado por muitas tabelas, cuja principal finalidade é proporcionar um acesso rápido aos dados e garantir a sua integridade. O ato de projetar uma solução de banco de dados é uma tarefa árdua, pois deve representar todas as informações manipuladas por uma determinada organização no seu dia-a-dia. Junto a essas informações há um conjunto de regras qu e são realizadas por cada usuário no manuseio com os dados. Essas regras, na maioria das vezes, são de conhecimento e domínio de cada programador a respeito das tarefas executadas. Transcrever essas tarefas, informações, dados e regras de utilização consiste em um processo demorado, que deve ser realizado de forma consciente, e que exige um forte padrão de análise e documentação das metodologias utilizadas. Dessa forma, nesta unidade você estudará algumas regras que devem ser adotadas ao se modelar um projeto de banco de dados e quais as formas de se representar o relacionamento entre os dados. Portanto, mãos à obra.
SEÇÃO 1 – Projetando um banco de dados Projetar um banco de dados significa estruturar a solução que será implementada mais tarde em um SGBD. Ou seja, define-se o que será feito e como será feito antes de se por a mão realmente na massa. O SGBD é uma ferramenta computacional que apenas formalizará as regras definidas no projeto da solução de banco de dados. Regras definidas de forma inconsistente serão criadas pelo SGBD de forma inconsistente. E é ai que está o perigo.
64
banco_dados_I_2008a.indb 64
3/3/2008 16:48:36
Banco de Dados I
A ação de projetar o esquema de banco de dados objetiva-se especificar as tabelas que serão criadas, que campos essa tabela terá, quais os tipos de cada campo. Essa tarefa deve ser analisada de forma a se evitar, ao máximo, constantes alterações, pois alterações no modelo de banco de dados significam trabalho redobrado e alto custo de produção. Sendo assim, algumas regras devem ser seguidas para definição do modelo de banco de dados:
determinar qual a finalidade do banco que está sendo modelado. Isso é importante para definição de quais dados serão armazenados;
dividir o problema em várias tabelas. Dividir em quantas tabelas forem necessárias, de forma que representem um conjunto de dados semelhantes ao mundo real, gerando regras específicas para cada uma delas e definindo um formato para cada campo;
determinar os relacionamentos. Gerar as chaves primárias e estrangeiras de cada tabela, de forma que a integridade dos dados seja mantida;
refinar o modelo criado. Validar e comparar os resultados obtidos com os valores do mundo real.
Assim como você teve acesso a um conjunto de regras para se alcançar o objetivo desejado, veja os problemas mais comuns em um projeto de banco de dados:
número excessivo de campos nas tabelas. Certifiquese de que os campos definidos para uma tabela dizem realmente respeito ao assunto;
campos que normalmente não são cadastrados. Isso é um grande indício de que essas informações estão no lugar errado e que devem ser melhor estruturados;
várias tabelas com os mesmos campos. Isso gera redundância de informação;
Unidade 3
banco_dados_I_2008a.indb 65
65
3/3/2008 16:48:36
Universidade do Sul de Santa Catarina
tabelas sem chaves primárias e estrangeiras. Conforme abordado na unidade 2, as chaves primárias e estrangeiras são elementos muito importantes no banco de dados. Durante o projeto do banco de dados devese analisar individualmente cada dado, identificando claramente a função de cada um deles, elegendoos membros participantes de chaves primárias e/ou estrangeiras.
Durante a etapa de projeto de um banco de dados é imprescindível que você tenha seu foco nos dados e na sua função dentro das atividades que estão sendo informatizadas, sem se preocupar ou se deixar influenciar por aspectos relativos ao software que vai acessar estes dados. Lembre-se de que um determinado dado pode ser acessado por diversas aplicações, conforme abordado nas unidades 1 e 2. Com o advento dos SGBDs se conseguiu a independência entre programas e dados, desta forma o endereço de um cliente, por exemplo, não pertence mais exclusivamente a um determinado setor ou software da empresa, mas poderá ser acessado pelo software de mala direta, pelo software de cobrança, de crediário, e tantos quantos necessitarem desta informação. É muito importante que você se atenha ao escopo de um profissional de banco de dados, principalmente aquele que vai modelar o projeto. Quando esse profissional executar as suas tarefas, partirá de um modelo real de processos, que são executados no dia-a-dia por várias pessoas e que, por algum motivo, deseja-se automatizar essas tarefas por meio do computador. As informações que fazem parte do escopo do problema a ser resolvido precisam ser bem compreendidas por quem vai projetar o banco de dados, pois a solução deve refletir o mesmo funcionamento atual, de forma mais rápida, precisa e automática.
Basicamente, a solução esperada pelo cliente tem que ser transformada em um conjunto de tabelas relacionais que representem fielmente o processo atual e que, de preferência, agilizem as tarefas executadas diariamente e garantam a integridade dos dados. 66
banco_dados_I_2008a.indb 66
3/3/2008 16:48:36
Banco de Dados I
Conceitos e modelagem de dados Se você pretende desenvolver um projeto de banco de dados deverá possuir os conceitos básicos sobre modelagem de dados. Não importa se sua aplicação é simples ou não: a correta modelagem dos dados tornará a sua aplicação mais robusta e de mais fácil manutenção. O propósito desta seção é fornecer a você os conceitos básicos sobre modelagem de dados. Esse assunto daria uma centena de livros, por isso estarei sendo mais direto e objetivo possível, de forma que você possa aplicar, de imediato, os conceitos aprendidos. As finalidades de se projetar um problema são as mais variadas. Com a modelagem pode-se:
representar formalmente o ambiente observado;
documentar e formalizar;
fornecer processos de validação.
Vale a pena lembrar que uma das finalidades de se projetar é representar as tabelas e os seus relacionamentos, de forma a se verificar se atendem ou não a solução desejada.
Ao se construir um modelo de dados, estamos projetando um ambiente real para um ambiente informatizado, isto implica em transformar o mundo real em representações formais aceitas por um SGBD. Num modelo de dados estaremos nos utilizando de entidades, as quais manterão as informações do mundo real através de seus campos (ou colunas), e através de especificações de como estes dados se relacionam entre si, ou seja, os relacionamentos entre as entidades. Para que um relacionamento seja definido, temos que determinar algumas de suas propriedades, que vão refletir no comportamento das informações quando este banco de dados estiver em operação, a estas propriedades damos o nome de cardinalidade, que será abordada na próxima seção.
Unidade 3
banco_dados_I_2008a.indb 67
67
3/3/2008 16:48:36
Universidade do Sul de Santa Catarina
SEÇÃO 2 – Entendendo e definindo as cardinalidades As tabelas presentes num banco de dados interagem entre si através dos relacionamentos existentes entre as informações, por exemplo, na tabela de alunos há a informação de qual curso cada aluno pertence, na tabela de venda há a informação de qual produto está sendo vendido. Ao se estabelecer esta interação, devemos estar atentos a forma como esta interatividade acontece, e projetarmos adequadamente o modelo de dados de forma a representar fielmente o ambiente que está sendo informatizado. Nesta seção estaremos abordando as formas de interação entre as tabelas, denominadas cardinalidades.
Tipos de cardinalidade As cardinalidades classificam-se em mínima e máxima. Veja a seguir as características de cada uma delas. Cardinalidade mínima A cardinalidade mínima define se o relacionamento entre duas tabelas é obrigatório ou não.
Para que você compreenda melhor a cardinalidade mínima entre as tabelas, observe o exemplo a seguir, que representa a relação entre País e Unidades Federativas (UF).
68
banco_dados_I_2008a.indb 68
3/3/2008 16:48:36
Banco de Dados I
Possui
País
UF Pertence
Figura 3.1: Exemplo de cardinalidade mínima
Analisando a figura, é possível perceber que um país pode ser cadastrado sem que haja uma unidade federativa para ele. Por isso a representação de um zero (0) na cardinalidade mínima da entidade País para entidade UF. Por outro lado, na cardinalidade mínima de UF para País há uma cardinalidade mínima de 1 ( representada por |). Ou seja, uma unidade federativa deve pertencer a um único país. Dessa forma, o diagrama acima pode ser lido como: Cardinalidade mínima:
Cada País pode ou não possuir UF;
Cada UF deve pertencer a um único País.
Uma abordagem prática do comportamento dos países com relação a suas Unidades Federativas e vice-versa abordado na figura 3.1, pode ser observada na figura a seguir.
■P1
■P2 ■P4
O P1,U3 O P1,U1
PAÍSES
■P5
O P2,U4 OP5,U2
■U1 ■U3
■P3
O P3,U5
■U2 ■U4
■U5
Relacionamentos de Países e UFs
UF
Figura 3.2 - Representação dosrelacionamentos entre os elementos de duas tabelas
Unidade 3
banco_dados_I_2008a.indb 69
69
3/3/2008 16:48:37
Universidade do Sul de Santa Catarina
Perceba que cada país pode ou não estar associado a UF. No caso do país 4, não está associado a nenhuma UF. Já cada UF deve obrigatoriamente estar associada a um PAÍS, portanto não há a possibilidade de encontrarmos uma UF sem estar atrelada a um PAÍS. Cardinalidade máxima A cardinalidade máxima define a quantidade máxima de ocorrências entre as entidades que participam de um relacionamento.
Observe a seguir as mesmas entidades País e UF, porém representadas pela cardinalidade máxima. Possui
País
UF Pertence
Figura 3.3: Exemplo de cardinalidade máxima
Analisando a figura, é possível perceber que um país pode ter várias unidades federativas. Por isso a representação por meio do símbolo . Por outro lado, na cardinalidade máxima de UF para País continua com a cardinalidade máxima de 1 ( representada por | ). Ou seja, uma unidade federativa deve pertencer a um único país. Dessa forma, o diagrama acima pode ser lido como: Cardinalidade máxima:
Cada País pode não possuir, possuir uma ou várias UF;
Cada UF deve pertencer a um único País.
Como pode ser percebido na figura 3.2 que explana de maneira prática o estabelecimento dos relacionamentos, o país P4 não está ligado a nenhuma UF, já o país P3 está ligado a apenas uma UF, a UF4, e o país P1 está ligado a duas UFs, a UF1 e a UF3.
70
banco_dados_I_2008a.indb 70
3/3/2008 16:48:37
Banco de Dados I
Juntando a cardinalidade máxima e mínima desse modelo, temse o seguinte diagrama: Possui
País
UF Pertence
Figura 3.4: Exemplo de cardinalidade máxima e mínima
Neste diagrama, um país pode ou não ter unidades federativas e uma unidade federativa obrigatoriamente deve pertencer a uma entidade país. Além da cardinalidade máxima e mínima, uma cardinalidade pode ainda representar outros relacionamentos. a. Cardinalidade um para um Na cardinalidade um para um, o relacionamento entre as tabelas sempre ocorre de um para um, ou seja:
Para cada registro de uma tabela, só existe uma única ocorrência relacionada em outra tabela.
Observe a figura a seguir: Possui
País
UF Pertence
Pertence Possui
Capital Figura 3.5: Exemplo de cardinalidade um para um
Na representação da Figura 3.5, a entidade UF possui uma única Capital e a entidade Capital pertence a uma única UF.
Unidade 3
banco_dados_I_2008a.indb 71
71
3/3/2008 16:48:37
Universidade do Sul de Santa Catarina
Na grande maioria dos casos, as duas entidades que estão envolvidas num relacionamento um para um se fundem numa única entidade, e o motivo é bastante simples, veja: Suponha que a entidade UF possua dois campos: COD_UF e NOME_UF, e a entidade CAPITAL possua também dois campos COD_CAP e NOME_CAP. Agora cadastre duas UFs e suas respectivas capitais. Vamos lá? UF UF
CAPITAL CAPITAL
COD_UF
NOME_UF NOME_UF
COD_CAP NOME_CAP COD_CAP NOME_CAP
11
SC SC
11
FLORIANÓPOLIS FLORIANOPOLIS
22
SP SP
22
SÃO PAULO PAULO SÃO
COD_UF
Temos, então, que cada UF está associada a sua CAPITAL e a leitura inversa também é válida. Neste modelo de dados, conforme visto na figura 3.3, temos duas entidades e um relacionamento entre elas. Mas reflita sobre o seguinte: se cada UF se relaciona com uma e somente uma CAPITAL e, por conseguinte, cada CAPITAL se relaciona com uma e somente uma UF, não seria mais simples se fosse incluída o nome da capital diretamente na entidade UF?? Vamos ver como ficaria a entidade UF sob esta nova abordagem. UF COD_UF
NOME_UF NOME_CAP
1
SC
FLORIANÓPOLIS
2
SP
SÃO PAULO
Perceba que conseguimos representar as UFs e suas respectivas CAPITAIS simplesmente com uma entidade. Com isto, foi eliminado muita complexidade do modelo de dados e, conseqüentemente, o banco de dados está com menos entidades e relacionamentos, o que deve permitir mais performance à ferramenta. 72
banco_dados_I_2008a.indb 72
3/3/2008 16:48:37
Banco de Dados I
Esta abordagem deve ser levada em consideração sempre que for estabelecido um relacionamento um para um, a fim de verificar a viabilidade de se reduzir a situação a apenas uma entidade. Caso existam implicações em função do restante do modelo de dados, então deve ser mantido o relacionamento e as duas entidades. Para efeito de uma utilização didática do relacionamento um para um, continue o estudo mantendo nos exemplos as duas entidades com o relacionamento.
b. Cardinalidade um para N Nesse segundo tipo de cardinalidade já é possível que um registro de uma determinada tabela se relacione com vários registros de outra tabela. Observe a figura a seguir: Possui
País
UF Pertence
Possui Pertence
Pertence Possui
Continente
Capital
Figura 3.6: Exemplo de cardinalidade um para N
A entidade Continente possui vários países. Já a entidade País pertence a um único Continente. Assim como foi demonstrado a possibilidade de redução de um modelo de dados a apenas uma entidade onde existir um relacionamento um para um entre duas entidades, veja a seguir, porquê não é possível a mesma operação quanto houver um relacionamento um para N.
Unidade 3
banco_dados_I_2008a.indb 73
73
3/3/2008 16:48:37
Universidade do Sul de Santa Catarina
Suponha que a entidade CONTINENTE possua dois campos: COD_CON e NOME_CON e a entidade PAÍS possua também dois campos COD_PAIS e NOME_PAIS. Agora vamos cadastrar um continente e três países, que em tese estão associados aquele continente. PAÍS
CONTINENTE COD_CON NOME_CON
COD_PAÍS NOME_PAÍS
1
1
ALEMANHA
2
ITÁLIA
3
FRANÇA
EUROPA
Ao reduzir o modelo com o relacionamento um para N para apenas uma entidade, veja como ficaria a entidade CONTINENTE: CONTINENTE COD_CON
NOME_COM
NOME_PAÍS
1
EUROPA
ALEMANHA, ITÁLIA, FRANÇA
É possível perceber claramente que podem existir situações onde vários países pertençam a um mesmo continente, acarretando o registro de todos estes países num mesmo campo, NOME_ PAIS. Você pode então indagar: mas que problemas isto pode acarretar? Uma das dificuldades mais óbvias a apresentar se refere a impossibilidade de se definir, a priori, com grau suficiente de certeza, quantos países poderão pertencer a um continente, a fim de que possamos definir qual o número máximo de caracteres (letras) precisaremos reservar para registrar os países. Outra dificuldade diz respeito à necessidade, por exemplo, de se extrair deste banco de dados o nome do continente do país chamado ITÁLIA. Para conseguirmos esta informação, teremos
74
banco_dados_I_2008a.indb 74
3/3/2008 16:48:37
Banco de Dados I
que pesquisar no valor do campo NOME_PAIS por parte do seu conteúdo e esta atividade irá acarretar dificuldades de implementação além de prejudicar o desempenho do SGBD.
c. Cardinalidade N para N Bem, agora você chegou ao último tipo de cardinalidade, que representa um modelo em que vários registros de uma determinada tabela se relacionam com vários registros de outra tabela. Veja o diagrama a seguir: Possui
País
Possui
UF
Habitam
Pertence
Possui Pertence
Continente
Habitantes
Pertence Possui
Capital
Figura 3.7: Exemplo de cardinalidade N para N
Nesse caso, a entidade Habitantes pode pertencer a várias unidades federativas. Já a entidade UF possui vários habitantes. Em um projeto de banco de dados a nível conceitual é possível aceitar o estabelecimento de um relacionamento N para N, conforme visto na figura 3.7, porém ao refinarmos este projeto para um modelo a nível lógico ou ao implementarmos este modelo num SGBD, não será possível implementar um relacionamento deste tipo. Veja o porquê. Suponha que as referidas entidades UF e HABITANTES apresentadas na figura 3.7 possuam respectivamente os seguintes campos e que existam cadastrados em ambas as entidades o exposto a seguir:
Unidade 3
banco_dados_I_2008a.indb 75
75
3/3/2008 16:48:38
Universidade do Sul de Santa Catarina
HABITANTES
UF COD_UF(PK) NOME_UF
COD_HAB(PK) NOME_HAB
1
SC
1
JOÃO BIS
2
SP
2
MARIA HOFF
3
TECO TROSTSK
Segundo o exposto no quadro, o UF SC possui como habitantes JOAO BIS E MARIA HOFF. Mas MARIA HOFF, por sua vez, é considerada habitante de duas UFs: SC e SP. Além disso, o relacionamento está demonstrado através dos traços entre os habitantes e suas UFs. Para que se estabeleça o relacionamento entre duas entidades, deve ser criada uma chave estrangeira(FK - Foreign key), relacionando-a com a chave primária(PK – Primary key) da entidade principal. Como neste caso temos uma chave estrangeira em UF e outra em HABITANTES, está apresentado abaixo as duas entidades, agora contendo as colunas que serão referencia para as chaves estrangeiras. HABITANTES
UF COD_UF(PK) NOME_UF HABIT(FK)
COD_HAB(PK) NOME_HAB
UF(FK)
1
SC
1,2
1
JOÃO BIS
1
2
SP
2,3
2
MARIA HOFF
1,2
3
TECO TROSTSK 2
Neste quadro, você pode notar que ocorre a mesma situação ocorrida com a entidade continente, ao tentarmos incluir todos os países num único campo. Como as colunas, HABIT e UF, possuem a indicação de que são chaves estrangeiras (FK), elas somente podem aceitar os valores das colunas que são chaves primárias (PK) das entidades na qual dependem. Portanto, a
76
banco_dados_I_2008a.indb 76
3/3/2008 16:48:38
Banco de Dados I
coluna HABIT só pode assumir valores que existam na coluna COD_HAB e a coluna UF só pode receber valores que existam na coluna COD_UF. Mas atenção para um detalhe: quantos valores existem para cada coluna HABIT e UF? Para alguns UF, existem dois habitantes, já para alguns habitantes existem 1 ou 2 UFs, mas poderiam existir N habitantes para cada UF, assim como poderiam existir N UF para cada habitante, afinal este é um relacionamento N para N. Nesta situação, estamos novamente com várias informações numa mesma coluna, assim como ocorreu na coluna NOME_PAIS da entidade continente. Já ficou claro que vai ser impossível, a priori, definir um número máximo de habitantes na entidade UF e um número máximo de UF na entidade HABITANTES. Para que seja resolvido este impasse, ou seja, para que consigamos claramente identificar quais são os habitantes de cada uf e quais são os ufs de cada habitante, é implementado uma terceira entidade, denominada entidade associativa, que vai resolver a problemática do relacionamento N para N. A entidade que relaciona duas entidades de um relacionamento N para N chama-se entidade associativa.
No caso representado pela Figura 3.7, o relacionamento entre as entidades UF e Habitantes ficaria da seguinte forma:
Figura 3.8: Exemplo de entidade associativa
Unidade 3
banco_dados_I_2008a.indb 77
77
3/3/2008 16:48:38
Universidade do Sul de Santa Catarina
Dessa forma, transforma-se um relacionamento N para N em um relacionamento um para N, pois a tabela associativa sempre se relaciona com as tabelas externas por meio de uma cardinalidade mínima de um.
Figura 3.9: Exemplo de entidade associativa resultante de uma cardinalidade N para N
Toda entidade associativa vai ter na composição da sua chave primária no mínimo as colunas das chaves primárias das tabelas que a originaram, no caso da tabela UF_Habitantes, sua estrutura seria a seguinte: UF_HABITANTES COD_UF COD_HAB 1
1
1
2
2
2
2
3
Agora fica fácil identificar quem é quem entre UF e HABITANTES, por exemplo, o UF de código 1 (SC) possui os habitantes de código 1 e 2, o HABITANTE de código 3 pertence ao UF 2.
78
banco_dados_I_2008a.indb 78
3/3/2008 16:48:38
Banco de Dados I
Com o uso da tabela associativa UF_Habitantes, o modelo passa a ter para cada UF um grupo único de habitantes. E cada habitante pertence a um único grupo de UFs. Bem, depois dessas representações todas você deve estar se perguntando: terei que fazer esses desenhos para modelar um banco de dados? Essa é uma forma padrão para representação de relacionamento entre tabelas, e mais do que isso, essa representação é o primeiro passo para que a solução implementada venha a atender as necessidades do usuário final. Sendo assim, é necessário que você desenhe essas representações, porém não é preciso que você faça isso à mão. A informática disponibiliza algumas ferramentas que permitem a você desenhar e analisar o modelo de dados proposto, permitindo inclusive a conversão para alguns tipos de SGBD. Na próxima seção, farei a apresentação de algumas dessas ferramentas. Até lá.
Síntese Você estudou nesta unidade que o processo de modelar um banco de dados é uma tarefa exaustiva, que exige muita concentração e dedicação do profissional. Modelar um banco de dados significa representar um mundo real por meio de entidades e seus relacionamentos. A relação entre as entidades é representada pelas cardinalidades, que podem ser máximas e mínimas. Essa relação pode ser representada por meio de três tipos de relacionamentos, que são: um para um, um para N e N para N. Nos relacionamentos N para N, ou também denominados muitos-para-muitos, é necessária a utilização de uma entidade chamada associativa, responsável por agrupar os dados das
Unidade 3
banco_dados_I_2008a.indb 79
79
3/3/2008 16:48:38
Universidade do Sul de Santa Catarina
entidades correlacionadas. Sempre que o modelo apresentar um relacionamento N para N ele deve ser alterado para um relacionamento N para um, por intermédio da entidade associativa.
Atividades de auto-avaliação A empresa Pare Aqui deseja implantar um sistema para controle dos seus clientes. A empresa possui vários pátios de estacionamento na cidade, porém o controle é realizado por meio de anotações em caderno, e isso tem gerado uma perda muito grande de recursos financeiros e até mesmo de clientes. A empresa adota as seguintes regras:
no caderno de clientes são cadastrados: o nome do cliente, a sua data de nascimento e o seu CPF;
no caderno de veículos são cadastrados: a placa, a cor e o modelo;
no caderno de estacionamento são cadastrados: a data de entrada e saída, a hora de entrada e saída e a placa do veículo;
o mesmo cliente pode ter mais de um carro estacionado no pátio.
1. Com base na descrição acima, desenhe a cardinalidade que liga as tabelas do modelo criado a seguir. Clientes
Veículos
Nome Varchar(30) Data_Nasc Date CPF Varchar(14)
Placa Varchar(07) Cor Varchar(30) Modelo Varchar(30)
Estacionados CPF Varchar(14) Placa Varchar(07) Data_Entrada Date Data_Saída Date Hora_Entrada Time Hora_Saída Time
80
banco_dados_I_2008a.indb 80
3/3/2008 16:48:38
Banco de Dados I
2. Identifique na tabela de Clientes o campo sujeito à chave primária.
3. Identifique na tabela de Veículos o campo sujeito à chave primária.
4. Identifique na tabela de Estacionados os campos sujeitos à chave primária e às chaves estrangeiras.
Saiba mais Para aprofundar as questões abordadas nesta unidade, você poderá pesquisar em:
CHEN, P. Modelagem de dados: a abordagem entidade-relacionamento para projeto lógico. São Paulo: Makron Books, 1990.
COUGO, P. Modelagem conceitual e projeto de banco de dados. 7. Reimp. Rio de Janeiro: Campus, 2001.
LIMA, A. da S. ERwin 4.0: modelagem de dados. 2. ed. São Paulo: Érica, 2002.
Unidade 3
banco_dados_I_2008a.indb 81
81
3/3/2008 16:48:38
Universidade do Sul de Santa Catarina
OLIVEIRA, A. R de. Modelagem de dados. São Paulo: Senac, 2004.
SOARES, S. P. de M. Dominando o ERwin: modelagem de dados para banco oracle. São Paulo: Ciência Moderna, 2004.
82
banco_dados_I_2008a.indb 82
3/3/2008 16:48:39
UNIDADE 4
Produtos de Banco de Dados Objetivos de aprendizagem
Entender os conceitos de Software Livre e de software de tecnologia proprietária.
Entender os conceitos de Software Livre e de software de tecnologia proprietária.
Conhecer alguns produtos de banco de dados construídos sob o âmbito de software proprietário e sob o âmbito de software livre.
Compreender o impacto do Software Livre nos produtos de banco de dados.
Realizar a instalação de um banco de dados.
4
Seções de estudo Seção 1 O mercado de software livre e de software proprietário.
Seção 2 As novas metodologias de banco de dados. Seção 3 Ferramentas de SGBD. Seção 4 Como instalar um SGBD? Seção 5 O acesso ao banco de dados MySQL.
banco_dados_I_2008a.indb 83
3/3/2008 16:48:39
Universidade do Sul de Santa Catarina
Para início de estudo Na unidade anterior, foram abordados os aspectos de modelagem de dados para o projeto de um banco de dados onde foram apresentadas técnicas para mapear as necessidades de um ambiente do mundo real para um modelo de dados. Isso de forma que este modelo de dados, quando implementado num produto de banco de dados possa corresponder e atender a estas necessidades. Agora, o próximo passo é o da implementação do modelo de dados num produto de banco de dados. Porém, é necessário que você conheça estes produtos de banco de dados para compreender como o mercado está organizado no fornecimento destes softwares. Para isto, iremos abordar o consolidado mercado de softwares, ditos proprietários, e uma nova tendência, a do mercado de softwares livres. A implementação do modelo de dados num software de banco de dados será abordada no capítulo posterior.
Nesta unidade, serão apresentados os conceitos de software proprietário e livre, bem como algumas ferramentas de banco de dados e a qual mercado está posicionado.
SEÇÃO 1 - O mercado de software livre e de software proprietário A tecnologia de banco de dados, assim como a informática de modo geral, sofre atualizações constantes. Como todo profissional, o especialista em banco de dados tem também o desafio de manter-se informado sobre as atualizações do mercado, no que se refere aos novos produtos. Nos últimos anos, a área de banco de dados sofreu uma grande modificação com a chegada das ferramentas gratuitas, ou de uso livre, como normalmente são chamadas. Tão importante quanto o fato de elas serem gratuitas, foi o fato das ferramentas se apresentarem robustas e confiáveis, o que agradou o mercado de trabalho.
84
banco_dados_I_2008a.indb 84
3/3/2008 16:48:39
Banco de Dados I
As ferramentas gratuitas estão baseadas na idéia de Software Livre, que tem como princípio:
Software Livre é uma questão de liberdade, não de preço.
Refere-se à liberdade dos usuários executarem, copiarem, distribuírem, estudarem, modificarem e aperfeiçoarem o software. Mais precisamente, se refere a quatro liberdades para os usuários do software:
a liberdade de executar o programa, para qualquer propósito;
a liberdade de estudar como o programa funciona e adaptá-lo para as suas necessidades. Acesso ao códigofonte, é um pré-requisito para esta liberdade;
a liberdade de redistribuir cópias de modo que você possa ajudar ao seu próximo;
a liberdade de aperfeiçoar o programa e liberar os seus aperfeiçoamentos, de modo que toda a comunidade se beneficie.
Bem, como você pode ter notado, o software livre é uma tendência de mercado. As ferramentas atuais, como: MySQL, PostgreSQL, FireBird e outros, têm apresentado a cada ano versões mais confiáveis e amigáveis, que permitem ao usuário realizar as mesmas rotinas de outros bancos de dados proprietários, com a mesma qualidade. Essa é uma tendência de mercado e caberá a você como gestor da área de tecnologia da informação escolher a ferramenta que melhor agrade e atenda as suas necessidades. Já, o mercado de softwares proprietários apresenta as seguintes características:
Unidade 4
banco_dados_I_2008a.indb 85
85
3/3/2008 16:48:39
Universidade do Sul de Santa Catarina
Normalmente é cobrado um valor pelo uso do software, a tão conhecida licença de uso. Este valor pode ser cobrado através da venda do direito do uso por tempo ilimitado, ou ainda outra modalidade de comercialização é a venda do direito de uso por um determinado período de tempo.
Há a figura do proprietário do software, ou seja, de quem o construiu e que responde pelo seu adequado funcionamento.
O proprietário é quem fornece possíveis correções no produto comercializado, isto representa um certo nível de garantia ao consumidor, uma vez que se tem identificado a quem recorrer no caso de alguma anormalidade no funcionamento do software.
Geralmente o software proprietário possui uma política de atualização e/ou evolução, onde estão contempladas as inovações a serem incorporadas ao software num determinado período de tempo. Esta política não representa qualquer garantia de continuidade do produto, uma vez que depende do proprietário do software a decisão de continuar a sua evolução e atualização.
As ferramentas proprietárias existentes no mercado, como Oracle, Ms-SQLServer, IBM-DB2, também têm a sua grande contribuição no mercado de trabalho como ferramentas robustas, confiáveis e de grande utilização no mercado atual, principalmente pelas empresas de grande porte. O mercado de banco de dados está em constante atualização e dessa forma abre espaço para todos os tipos de ferramentas, o que é bom, pois abre as portas para os profissionais da área de tecnologia da informação, em especial aos com conhecimento em banco de dados. Lembre-se que um especialista em tecnologia da informação não é um especialista em ferramentas, mas em soluções, ele não deve se prender a fabricantes ou produtos, e deve estar preparado para as constantes mudanças que o mercado deverá sofrer. Independente das mudanças, as ferramentas de banco de dados tendem a facilitar a vida do profissional de informática, tornado a sua produtividade maior e mais eficiente, evitando que ele tenha que editar comandos na mão, ou criar tabelas por meio de comandos extensos. 86
banco_dados_I_2008a.indb 86
3/3/2008 16:48:39
Banco de Dados I
As novas ferramentas apresentam uma interface amigável de maneira que o usuário cria e testa seus modelos de banco de dados sem a necessidade de escrever comandos, com apenas um clique do mouse.
SEÇÃO 2 - As novas metodologias de banco de dados Assim como as ferramentas de desenvolvimento de banco de dados têm evoluído, novas metodologias de implementação de banco de dados também têm sido apresentadas ao mercado de trabalho. A metodologia de banco de dados orientado a objetos que obtido grande aceitação no mercado de trabalho.
Mas o que é um banco de dados orientado a objetos?
Trata-se basicamente de um sistema em que a unidade de armazenamento é tida como um objeto e, desta forma, passa a ter propriedades e não campos. A principal característica deste tipo de banco de dados é a abstração dos dados, que significa:
esconder os detalhes da implementação de seus módulos,
atrelar a manipulação dos dados a métodos previamente programados no banco de dados;
compartilhar objetos; e
expandir seus sistemas por meio de outros módulos já existentes.
O banco de dados orientado a objetos combina os benefícios e conceitos da programação orientada a objetos, com a funcionalidade dos bancos de dados.
Unidade 4
banco_dados_I_2008a.indb 87
87
3/3/2008 16:48:39
Universidade do Sul de Santa Catarina
Mas qual a diferença entre os dois tipos de banco de dados apresentado nessa disciplina?
A diferença é simples. Os bancos de dados relacionais usam uma arquitetura tabular ou matricial, onde os dados são referenciados por meio de linhas e colunas. Já os bancos de dados orientados a objetos podem ser inteligentes, combinando a lógica e dados. No que se refere aos bancos de dados relacionais:
As tabelas são definidas tendo como base a teoria da normalização, evitando a redundância dos dados e facilitando a pesquisa e atualizações.
O mercado hoje é dominado pelos relacionais.
São descritos em duas dimensões, por meio de linhas e colunas.
A linguagem SQL (Structure Query Language) é um padrão aberto para consulta e manipulação dos bancos de dados relacionais de todos os fornecedores. O SQL permite que os sistemas relacionais desenvolvidos por muitos fornecedores possam se comunicar entre si e acessar banco de dados comuns.
No que se refere aos bancos de dados orientado a objetos:
Não possuem uma linguagem padrão, dificultando a conexão entre os bancos de dados de diferentes fornecedores.
Com o crescimento do mercado de multimídia, videogames e aplicações Web que utilizam a linguagem orientada a objetos Java, o uso de bancos orientados a objetos está crescendo. Para atender a essa demanda, os fornecedores de bancos de dados relacionais estão introduzindo facilidades de armazenamento de objetos em seus bancos de dados, chamando-os de banco de dados relacional por objetos.
88
banco_dados_I_2008a.indb 88
3/3/2008 16:48:39
Banco de Dados I
A vantagem do banco de dados orientado a Objetos é a lógica contida no objeto e a possibilidade de ser reutilizado várias vezes em diversas aplicações.
São exemplos de ferramentas de banco de dados orientados a objetos, banco de dados Caché e banco de dados Oracle.
É importante salientar que os bancos de dados comuns tradicionais foram desenvolvidos para empresas relativamente estáveis com grandes volumes de dados de baixa complexidade. O mercado atual é liderado pela tecnologia relacional. Mas qual o motivo desta liderança, uma vez que a tecnologia orientada a objetos já é realidade para o desenvolvimento de software? Para responder a esta questão, é preciso observar, não apenas a tecnologia puramente empregada, mas também em como o mercado de banco de dados encara esta mudança de tecnologia, da relacional para a orientada a objetos. Com relação a questão da tecnologia, está claro que a orientada a objetos possui vantagens significativas, principalmente no que diz respeito a reutilização de código e manipulação dos elementos do software, tratados como objetos, onde possuem os dados atrelados a seus métodos de manipulação. O grande e principal obstáculo da tecnologia orientada a objetos como padrão para ferramentas de banco de dados está no fato da sua padronização, principalmente na linguagem de acesso aos objetos, e também numa questão de mercado, ou seja, no custo da migração de uma base de dados relacional para uma base orientada a objetos e seu impacto nos softwares que se utilizam desta base de dados. Este elemento de mercado merece especial atenção devido ao fato de que os bancos de dados com tecnologia relacional possuem atualmente características muito importantes para o mercado:
Padronização
Performance
Compatibilidade entre os produtos com a mesma tecnologia Unidade 4
banco_dados_I_2008a.indb 89
89
3/3/2008 16:48:40
Universidade do Sul de Santa Catarina
Assim sendo, sob o ponto de vista tecnológico, fica relativamente claro as vantagens que se tem ao utilizar-se de produtos orientados a objetos, porém sob o ponto de vista empresarial, do consumidor que paga pela mudança, por vezes fica difícil argumentar ou justificar os custos envolvidos numa mudança de tecnologia em banco de dados onde será modificada a tecnologia mas os resultados continuarão sendo os mesmos, ou seja, o banco de dados orientado a objetos vai continuar fornecendo os dados aos aplicativos, como os que operam sob a tecnologia relacional o fazem hoje, e já estão devidamente instalados na empresa e com pessoal devidamente qualificados a operar sob esta tecnologia. Um aspecto que deve ser levado em consideração é de que o banco de dados concentra importância crítica no ambiente de tecnologia da informação, uma vez que fornece dados para inúmeros departamentos das empresas e, qualquer problema envolvendo esta área, vai ecoar para os softwares que atendem a estes departamentos. Qualquer modificação na área de banco de dados é sempre questionada e deve ser muito bem dimensionada, avaliando-se os riscos e os benefícios que será obtido com a mudança.
Isto não significa afirmar que a área de banco de dados é estanque e que a tecnologia relacional vai se perpetuar. Mas sim, que esta mudança de padrão, de relacional para orientado a objetos, já estando em curso, acontece de modo mais cauteloso, e que provavelmente, daqui a algum tempo, estará se consolidando definitivamente como um padrão para a área.
SEÇÃO 3 – Ferramentas de SGBD O objetivo desta seção não é avaliar critérios para definir qual ferramenta é a mais eficiente, mas sim apresentar as diferentes plataformas existentes no mercado e quais as suas principais características. 90
banco_dados_I_2008a.indb 90
3/3/2008 16:48:40
Banco de Dados I
a) MySQL O aplicativo MySQL é um sistema de gerenciamento de banco de dados relacionais baseado em comandos SQL (Structured Query Language - Linguagem Estruturada para Pesquisas) que vem ganhando grande popularidade, sendo atualmente um dos bancos de dados mais populares.
www.mysql.com
O MySQL foi criado na Suécia por dois suecos e um finlandês: David Axmark, Allan Larsson e Michael Widenius, que trabalham juntos desde a década de 80. O sucesso do aplicativo deve-se em grande parte à fácil integração com linguagens de programação para web, como o PHP e principalmente por se tratar de um banco de dados gratuito, ou seja, o usuário não tem custo algum para adquirir o produto, que pode ser baixado diretamente da internet.
b) PostgreSQL O aplicativo PostgreSQL é um sistema de gestão de bases de dados relacionais, desenvolvido como projeto de software livre. Sua origem PostgreSQL está de certo modo ligada ao projeto Ingres, desenvolvido na Universidade de Berkeley, Califórnia. O líder do projeto, Michael Stonebraker, um dos pioneiros das bases de dados relacionais, deixou a universidade em 1982 para comercializar o Ingres, acabando por regressar a Berkeley. Em 1985, Stonebraker inicio um novo projeto pós-Ingres com o objetivo de responder a muitos dos problemas que surgiam relacionados a bases de dados relacionais. Esse novo projeto receberia o nome de Postgres e, apesar do parentesco, não partilhou o código base com o Ingres, seguindo sempre caminhos separados. Em 1993 o projeto Postgres foi oficialmente abandonado pela Universidade de Berkeley, mas devido ao fato do seu códigofonte estar sob uma licença gratuita, foi possível manter o desenvolvimento pela comunidade BSD. Em 1995 foi adicionado um interpretador SQL, para substituir a linguagem QUEL (desenvolvida para o Ingres) e o projeto foi renomeado, primeiro para Postgres95 e mais tarde para PostgreSQL. Unidade 4
banco_dados_I_2008a.indb 91
91
3/3/2008 16:48:40
Universidade do Sul de Santa Catarina
c) InterBase O aplicativo InterBase é um gerenciador de banco de dados relacionais da Borland, mesmo fabricante das linguagens de programação Delphi, Borland C++ e Borland Java. Ele é uma opção alternativa aos bancos de dados tradicionais como o SQL Serverda Microsoft e tem as vantagens de ser grátis e código aberto, o que significa que seu código pode ser modificado e melhorado por qualquer usuário. Dessa forma a ferramenta se mantém em constante evolução, sem custo algum aos seus usuários.
d) SQLLite O aplicativo SQLite é uma biblioteca em linguagem C que implementa um banco de dados SQL embutido. Programas que usam a biblioteca SQLite podem ter acesso a banco de dados SQL sem executar um processo separado. O SQLite é um servidor de banco de dados. A biblioteca SQLite lê e escreve diretamente no arquivo do banco de dados. Algumas características do SQLite:
software livre/domínio público e multiplataforma;
não necessita de instalação, configuração ou administração;
implementa a maioria do padrão SQL;
o banco de dados é guardado em um único arquivo;
suporta bases de dados acima de dois terabytes;
sem dependências externas.
e) MS SQL Server O aplicativo MS SQL Server é um gerenciador de banco de dados fabricado pela Microsoft. É um banco de dados muito robusto e usado em empresas e por grandes sistemas corporativos. 92
banco_dados_I_2008a.indb 92
3/3/2008 16:48:40
Banco de Dados I
f) Oracle O aplicativo é um sistema de banco de dados que surgiu no final dos anos 70, quando Larry Ellison vislumbrou uma oportunidade que outras companhias não haviam percebido, quando encontrou uma descrição de um protótipo funcional de um banco de dados relacional e descobriu que nenhuma empresa tinha se empenhado em comercializar essa tecnologia. Então, Ellison e os co-fundadores da Oracle Corporation, Bob Miner e Ed Oates, perceberam que havia um tremendo potencial de negócios no modelo de banco de dados relacional, tornando-os assim a maior empresa de software empresarial do mundo. A empresa oferece seus produtos de bancos de dados, ferramentas e aplicativos, bem como serviços relacionados de consultoria, treinamento e suporte. A tecnologia Oracle pode ser encontrada em quase todos os setores do mundo inteiro e nos escritórios de 98 das empresas citadas na lista da Fortune 100. Constitui-se atualmente de um dos softwares de banco de dados mais confiáveis e estáveis do mercado.
f) Caché O banco de dados Caché é considerado um banco de dados pósrelacional. A sua arquitetura unificada de dados constrói uma camada de descrição para objetos e tabelas relacionais e tem como uma das características importantes, permitir uma integração entre dois mundos: SQL (Relacional) e Objetos. As tecnologias de desenvolvimento para a Web, como por exemplo, Java, tendem a ser orientadas a objetos. Com isso, muitos desenvolvedores perceberam que faz sentido aliar o desenvolvimento com um banco de dados com orientação a objetos. Além disso, os objetos promovem o desenvolvimento rápido, não só pela sua modularidade, mas também por oferecerem uma modelagem mais próxima da realidade. Um problema dos bancos de dados que trabalham com objetos foi a falta de uma linguagem de consulta rápida e simples, já que os bancos relacionais possuem o SQL.
Unidade 4
banco_dados_I_2008a.indb 93
93
3/3/2008 16:48:40
Universidade do Sul de Santa Catarina
SEÇÃO 4 – Como instalar um SGBD? Para esta disciplina e, em outras mais pertencentes a grade curricular do curso, utilizaremos a ferramenta MySQL como ferramenta-base de SGBD, onde serão implementados os modelos de dados e sob a qual serão desenvolvidos os exercícios e exemplos práticos da disciplina.
Por que MySQL?
Veja os motivos.
É uma ferramenta que possui como linguagem de acesso a linguagem padrão SQL;
permite portabilidade entre várias plataformas, dentre as quais a Windows e Linux;
possui todos os mecanismos básicos necessários a uma ferramenta de SGBD;
é uma ferramenta amplamente de código aberto, grátis e muito difundida atualmente no mercado de trabalho;
de instalação fácil e rápida, conforme poderá ser observado no decorrer desta unidade;
com muito pouco consumo de recursos dos equipamentos computacionais permite que seja instalada em equipamentos não muito sofisticados;
A instalação e uso do MySQL A partir de agora, você vai conhecer os passos para a instalação e como usar a ferramenta de SGBD MySQL. Em primeiro lugar, para promover a instalação do MySQL, é preciso ter acesso ao programa instalador do banco de dados, e é a justamente isto que os próximos passos nos levarão. 94
banco_dados_I_2008a.indb 94
3/3/2008 16:48:40
Banco de Dados I
Como estas ferramentas estão em constante evolução, você pode encontrar versões mais recentes do banco MySQL. Normalmente estas versões são compatíveis com as anteriores, portanto caso a versão indicada neste material não esteja mais disponível, você poderá baixar a versão mais recente que encontrar.
- Qualquer dúvida com relação aos passos apresentados a seguir, contate com o Professor Tutor da disciplina. Ele poderá sanar as suas dúvidas durante este processo. Como, então, realizar o download o Instalador do MySQL no seu computador? Siga os passos. 1. Navegue na WEB e acesse o endereço: www.mysql.com 2. Ao carregar a página principal do site do fabricante, acesse o link Developer Zone, conforme ilustração a seguir.
Figura 4.1 – Passo 1 para download do instalador do MySQL.
3. À direita desta página, você encontrará o link Downloads and Documentation. Acesse este link conforme figura.
Figura 4.2 – Passo 2 para download do instalador do MySQL.
Unidade 4
banco_dados_I_2008a.indb 95
95
3/3/2008 16:48:41
Universidade do Sul de Santa Catarina
4. Rolando um pouco abaixo nesta página, você encontrará o link MySQL Community Server Download. Clique neste link.
Figura 4.3 – Passo 3 para download do instalador do MySQL.
5. Nesta página, você encontra vários links para baixar o MySQL, um para cada plataforma correpondente ao nome do link. Clique no link Windows, para baixar a instalação para o ambiente Windows, conforme indicado a seguir.
Figura 4.4 – Passo 4 para download do instalador do MySQL.
96
banco_dados_I_2008a.indb 96
3/3/2008 16:48:41
Banco de Dados I
6. Agora, clique no link Pick a mirror, referente ao item de download Windows Essentials(x86), conforme mostra a figura a seguir.
Figura 4.5 – Passo 5 para download do instalador do MySQL.
7. Após executar o passo anterior, você terá que se cadastrar na empresa, ou entrar com login e senha, caso já tenha se cadastrado alguma vez. Para se cadastrar, clique no botão Proceed no indicativo a novos usuários (new users), conforme exposto a seguir.
Figura 4.6 – Passo 6 para download do instalador do MySQL.
8. Agora você pode preencher suas informações no cadastro ou simplesmente clicar no último link entitulado “No thanks, just take me to the downloads!”, para ir diretamente à área de download da versão solicitada.
Figura 4.7 – Passo 7 para download do instalador do MySQL.
Unidade 4
banco_dados_I_2008a.indb 97
97
3/3/2008 16:48:41
Universidade do Sul de Santa Catarina
9. Como último passo, basta clicar no link HTTP de qualquer um dos sites que aparecem na lista. Você será questionado se quer abrir ou salvar o arquivo. Opte por salvar o arquivo e memorize bem o local onde você o salvou, depois terá de localizá-lo para executar a instalação do MySQL, conforme demonstra a figura.
Figura 4.8 – Passo 8 para download do instalador do MySQL.
- E então, como foi até aqui? Lembre-se que se precisar de ajuda, contate o professor tutor da disciplina. Uma vez de posse do instalador do banco de dados, agora é hora de realizar a instalação do produto em nosso equipamento. Então mãos à obra e siga os passos descritos a seguir.
Instalação do MySQL Passos para a instalação do MySQL. Veja a descrição.
98
banco_dados_I_2008a.indb 98
3/3/2008 16:48:41
Banco de Dados I
1. Localize o arquivo instalador do MySql no seu computador.
Figura 4.9 – Passo 1 para download do MySQL.
2. Execute este arquivo, dando um duplo clique no arquivo mysql-essential-5.0.45-win32.msi. Caso seja mostrado um aviso de segurança em forma de uma janela que se abrirá em seguida, clique no botão Executar. Está iniciado o processo de instalação do produto, a seguir serão apresentadas passo a passo as telas bem como as informações necessárias para que a instalação seja completada com sucesso. 3. Tela de Apresentação, simplesmente clique no botão Next.
Figura 4.10 – Passo 3 para download do MySQL.
Unidade 4
banco_dados_I_2008a.indb 99
99
3/3/2008 16:48:41
Universidade do Sul de Santa Catarina
4. Tela de configuração do tipo de instalação.
Figura 4.11 – Passo 4 para download do MySQL.
Selecione a opção Typical para realizar uma instalação padrão e clique no botão Next. 5. A figura 12 apresenta a tela de início da instalação do produto no seu equipamento. Clique no botão Install para iniciar a instalação.
Figura 4.12 – Passo 5 para download do MySQL.
100
banco_dados_I_2008a.indb 100
3/3/2008 16:48:41
Banco de Dados I
6. A figura 13 apresenta a tela indicando as vantagens em se cadastrar junto ao fabricante. Clique no botão Next.
Figura 4.13 – Passo 6 para download do MySQL.
7. A seguir, você tem a tela que indica o final da instalação do produto.
Figura 4.14 – Passo 7 para download do MySQL.
Deixe a opção “Configure the MySQL Server now” selecionada e clique no botão Finish. A partir deste momento a instalação do banco de dados está terminada, mas será automaticamente executado o programa de configuração do banco de dados. Unidade 4
banco_dados_I_2008a.indb 101
101
3/3/2008 16:48:41
Universidade do Sul de Santa Catarina
8. A figura a seguir apresenta a tela de início da configuração do banco de dados. Clique no botão Next.
Figura 4.15 – Tela de início de configuração do bando de dados.
9. Na tela em que questiona o tipo de configuração necessária, selecione a opção Standard Configuration e clique no botão Next.
Figura 4.16 – Tela que apresenta o tipo de configuração desejada.
102
banco_dados_I_2008a.indb 102
3/3/2008 16:48:41
Banco de Dados I
10. Selecione a opção Install as Windows Service, como Service Name deixe a informação padrão “MySQL” e selecione também a opção Launch the MySql Server automatically”, para que o banco de dados sempre esteja a sua disposição para utilizá-lo. Clique em Next.
Figura 4.17 – Tela que apresenta o nome do serviço a ser criado no Windows.
11. A próxima tela a se apresentar, conforme mostra a figura a seguir, deve ser informada uma senha na opção New root password, a qual deve ser confirmada na opção Confirm. A título de sugestão e como padronização para os acessos posteriores, sugiro a senha “virtual” para a atual instalação. Após digitar a senha e confirmá-la, clique em NextTela de configuração de senha de acesso.
Unidade 4
banco_dados_I_2008a.indb 103
103
3/3/2008 16:48:42
Universidade do Sul de Santa Catarina
Figura 4.18 – Configuração do MySQL.
12. Tela de execução das configurações selecionadas. Clique no botão Execute para que as configurações sejam aplicadas ao banco de dados.
Figura 4.19 – Tela que define a execução do MySQL.
104
banco_dados_I_2008a.indb 104
3/3/2008 16:48:42
Banco de Dados I
13. A figura a seguir, mostra a tela indicando que as operações de configuração foram executadas com sucesso. Clique no botão Finish.
Figura 4.20 – Finalização da instalação.
Pronto!!! Está concluída a instalação do MySQL em seu computador. Na próxima seção, apresenta os passos para você acessar o banco de dados que acabou de instalar, já que na próxima unidade você utilizará esta ferramenta.
SEÇÃO 5 – O acesso ao banco de dados MySQL Nesta seção será realizado um acesso ao banco de dados que foi instalado, conforme você estudou na seção anterior. O acesso ao banco de dados pode ser realizado por meio de vários aplicativos, entretanto, para este estudo, será utilizado um acesso considerado simples que é instalado durante a instalação do banco MySQL: o aplicativo MySQL Command Line Client. Para executá-lo, vá ao menu Iniciar e abra o grupo de programas MySQL.
Unidade 4
banco_dados_I_2008a.indb 105
105
3/3/2008 16:48:42
Universidade do Sul de Santa Catarina
Figura 4.21 – Aplicativo MySQL Command Line Client.
Execute o aplicativo MySQL Command Line Client (conforme mostra a figura 21) confirme a senha que foi informada durante a instalação. Como nossa sugestão, foi dado a opção de “virtual”.
Figura 4.22 – Solicitação de senha de acesso.
Este aplicativo é bastante simples e será utilizado sempre que necessitar executar alguma tarefa no banco de dados. Uma nova tela aparecerá e você estará apto a digitar os comandos para interagir com o banco de dados. A partir da próxima unidade, você vai interagir com o banco de dados instalado bem como criar suas tabelas e demais elementos do projeto de uma base de dados através do uso da linguagem SQL. Até lá!
106
banco_dados_I_2008a.indb 106
3/3/2008 16:48:42
Banco de Dados I
Síntese Nesta unidade você conheceu alguns produtos de SGBD bem como o mercado de software livre e de software proprietário. No que tange ao mercado envolvendo os produtos de banco de dados, o software livre, apesar de ainda não consolidado, se apresenta como uma opção interessante ao usuário que não quer ficar na dependência de um fabricante ou proprietário do produto. Porém, este também deve medir os riscos de não ter à disposição a figura do responsável direto pela confecção do produto, que por muitas vezes pode representar alguma garantia de continuidade do desenvolvimento e atualização do produto. Com relação aos produtos de banco de dados, você conheceu alguns dos mais conhecidos e utilizados atualmente, o que proporciona uma visão dos principais atuantes no mercado atual, sem a intenção de avaliar produtos, o que exigiria uma avaliação profunda inclusive com relação à área da sua aplicação.
Atividades de auto-avaliação 1) Qual a diferença entre banco de dados relacional e banco de dados orientado a objetos?
Unidade 4
banco_dados_I_2008a.indb 107
107
3/3/2008 16:48:42
Universidade do Sul de Santa Catarina
2) Na maioria dos países de primeiro mundo, as empresas utilizam um profissional especialista para cada área. O analista de sistemas e o programador executam cada um a sua tarefa. Já no Brasil, o profissional de informática tenda a agrupar todas as funções numa única pessoa. Em sua opinião, porque isso acontece?
3) Caso uma empresa lhe questionasse sobre as vantagens e desvantagens do uso de ferramentas de uso livre, que tipo de informação você passaria?
108
banco_dados_I_2008a.indb 108
3/3/2008 16:48:42
Banco de Dados I
Saiba mais Para aprofundar as questões abordadas nesta unidade você poderá pesquisar em:
;
;
www.mysql.com/;
;
.
.
Leia: NASSU, E. A. Banco de dados orientado a objetos. Edgard Blucher, 1999.
Unidade 4
banco_dados_I_2008a.indb 109
109
3/3/2008 16:48:42
banco_dados_I_2008a.indb 110
3/3/2008 16:48:42
UNIDADE 5
Implementação do Projeto de Banco de Dados
5
Objetivos de aprendizagem
Conhecer a origem da linguagem SQL.
Compreender os tipos de dados da linguagem SQL.
Identificar os comandos de definição de dados (DDL).
Entender a funcionalidade das chaves primárias e estrangeiras em um banco de dados.
Implementar os elementos de um projeto de banco de dados numa ferramenta de SGBD.
Saber como criar, alterar e remover tabelas de banco de dados.
Seções de estudo Seção 1 A estrutura da Linguagem SQL. Seção 2 Como criar tabelas. Seção 3 Como definir tabelas relacionais em SQL. Seção 4 Como remover as tabelas do banco de dados.
banco_dados_I_2008a.indb 111
3/3/2008 16:48:42
Universidade do Sul de Santa Catarina
Para início de estudo A linguagem SQL (Structured Query Language) surgiu no início dos anos 70 como resultado de um projeto da IBM para o desenvolvimento de uma linguagem que se adequasse ao modelo relacional. O primeiro sistema de banco de dados baseado em SQL ficou disponível, comercialmente, no final dos anos 70, juntamente com outros sistemas de banco de dados relacionais. Por volta da década de 80 foi publicada a primeira versão padronizada da Linguagem SQL, seguindo a padronização ANSI e ISO. Desde então, a linguagem vem evoluindo, gerando novas versões padronizadas, como: SQL-92 e SQL-99, assim chamadas em referência aos anos em que foram publicadas. Com suas seguidas evoluções, a linguagem tornou-se a mais poderosa ferramenta de definição e manipulação de bancos de dados relacionais, e é hoje utilizada na grande maioria dos sistemas de bancos de dados.
Linguagem procedural é aquela na qual os comandos são agrupados em procedimentos ou funções.
A linguagem SQL é basicamente uma linguagem de consulta a banco de dados, diferente das linguagens comuns de programação por não ser uma linguagem procedural. É uma linguagem relacional, isto é, ela é ideal para o tratamento de dados relacionados, aqueles que podem ser arranjados em uma tabela, na qual cada linha forma uma unidade lógica de dados. Esta linguagem funciona tanto para definição como manipulação de dados, isto é, usando SQL pode-se criar tabelas e também acessar os dados ali cadastrados. Sendo assim, nesta unidade, vamos fazer parte deste seleto grupo de programadores que usam a linguagem SQL para manipulação e definição de dados. Bom estudo!
112
banco_dados_I_2008a.indb 112
3/3/2008 16:48:43
Banco de Dados I
SEÇÃO 1 – A estrutura da linguagem SQL A linguagem de programação SQL é formada por um grupo muito grande de comandos que podem ser executados para os mais diversos objetivos. Para facilitar o entendimento e o uso dessa poderosa linguagem de banco de dados, os comandos são divididos em linguagem de definição de dados (DDL) e linguagem de manipulação de dados (DML).
a) Linguagem de definição de dados (data definition language – DDL): fornece comandos para criação e modificação das tabelas do modelo de banco de dados, bem como a remoção de tabelas e criação de índices. Os principais comandos que fazem parte da DDL são: Create table, Drop table, Alter table. b) Linguagem de manipulação de dados (data manipulation language – DML): inclui uma linguagem de consulta aos dados das tabela. Compreende os comandos para inserir, remover e modificar informações em um banco de dados. Os comandos básicos da DML são: Select, Insert, Update, Delete.
Os comandos da linguagem de definição de dados (DDL) O principal objetivo dos comandos da linguagem de definição de dados (DDL) é possibilitar ao usuário criar as tabelas do seu modelo de banco de dados, bem como os relacionamentos entre as tabelas. Antes de iniciar o estudo dos comandos de criação de tabelas, é importante que você fique por dentro dos tipos de dados em um banco de dados, pois esse item é essencial para especificação dos valores que podem ser aceitos em cada campo, ou coluna, de uma tabela.
Unidade 5
banco_dados_I_2008a.indb 113
113
3/3/2008 16:48:43
Universidade do Sul de Santa Catarina
Quais são os tipos de dados em SQL? O padrão SQL-92 aceita uma variedade de tipos de dados, incluindo os seguintes:
Varchar(n) – é uma cadeia de caracteres de tamanho variável, com o tamanho “n” máximo definido pelo usuário. Por exem plo: um campo do Tipo Varchar(30) significa que ali podem ser cadastrados, no máximo, 30 símbolos quaisquer, como números e letras;
Int – define um tipo inteiro;
Numeric(p,d) – é um número de ponto fi xo cuja precisão é definida pelo usuário. O número consiste de “p” dígitos e “d” casas decimais. Por exemplo, um campo do tipo Numeric (9,2), tem a seguinte representação: 9999999.99, ou seja, 7 dígitos antes da vírgula e 2 após a vírgula, totalizando os 9 dígitos;
Real – é um número com ponto flutuante, ou seja, a representação de número real pode mudar de acordo com a representação atual. Como por exemplo: 100.0 é igual a 10.0 E+2;
Float(n) - é um número com ponto flutuante. A precisão é definida pelo usuário, em pelo menos “n” dígitos;
Date – representa uma data que contém um ano (com quatro dígitos), mês e dia do mês. Por exemplo, a data 23/01/1998 será representada no MySQL como sendo 2005-01-1998;
Time – representa horário, em horas, minutos e segundos.
É importante salientar que outros tipos de dados podem existir, dependendo da tecnologia e do grau de sofisticação da ferramenta de SGBD. Bem, agora que você já conhece os tipos de dados existentes para linguagem SQL, eles serão úteis quando você for definir as tabelas que farão parte de seu banco de dados. 114
banco_dados_I_2008a.indb 114
3/3/2008 16:48:43
Banco de Dados I
SEÇÃO 2 – Como criar tabelas A tarefa de criar uma tabela significa especificar seu nome, o número e o nome de cada coluna e o tipo de dados que será armazenado em cada coluna. Porém, esse processo pode ser mais amplo. A tabela é um conjunto de dados e com isso pode-se especificar as regras de acesso e uso, as quais recebem o nome de regras de integridade. Uma tabela em SQL é definida usando o comando Create Table que possui como sintaxe: create table nome da tabela ( Atributo1 Tipo1, Atributo2 Tipo2, .., AtributoN TipoN, , , ..., );
Normalmente, um banco de dados abrange um conjunto de tabelas. Para cada uma delas deve ser executado um comando Create Table para sua definição. A este conjunto de tabelas chama-se Modelo Lógico de Dados, que representa graficamente as tabelas do banco de dados.
Para facilitar sua compreensão, veja o Modelo Lógico a seguir:
Unidade 5
banco_dados_I_2008a.indb 115
115
3/3/2008 16:48:43
Universidade do Sul de Santa Catarina
Figura 5.1 – Modelo relacional com as tabelas alunos, matriculas e cursos.
Os comandos a seguir descrevem os passos para implementação deste modelo, criando cada uma das tabelas, por meio do comando Crate Table.
Inicialmente descreva o comando para criação física no computador da tabela Alunos: Create table Alunos ( Codigo_Aluno Int, Nome_Aluno Varchar(30), Idade Integer, Sexo Char );
Após a execução do comando, as tabelas podem ser manipuladas das mais diversas formas, como: inserção de dados, definição de regras, alteração de dados, etc. Para visualizar a estrutura da tabela criada usa-se o comando Describe. Comando Describe: representa de forma estrutural os campos da tabela e seus respectivos tipos de dados.
Lembre-se que quando me refiro aos campos, estou me referindo às colunas da tabela.
O comando Describe possui a seguinte sintaxe: Describe Nome_Da_Tabela;
116
banco_dados_I_2008a.indb 116
3/3/2008 16:48:43
Banco de Dados I
Nesse caso, após a execução do comando Describe Alunos, a seguinte estrutura será apresentada: Primary Key
Null
Campos
Tipo
Codigo_Aluno
Int
Sim
Nome_Aluno Idade Sexo
Varchar(30)
Sim
Integer
Sim
Char
Sim
Quadro 5.1 – Resultado da execução do comando describe alunos
O comando Describe pode ser abreviado por Desc. ficando assim: Desc Nome_Da_Tabela;
Você pode estar se perguntando sobre as propriedades desta tabela, certo? Observe que a tabela Alunos possui os campos Código_Aluno, do tipo de dado Inteiro, Nome_Aluno do tipo Varchar, Idade do tipo Inteiro e Sexo do tipo Char. Estas regras, até o momento, definem apenas o escopo de cada coluna, ou seja, nas colunas Código_Aluno e Idade só podem ser cadastrados números, de no máximo 11 dígitos. Já o campo Nome_Aluno aceita um conjunto de caracteres de tamanho máximo 30, e, por fim, o campo Sexo, que aceita apenas um caractere.
O que significa a expressão Null?
Todas as colunas da tabela Alunos possuem como valor para coluna null um “Sim”. Esta configuração determina ao banco de dados que todas as colunas da tabela Alunos podem ser cadastradas com valores nulos, ou seja, não são campos obrigatórios.
Unidade 5
banco_dados_I_2008a.indb 117
117
3/3/2008 16:48:44
Universidade do Sul de Santa Catarina
Toda vez que criamos uma tabela, as colunas por padronização sempre começam com o status de Null, ou seja, não obrigatórias.
Como definir para que o campo seja “obrigatoriamente cadastrado”?
Você estudou anteriormente que toda vez que se cria as colunas de uma tabela, por padrão, são cadastradas com Null, certo? Para definir que o campo de uma tabela é obrigatório, deve-se colocar a expressão Not Null na definição do mesmo, da seguinte forma: Nome da Coluna Tipo de Dado Not Null.
Vamos criar a tabela de Alunos novamente, mas desta vez obrigando o cadastramento do código do aluno e do nome, ok? Observe como ficaria o comando SQL:
Create Table Alunos( Codigo_Aluno Int not null, Nome_Aluno Varchar(30) not null, Idade Integer, Sexo Char );
A definição dos campos obrigatórios vale apenas para os campos definidos como not null (não nulos). Caso seja necessário especificar todos os campos como obrigatórios, deverá ser colocada a cláusula not null ao lado de cada campo. Após a execução desse comando, a estrutura do quadro passará a ter a seguinte formatação:
118
banco_dados_I_2008a.indb 118
Campos
Tipo
Primary Key
Null
Codigo_Aluno
Int
Não
Nome_Aluno
Varchar(30)
Não
Idade
Integer
Sim
Sexo
Char
Sim
Quadro 5.2 – Resultado do comando describe alunos
3/3/2008 16:48:44
Banco de Dados I
Outras regras de integridade dos dados As regras de integridade são importantíssimas para que um banco de dados evite redundância dos dados e garanta a sua integridade. A obrigatoriedade de informação dos dados de uma tabela é uma regra de integridade do banco de dados, e existem muitas outras que podem ser associadas a uma tabela, as regras de integridade permitidas englobam:
primary key(Atributo1, Atributo2, ..., AtributoN); check (P); foreign key(Atributo1, Atributo2, ..., AtributoN) references Nome da Tabela.
Sobre a sintaxe apresentada, considere:
A especificação Primary Key diz que os atributos Atributo1, Atributo2,..., Atributo N formam a chave primária da tabela. A chave primária corresponde ao campo, ou campos, que não pode de forma alguma ter valores repetidos dentro da tabela;
A cláusula check impõe um domínio a um determinado campo da tabela, forçando-o a aceitar apenas as opções pertencentes ao domínio estabelecido. Por exemplo, para a coluna Sexo pode ser estabelecido o domínio (‘M’,’F’). Isto é implementado através da seguinte cláusula check, ao se implementar uma tabela: ...check Sexo in (‘M’,’F’)... Desta forma o SGBD fará uma verificação sempre que um valor for inserido ou alterado na coluna Sexo, a fim de averiguar se seu valor encontra-se dentro do domínio estabelecido;
A cláusula foreing key inclui a relação dos atributos que constituem a chave estrangeira (Atributo1, Atributo2, ..., AtributoN) e em quais tabelas esses campos fazem referência aos campos formadores da chave primária em outra tabela;
Todos os atributos de uma chave primária são declarados implicitamente como not null. Unidade 5
banco_dados_I_2008a.indb 119
119
3/3/2008 16:48:44
Universidade do Sul de Santa Catarina
Agora que já temos a tabela Alunos criada, vamos definir um campo do tipo chave primária para essa estrutura. Como o Nome do Aluno, Idade e Sexo são campos que podem ter o mesmo valor, adotarei o Código do Aluno como chave primária. Chave Primária é aquele campo que não pode, de forma alguma, repetir-se dentro da tabela.
Como alterar a estrutura da tabela?
A alteração da estrutura de uma tabela do banco de dados pode ser realizada de duas formas: ou se acrescenta um campo novo ou se altera a estrutura do campo desejado. A alteração realizada se refere SEMPRE à estrutura da tabela e NUNCA aos campos cadastrados na mesma. A alteração dos dados cadastrados é realizada por meio de outro comando, que será visto por você na próxima unidade. Bem, continuando... Como a tabela Alunos já existe no nosso banco de dados, a tarefa que será executada representa uma alteração na estrutura da tabela. Será então adicionada a regra de chave primária ao campo Codigo_Aluno. Para isso, será necessária a utilização do comando em SQL: Alter Table, que possui a seguinte sintaxe: Alter Table Nome_ da_Tabela Operação Nome_ do_ Campo Nova Regra;
A operação pode ser: Operação
Funcionalidade
ADD
Adiciona um novo campo.
MODIFY
Altera a estrutura de um campo.
Quadro 5.3 – Formas de uso do comando Alter Table.
Ao alterar o campo Codigo_aluno para ser uma uma chave primária, sua sintaxe será: 120
banco_dados_I_2008a.indb 120
3/3/2008 16:48:44
Banco de Dados I
Alter Table Alunos Add Primary Key(Codigo_Aluno);
Vamos ver se a alteração foi realizada. Para tanto, o comando Describe deve ser novamente executado com a finalidade de descrever a estrutura da tabela. Observe: Campos
Tipo
Primary Key
Null
Codigo_Aluno
Int
SIM
NÃO
Nome_Aluno
Varchar(30)
Não
Idade
Integer
Sim
Sexo
Char
Sim
Quadro 5.4 – Estrutura da tabela de alunos após a execução do comando describe alunos
Resultado do comando Describe Alunos após a inserção da chave primária Codigo_Aluno. Importante notar que a coluna Null para o campo Codigo_ Aluno possui o valor SIM, pois toda chave primária obrigatoriamente deve ser cadastrada. Antes de continuar a criar as tabelas Cursos e Matrículas que fazem parte do modelo proposto nesta seção, realizaremos outras alterações na tabela Alunos, para exemplificar a sintaxe do comando Alter Table.
Como alterar o tamanho do campo Nome_Aluno?
O comando a ser utilizado será: Alter Table Alunos MODIFY Nome_Aluno Varchar(40);
Observe que nesse exemplo, ao invés de utilizar a cláusula Add foi utilizada a cláusula Modify, pois o campo Nome_Aluno já existia, porém, com outro tamanho. Por isso, o campo foi apenas modificado. Unidade 5
banco_dados_I_2008a.indb 121
121
3/3/2008 16:48:44
Universidade do Sul de Santa Catarina
Acompanhe outras aplicações de comandos:
Adicionando o Campo Endereço, do tipo varchar(30): Alter Table Alunos ADD Endereço Varchar(30);
Adicionando o Campo Cidade, do tipo Varchar(25): Alter Table Alunos ADD Cidade Varchar(25);
Adicionando o Campo UF, do tipo Varchar(02): Alter Table Alunos ADD UF Varchar(02);
Mostrando a estrutura do quadro: Campos
Tipo
Primary Key
Null
Codigo_Aluno
Int
SIM
NÃO
Nome_Aluno
Varchar(30)
Não
Idade
Integer
Sim
Sexo
Char
Sim
Endereço
Varchar(30)
Sim
Cidade
Varchar(25)
Sim
UF
Varchar(02)
Sim
Quadro 5.5 – Resultado do comando describe alunos após as alterações
Como criar a estrutura da tabela em um Grupo Único de Comandos?
No item acima, na criação da tabela de Alunos, realizamos vários comandos para definição da tabela. Basicamente, uma tabela é um conjunto de campos, chaves primárias e campos obrigatórios, sendo assim, podemos criar todas estas regras num único passo, como será feito a seguir, na criação da tabela de Cursos, observe: 122
banco_dados_I_2008a.indb 122
3/3/2008 16:48:45
Banco de Dados I
Create Table Cursos( Codigo_Curso Integer, Descricao Varchar(30) not null, Numero_Vagas Integer not null, Periodo Char, Primary Key(Codigo_Curso) );
Executando o comando Describe para visualizar a estrutura da tabela, tem-se: Campos
Tipo
Primary Key
Null
Codigo_Curso
Int
SIM
NÃO
Descrição
Varchar(30)
NÃO
Numero_Vagas
Integer
NÃO
Periodo
Char
Sim
Quadro 5.6 - Visualizando a estrutura da tabela Cursos
Como característica desta tabela, observe que os campos Codigo_Curso, Descrição e Numero_vagas são obrigatórios, e o campo Codigo_Curso ainda é uma chave primária. O único campo que pode ser cadastrado sem valores é o campo Período.
SEÇÃO 3 – Como definir tabelas relacionadas em SQL? Até aqui você criou um conjunto de tabelas que não estavam relacionadas e cuja principal finalidade era cadastrar diretamente os dados.
Unidade 5
banco_dados_I_2008a.indb 123
123
3/3/2008 16:48:45
Universidade do Sul de Santa Catarina
Figura 5.2 – Modelo relacional com as tabelas alunos, matrículas e cursos
Porém, no modelo de dados do início desta unidade, foi apresentado uma tabela associativa chamada Matricula, que deverá conter o Aluno que fez a matrícula, o Curso no qual o mesmo se matriculou e a data da matrícula. Note que como esta tabela é associativa, não há necessidade de recadastrar os dados do aluno e do curso, mas sim, fazer uma referencia das tabelas Alunos e Cursos à tabela Matrícula.
A referência entre tabelas chama-se de chave estrangeira.
A tabela Matrícula terá duas chaves estrangeiras, os campos cod_ alu_mat e cod_curso_mat, que referenciam a tabela Alunos pelo campo Codigo_Aluno e a tabela Cursos pelo campo Codigo_ Curso, respectivamente. Em outras palavras, pode-se dizer que o código identificador do aluno matriculado na tabela de Matrículas, que estará armazenado no campo cod_alu_mat, deverá vir da tabela de Alunos, originário do campo Codigo_Aluno. Já o Código do Curso na tabela Matrículas, que será armazenado no campo cod_curso_mat, deverá vir da tabela Cursos, pelo campo Codigo_Curso. Veja o diagrama a seguir:
124
banco_dados_I_2008a.indb 124
3/3/2008 16:48:45
Banco de Dados I
Alunos
Matriculas Cursos
Codigo_Aluno
Cod_Alun_Mat Cod_Curso_Mat
Codigo_Curso
Figura 5.3 – Origem dos valores das colunas COD_ALU_MAT E COD_CURSO_MAT.
Essas referências possuem a seguinte regra e são feitas na seguinte sintaxe:
Para o campo cod_alu_mat, da tabela de matrículas, que os dados vêm da tabela de Alunos, pelo campo Codigo_ Aluno, o comando em SQL é : Foreign Key (cod_alu_mat) references Alunos (Codigo_Aluno);
Para o campo cod_curso_mat, da tabela de matrículas, que os dados vêm da tabela de Cursos, pelo campo Codigo_Curso, o comando em SQL é: Foreign Key (cod_curso_mat) references Cursos (Codigo_Curso);
Como definir os tipos de dados das chaves estrangeiras?
O que é e como referenciar uma chave estrangeira você aprendeu no item anterior, porém, qual o tipo de dados de um campo cujos seus dados vêm de outra tabela.
Unidade 5
banco_dados_I_2008a.indb 125
125
3/3/2008 16:48:45
Universidade do Sul de Santa Catarina
O que é e como referenciar uma chave estrangeira você aprendeu no item anterior, porém qual o tipo de dados de um campo cujos seus dados vêm de outra tabela? Bem, como o campo cod_alu_mat da tabela de matrículas vem do campo Codigo_Aluno em alunos, os dois campos devem ter o mesmo tipo, sendo assim, o campo cod_alu_mat será do tipo: Int (inteiro). A mesma regra deve ser aplicada ao campo cod_curso_mat. Como o campo Codigo_Curso na tabela de Cursos é Integer, o campo cod_curso_mat deverá ser inteiro (Int) também. Como o campo Data_Matricula não é um campo chave estrangeira, ele será do tipo Date. Como um aluno não pode se matricular no mesmo curso, na mesma data, todos os campos da tabela de Matrículas serão chaves primárias. Desta forma, a tabela Matrículas seria criado pelo comando SQL a seguir: Create Table Matriculas( Cod_Alu_Mat Int, Cod_Curso_Mat Int, Data Date, Primary Key (Cod_Alu_Mat, Cod_Curso_Mat, Data), Foreign Key (Cod_Alu_Mat) references Alunos (Codigo_Aluno), Foreign Key (Cod_Curso_Mat) references Cursos(Codigo_Curso) );
A representação da tabela Matrículas a partir do comando Describe: Campos
Tipo
Primary Key
Null
Cod_Alu_Mat
Int
SIM
Não
Cod_Curso_Mat
Int
SIM
Não
Data
Date
SIM
Sim
Quadro 5.7 – Estrutura da tabela de matrículas após a execução do comando describe.
126
banco_dados_I_2008a.indb 126
3/3/2008 16:48:45
Banco de Dados I
Note que todos os campos são marcados com Primary Key igual a SIM, em uma referência à chave primária. Bem, com isso você finalizou o processo de transformar o modelo lógico do início desta unidade num modelo físico, ou seja, você transformou um modelo lógico num banco de dados de verdade.
SEÇÃO 4 – Como remover as tabelas do banco de dados? Assim como você pode criar novas tabelas para um banco de dados, você também pode removê-las através do comando Drop Table. Sua sintaxe é: Drop Table Nome_da_tabela;
Porém, algumas regras devem ser respeitadas para que uma tabela seja removida, ou “dropada”, no jargão de banco de dados. Estas regras são:
uma tabela só pode ser removida se ela não possuir campos considerados como sendo chave estrangeira para outra tabela;
se uma tabela possui como referência uma chave estrangeira para outra tabela, será preciso primeiro remover as tabelas para as quais são feitas as referências;
uma tabela só pode ser removida se não possuir nenhum dado cadastrado, caso contrário, primeiro ela deverá ser esvaziada para depois ser removida.
Para remover a tabela Alunos do banco de dados criado anteriormente, utilize o comando Drop Table, com a seguinte sintaxe: Drop Table Alunos
Unidade 5
banco_dados_I_2008a.indb 127
127
3/3/2008 16:48:45
Universidade do Sul de Santa Catarina
Porém ao se excluir a tabela de Alunos será criada uma inconsistência no esquema do banco de dados, pois a tabela Matrículas estará fazendo referência a uma tabela que não existe mais, dessa forma os dados não refletem a realidade esperada. Para que esse problema não ocorra, o SGDB não permitirá que a tabela Alunos seja removida, pois há alguma outra tabela no esquema que depende dela. Veja o diagrama a seguir:
Alunos
Matriculas
Figura 5.4 – Representação da remoção de uma tabela com campos que são foreign key para outra tabela
Para se excluir a tabela de Alunos, é necessário que se exclua antes a tabela de Matrículas, para que a ligação entre as mesmas não exista mais.
Note que o processo de exclusão de tabelas pode resultar em problemas graves de inconsistência de dados, gerando uma necessidade de exclusão de várias tabelas do banco de dados devido ao número de relacionamento entre elas. 128
banco_dados_I_2008a.indb 128
3/3/2008 16:48:45
Banco de Dados I
Portanto, é fundamental que ao se modelar um banco de dados sejam previstos todos os relacionamentos possíveis e as tabelas que são realmente necessárias, a fim de se evitar o trabalho redobrado. Nesse casso, para excluir a tabela Alunos é necessário dois comandos Drop Table, com as seguintes sintaxes:
Drop Table Matriculas; Matriculas
Alunos
Cursos
Figura 5.5 – Remoção da tabela matrículas
Drop Table Alunos; Matriculas
Alunos
Cursos
Figura 5.6 – Remoção da tabela alunos
Após esses dois comandos, o modelo de banco de dados ficará assim: Cursos
Figura 5.7 – Tabelas restantes após as remoções
O próximo passo é compreender os comandos que permitam manipular os dados desse banco de dados, fazendo inserções, alterações, exclusões e consultas nas tabelas, os chamados comandos de DML (Linguagem de Manipulação de Dados). Mas antes disso você vai praticar um pouco mais os comandos de definição de dados. Um bom exercício para você e até a próxima unidade.
Unidade 5
banco_dados_I_2008a.indb 129
129
3/3/2008 16:48:46
Universidade do Sul de Santa Catarina
Síntese A programação em banco de dados utiliza uma linguagem de programação própria, chamada de linguagem estruturada de pesquisa, ou simplesmente SQL. A linguagem SQL segue um padrão para qualquer ferramenta de banco de dados, sendo assim, ela é independente do ambiente no qual será utilizada. A linguagem SQL é dividida basicamente em duas formas, os comandos de Definição de Dados (DDL) e os comandos de Manipulação de Dados (DML). Dentro do conjunto dos comandos de DDL, estão: Create Table, Alter Table e Drop Table. O comando Create Table permite ao programador a criação das tabelas do modelo físico, definindo a descrição de cada coluna e o seu tipo de dado. As restrições da tabela são chamadas de constraints e podem ser de dois tipos, basicamente: chaves primárias e chaves estrangeiras. As chaves primárias e estrangeiras são sempre do tipo not null, ou seja, seus dados devem ser preenchidos obrigatoriamente. Os campos do tipo Null têm seu preenchimento opcional. Qualquer alteração na estrutura da tabela é realizada pelo comando Alter Table, e possui duas formas de uso, ADD quando se deseja incluir um novo campo na tabela e Modify quando se deseja alterar um campo já existente. Para se remover uma tabela do banco de dados, existe o comando Drop Table. Para que uma tabela seja removida, ela não pode ter dados cadastrados e não pode ser uma tabela estrangeira para outra tabela. Para visualizar a estrutura de uma tabela do banco de dados utiliza-se o comando Describe, seguido do nome da tabela. Esse comando mostra na tela os nomes das colunas da tabela e o tipo de cada uma destas colunas. Pode-se abreviar o comando usando simplesmente Desc.
130
banco_dados_I_2008a.indb 130
3/3/2008 16:48:46
Banco de Dados I
Atividades de auto-avaliação Nesta atividade você revisará os comandos de definição de dados por meio da criação de um banco de dados físico a partir de um modelo conceitual. Com base no modelo de dados a seguir, escreva os comandos em SQL que realizam cada uma das tarefas solicitadas. Itens
Produto Codigo_Produto Integer NN (PK) Descricao_Produto Varchar(30) NN Preco_Produto Float NN
Possui
Cod_Prod Integer NN (PFK) NumNF INteger NN (PFK) Num_Item INteger NN Qte_Item Float NN
Pertence
LEGENDA Símbolo
Significado
PK
Chave Primária
NN
Not Null
PFK
Chave Primária e Chave Estrangeira
Nota_Fiscal Numero_NF_Integer NN (PK) Data_NF Date NN Valor_NF Float NN
1. Comando em SQL para criação da tabela Produto.
2. Comando em SQL para criação da tabela Nota_Fiscal.
Unidade 5
banco_dados_I_2008a.indb 131
131
3/3/2008 16:48:46
Universidade do Sul de Santa Catarina
3. Comando em SQL para criação da tabela de Itens.
4. Altere o campo Descricao_Produto da tabela Produto para o tipo Varchar(50).
5. Altere a tabela Nota_Fiscal adicionando o campo ICMS do tipo Float.
6. Altere a tabela Produto adicionando o campo Peso do tipo Float.
7. Altere a tabela Produto adicionando o campo Data_Validade do tipo Date.
8. Escreva o comando em SQL que apresenta a estrutura da tabela Produto.
132
banco_dados_I_2008a.indb 132
3/3/2008 16:48:46
Banco de Dados I
9. Escreva o comando em SQL que apresenta a estrutura da tabela Nota_ Fiscal.
10. Remova a tabela Itens do modelo de banco de dados.
Saiba mais Para aprofundar as questões abordadas nesta unidade, você poderá pesquisar em:
JESUS, João Batista de. Ansi SQL 89 92. Axcel Books do Brasil Ltda, 2004.
MEDEIROS, M. Oracle 8i: conceitos básicos. Florianópolis: Advanced, 2000.
SOARES, W. MySQL : conceitos e aplicações. São Paulo: Érica, 2001.
Unidade 5
banco_dados_I_2008a.indb 133
133
3/3/2008 16:48:46
banco_dados_I_2008a.indb 134
3/3/2008 16:48:46
UNIDADE 6
Ferramentas Case para Apoio ao Projeto de Banco de Dados
6
Objetivos de aprendizagem
Compreender a importância das ferramentas Case.
Identificar as vantagens no uso de uma ferramenta Case como apoio à modelagem de dados.
Conhecer algumas ferramentas Case para modelagem de dados.
Seções de estudo Seção 1 Ferramentas Case Seção 2 Ferramenta CaseStudio Seção 1 Ferramenta Dr. Case Seção 2 Ferramenta ERWin
banco_dados_I_2008a.indb 135
3/3/2008 16:48:46
Universidade do Sul de Santa Catarina
Para início de estudo Conforme você estudou nas unidades anteriores, um SGBD é uma ferramenta relativamente complexa, onde existem uma série de mecanismos implementados bem como algumas regras a serem seguidas para a sua utilização, todas visando preservar e manter os dados de maneira íntegra. É importante salientar que o projeto de um banco de dados demanda muito mais esforço do que a sua implementação ou implantação. Isto se deve ao fato de que se, ao ser projetado o banco de dados, for omitido ou registrado de forma equivocada alguma informação, este não contemplará adequadamente as necessidades do ambiente de negócio que estiver sendo informatizado, refletindo diretamente em problemas na sua utilização. Para que um projeto de banco de dados seja bem sucedido é imprescindível que se construa um modelo de dados, ou seja, que sejam expostos os elementos que fazem parte do banco de dados. Você estudou na unidade anterior que, um modelo de dados relacional é composto principalmente pelas tabelas que compõem este banco de dados e seus relacionamentos, indicando como as informações se comportam e como estão inter-relacionadas. Para se construir um modelo de dados com poucos elementos, devidamente documentado, não é tarefa das mais desafiadoras. Você já se imaginou projetando um banco de dados e tendo que construir um modelo de dados com centenas de tabelas e outras centenas de relacionamentos, tudo manualmente? Parece ser um pouco mais complicado, não é mesmo? Ainda mais se pensarmos na manutenção deste modelo durante o seu tempo de vida. Para que estes modelos possam ser mais facilmente construídos e mantidos, entram em cena as ferramentas Case, ferramentas estas que possuem funcionalidades específicas para a construção de modelos de dados, e é o que será apresentado nesta unidade. Bons estudos!
136
banco_dados_I_2008a.indb 136
3/3/2008 16:48:46
Banco de Dados I
SEÇÃO 1 – Ferramentas Case As ferramentas case (Computer Aided Software Engineering) estão para a Engenharia de Software assim como o CAD (Computer Aided Design) está para a Engenharia Civil. Ambas as ferramentas são programas que auxiliam o analista na construção do sistema, prevendo ainda na etapa de estudos, como será sua estrutura, quais serão suas entidades e relacionamentos. Para tanto, são elaborados vários diagramas que em conjunto constituem praticamente uma “planta” do sistema a ser desenvolvido. Cabe ressaltar que as ferramentas case disponíveis no mercado têm abrangências distintas, implicando no seu grau de utilização e envolvimento durante um projeto de um sistema informatizado. Algumas destas ferramentas limitam-se ao auxílio no projeto do banco de dados, gerando apenas uma visualização gráfica do seu projeto, outras possibilitam também a geração do código para a implementação do banco de dados, outras são ainda mais abrangentes e complexas, possibilitando também o projeto do software (telas, relatórios...) gerando inclusive o código de implementação em alguma linguagem de programação. As ferramentas Case também se distinguem pelo nível de modelagem e documentação que proporcionam. Algumas delas se limitam ao projeto nível lógico, onde são definidos as tabelas, suas colunas e seus relacionamentos. Outras já são mais abrangentes, permitindo uma modelagem inicial a nível conceitual, onde se procura dar uma visão de negócio ao modelo de dados, uma vez que o modelo lógico é um modelo bastante técnico. Esta posição auxilia na definição dos elementos do modelo junto ao usuário final, que geralmente não é um especialista na área de informática. Encontramos ainda no mercado ferramentas que proporcionam desde uma visão a nível de modelagem de processos, onde são mapeados os processos de negócio do ambiente que se está informatizando, até a implementação do banco de dados. Isto permite um maior controle na obtenção das informações de quais elementos estão envolvidos no ambiente a informatizar,
Unidade 6
banco_dados_I_2008a.indb 137
137
3/3/2008 16:48:47
Universidade do Sul de Santa Catarina
reduzindo a possibilidade de erros no mapeamento do mundo real para o modelo de dados, aumentando porém a complexidade da ferramenta e o volume de trabalho a ser realizado. Outra característica importante neste tipo de ferramenta é a possibilidade de se executar o que denominamos “engenharia reversa”. Apesar do nome imponente, esta atividade se resume a realizar o processo inverso da criação de um banco de dados, ou seja, ao invés de criá-lo a partir do modelo de dados, é criado o modelo de dados a partir de um banco de dados já existente. Isto se torna interessante quando encontramos uma determinada base de dados já em operação que necessita de manutenção, porém não existe um modelo de dados documentado sobre aquela base de dados. Neste caso, primeiro é realizada a engenharia reversa, na qual a ferramenta case pesquisa na base de dados quais tabelas e relacionamento existem e traça um mapeamento destes elementos, construindo um modelo de dados a nível lógico, identificando cada tabela, suas colunas, chaves primárias e estrangeiras. A partir deste modelo de dados podemos ter uma visão completa do banco de dados que está implementado e assim pode-se trabalhar com mais precisão nas alterações a serem realizadas.
A técnica estruturada se fundamenta em três modelos: o Modelo de Entidade Relacional, o Diagrama de Fluxo de Dados e o Dicionário de Dados. Para saber mais, pesquise a bibliografia: GANE, Sarso. Análise estruturada. LTC, 1996.
As ferramentas Case suportam notações advindas da Técnica Estruturada – Análise Estruturada, surgida no final da década de 70 com Tom De Marco. Em seguida atualizadas com Chris Gane, Trish Sarson e Edward Yourdon. Existem inúmeras ferramentas case disponíveis no mercado. Entre elas podemos citar: Rational Rose, ERwin, Oracle Designer, Genexus, Clarify, Dr.Case, Paradigm, PowerDesigner, Arena, Visio, DB Designer, etc.
Podemos perceber que no mercado existem ferramentas com diversos níveis de abrangência para mapeamento dos dados, bem como diversos níveis de detalhamento de um modelo de dados. Para o estudo desta unidade será demonstrada três delas: Case Studio, Dr. Case e ERwin. A intenção é fornecer as características de cada uma para que no futuro você possa optar pelo software mais adequado ao seu perfil. Desse ponto de vista, o estudo é mais uma análise do que uma avaliação criteriosa. 138
banco_dados_I_2008a.indb 138
3/3/2008 16:48:47
Banco de Dados I
Para a avaliação, foram escolhidos alguns pré-requisitos, que são: Pré-requisito
Avaliação
Diagramas
Quais os diagramas a ferramenta gera e qual o nível de inteligência de cada um desses diagramas.
Scripts de banco de dados
Qual o nível de geração de scripts e quais os bancos de dados compatíveis.
Recursos extras
Recursos que a ferramenta disponibiliza.
Documentação
Quais os documentos gerados.
Nas próximas seções serão apresentadas algumas telas dessas ferramentas e onde você pode baixá-las pela internet.
SEÇÃO 2 – Ferramenta Case Studio Essa ferramenta computacional desenvolvida por Charonware, uma empresa da República Tcheca, possui como característica importante o suporte a várias versões de bancos de dados, como: MySQL, PostGreSQL, FireBird, Oracle. O fato positivo destaca-se por ser uma ferramenta bastante simples de ser utilizada e que exige muito pouco recurso do equipamento para a sua operação. O fato negativo; porém, fica por conta da ferramenta não possuir uma versão em português. Entre os principais recursos do Case Studio, temos:
implementação dos principais relacionamentos de forma automática;
controle de usuário e segurança, tornando possível o controle das operações disponíveis em uma determinada entidade.
A seguir, a tela inicial do software Case Studio:
Unidade 6
banco_dados_I_2008a.indb 139
139
3/3/2008 16:48:47
Universidade do Sul de Santa Catarina
Figura 6.1: Tela inicial do programa Case Studio 2
O Modelo de Entidade Relacional representa as tabelas e o relacionamento entre elas. O Diagrama de Fluxo de Dados representa os processos que podem ser executados em cada tabela.
O Case Studio utiliza somente a Análise Estruturada (AE), por meio dos digramas de MER (Modelo de Entidade Relacional) e o DFD (Diagrama de Fluxo de Dados), de forma interativa e visual. Veja a seguir uma imagem do ambiente Case Studio.
Figura 6.2: Interface de escolha do tipo de SGBD do Case Studio
A Figura 6.2 representa a opção do Case Studio na qual o usuário especifica para qual ferramenta de banco de dados deve ser gerado o esquema das entidades. A definição da estrutura das entidades é realizada de forma rápida e fácil. Na interface de definição da entidade, o usuário informa o nome da entidade, os nomes das colunas e os seus respectivos tipos.
140
banco_dados_I_2008a.indb 140
3/3/2008 16:48:47
Banco de Dados I
Veja na figura a seguir a definição da entidade Alunos:
Figura 6.3: interface de definição dos campos da tabela de alunos
A representação gráfica da entidade Alunos apresenta o nome da entidade e a sua chave primária. Veja a seguir: Alunos Matrícula (PK)
Figura 6.4: representação da chave primária da tabela de alunos no Case Studio
Com relação à cardinalidade, a ferramenta só permite a cardinalidade N para N, que, como foi visto por você anteriormente, se transforma em uma entidade associativa.
Figura 6.5: tipos de relacionamentos do Case Studio
A Figura 6.5 apresenta os tipos de cardinalidades possíveis no Case Studio.
Unidade 6
banco_dados_I_2008a.indb 141
141
3/3/2008 16:48:47
Universidade do Sul de Santa Catarina
Na Figura 6.6 tem-se a cardinalidade N para N transformada em uma cardinalidade com a entidade associativa Matrícula, na ligação entre Alunos e Cursos:
Alunos Matrícula (PK) Possui
Matrícula Matrícula (PFK) Código (PFK)
Cursos Código (PK) Pertence
Figura 6.6: Representação de um relacionamento n para n transformado em n para um no Case Studio
A criação das entidades e seus relacionamentos não significa que o banco de dados tenha sido criado fisicamente. O que se tem na tela é uma representação que poderia ser desenhada em papel ou em qualquer outro acessório de documentação.
A transferência das regras representadas no diagrama para uma banco de dados real é realizada pelos scripts de banco de dados, que são na verdade os comandos de programação para banco de dados que seguem a sintaxe do banco de dados escolhido. No caso do Case Studio, a ferramenta permite:
a criação de tabelas;
a definição dos nomes de campos e seus respectivos tipos;
a definição das chaves primárias e estrangeiras.
Na Figura 6.7, tem-se a geração do script para criação das tabelas Alunos, Cursos e Matrículas, representadas graficamente nas figuras anteriores.
142
banco_dados_I_2008a.indb 142
3/3/2008 16:48:48
Banco de Dados I
Figura 6.7: Script SQL gerado pelo Case Studio
Os documentos dos projetos criados no Case Studio podem ser gerados em formato RTF e HTML. Você deseja acessar uma versão de demonstração? Acesse o endereço www.casestudio.com/enu/ download.aspx, no link download, conforme a figura a seguir:
Figura 6.8: link na página web de download do Case Studio
Unidade 6
banco_dados_I_2008a.indb 143
143
3/3/2008 16:48:48
Universidade do Sul de Santa Catarina
SEÇÃO 3 – Ferramenta Dr. Case A ferramenta Dr. Case é distribuída pela Squadra e foi desenvolvida pela DrSys, por meio do apoio da Softex, pela UFMG. Está na versão 3.5e. O teste foi efetuado na edição trial. Veja a seguir a tela de abertura do software Dr. Case.
Figura 6.9: Tela inicial da ferramenta Dr. Case
No Dr. Case estão disponíveis somente os Modelos MER e o DFD. Todos os dois são implementados de forma gráfica, visual e de utilização bastante fácil. A notação utilizada é a do Peter Chen. O MER é exibido como parte do modelo conceitual sendo possível incluir observações textuais entre as entidades.
Uma característica importante dessa ferramenta é o grau de documentação aplicado ao projeto que será modelado.
Por exemplo, na figura a seguir são cadastrados: o nome do projeto que será modelado, o banco de dados a que se destina, quem é o analista responsável pelo mesmo, a sua data de início e término previsto:
144
banco_dados_I_2008a.indb 144
3/3/2008 16:48:48
Banco de Dados I
Figura 6.10: Interface de identificação do projeto no Dr.Case
Tanto o MER quanto o DFD possuem diversos recursos como configuração de cores, reorganização e validação dos dados. O gerador de DFD é um módulo à parte do Dr. Case, chamado de Dr. Case DFD. A definição da estrutura das entidades que compõem o esquema de banco de dados é realizada por meio de uma interface muito amigável, na qual o usuário vai interagindo direto com cada propriedade da tabela a ser criada. Veja, na figura a seguir, a representação da estrutura da tabela Alunos modelada pelo Dr. Case:
Interface de definição dos processos que podem ser executados pelas tabelas do modelo criado. Por exemplo: Cadastrar Aluno.
Figura 6.11: Interface de definição dos campos da tabela de alunos no Dr.Case
Unidade 6
banco_dados_I_2008a.indb 145
145
3/3/2008 16:48:48
Universidade do Sul de Santa Catarina
A criação do modelo gráfico é realizada de forma simples, por meio das funções apresentadas na barra de ferramentas, conforme a imagem a seguir:
Figura 6.12: Tipos de relacionamentos do Dr.Case
Para ilustrar o que você estudou até aqui, elaborei um esquema das tabelas Alunos, Cursos e Matrícula, por meio das ferramentas de criação do modelo conceitual. Verifique como ficou representado:
Figura 6.13: Tabela associativa de alunos e cursos
O diagrama pode ser transformado em um banco de dados físico por meio da geração do script de banco de dados. A geração de scripts no Dr. Case possui os recursos mais comuns e esperados nessa operação, como scripts para tabelas, chaves primárias, chaves estrangeiras, nomes das colunas e seus respectivos tipos de dados. Veja o script gerado pelo Dr. Case para criação da tabela de Alunos:
Figura 6.14: script SQL gerado pelo Dr.Case
146
banco_dados_I_2008a.indb 146
3/3/2008 16:48:49
Banco de Dados I
A ferramenta suporta a maioria dos bancos de dados, mas não possui suporte a alguns importantes bancos do mercado como MySQL, Firebird e PostgreSQL. Assim como a ferramenta Case Studio, O Dr. Case gera todos os principais documentos de análise em formato próprio, com a possibilidade de exportar para diversos formatos como .doc, .txt e .xls (planilha Excel). Veja a tela de geração de documentação do software Dr. Case:
Figura 6.15: Interface de documentação do Dr. Case
Para obter uma cópia da versão trial do Dr. Case, acesse o endereço www.squadra.com.br. Você verá uma página semelhante à seguinte figura:
Figura 6.16: página web de download do Dr.Case
Após o cadastramento de seus dados, será aberta uma janela para download do programa. Esse cadastro é apenas uma formalidade do site, não representando de forma alguma uma pré-venda.
Unidade 6
banco_dados_I_2008a.indb 147
147
3/3/2008 16:48:49
Universidade do Sul de Santa Catarina
SEÇÃO 4 – Ferramenta ERWin Esta ferramenta case ficou por muito tempo conhecida como ERwin/ERX, uma ferramenta leve e de fácil utilização. Porém, em 1998 a desenvolvedora do ERwin, a Logic Works, foi comprada pela Platinum. Na época, era disponibilizada a versão 2.5, que foi transformada na versão Platinum ERwin ERX 3.52. Versão essa que existiu até 1999, quando a CA (Computer Associates) adquiriu a Platinum. Quando a CA adquiriu o ERwin, incluiu o software em um pacote de ALM (Application Lyfe Cycle Management), chamado AllFusion. O ERwin passou a se chamar AllFusion ERwin Data Modeler. Com isso, ganhou uma interface mais arrojada e alguns recursos muito interessantes. Como as outras duas ferramentas anteriores o ERwin segue o paradigma de modelagem voltada à entidade-relacionamento, com visões lógica e física do modelo. O diagrama é feito com recursos de arrastar e soltar, com todas as validações de chaves estrangeiras e primárias. Veja a seguir a interface de integração do usuário com o modelo a ser criado:
Figura 6.17: Interface geral do ERwin
A ferramenta suporta uma grande quantidade de bancos de dados, como: DB2, Oracle, Ingres, SQL Server, Sybase, PROGRESS, Clipper, dBaseIII, dBaseIV, Access, FoxPro, Paradox.
148
banco_dados_I_2008a.indb 148
3/3/2008 16:48:49
Banco de Dados I
A ferramenta ERwin disponibiliza uma série de recursos muito interessantes como:
complete compare: uma ferramenta que simplesmente compara a estrutura de banco de dados com o MER, apontando as diferenças existentes,
o comando de impressão do DER disponibiliza o redimensionamento da escala do diagrama permitindo controlar e prever em quantas páginas será impresso o diagrama, sem alterar a posição das entidades;
model sources: um modelo ou um projeto pode ser constituído de vários outros modelos, ou seja, pode ser criado um vínculo entre arquivos do ERwin e depois sincronizá-los. Isso é útil em casos típicos de compartilhamento de entidades entre vários projetos.
O ERwin possui um gerador de relatórios em vários formatos, de fácil manipulação e interação pelo usuário. Na imagem a seguir é apresentada a tela de interação com usuário do ERwin para criação dos relatórios de documentação:
Figura 6.18: Interface de documentação do ERwin
Para obter uma cópia do software ERwin, acesse o endereço: .
Unidade 6
banco_dados_I_2008a.indb 149
149
3/3/2008 16:48:50
Universidade do Sul de Santa Catarina
Bem, nesta unidade você teve breve contato com algumas ferramentas computacionais que podem auxiliá-lo no processo de construção do projeto de um banco de dados. Muitas outras ferramentas poderiam ser apresentadas aqui, porém o objetivo principal é mostrar o quanto uma ferramenta case pode ser útil para um profissional de banco de dados. Lembre-se que a ferramenta é apenas um complemento às suas atividades. Se o processo de modelar e analisar o problema forem realizados de forma errada, a ferramenta fará a representação gráfica também de forma errada. Sendo assim, cabe a você analisar o problema com calma e utilizar os recursos da ferramenta de forma adequada, gerando um trabalho em equipe, você e o computador.
Síntese Você estudou nesta unidade que a utilização de ferramentas computacionais para facilitar o processo de criação dos modelos de banco de dados pode ser de fundamental importância durante o projeto de um banco de dados. Tamanha importância se deve ao fato de que as ferramentas Case agregam a um projeto algumas características, como:
Maior produtividade na construção do modelo de dados. Utilizando-se de ferramental específico para esta finalidade, há elementos facilitadores para a construção destes modelos.
Mais comodidade na manutenção dos modelos de dados. Os modelos de dados são alterados mais facilmente e com mais precisão, uma vez que a ferramenta não permite certas definições inadequadas para uma determinada situação.
Maior controle de todo o modelo de dados. A partir do momento que um projeto de banco de dados passa a contar com mais de uma dezena de tabelas interrelacionadas, torna-se muito difícil dar manutenção a
150
banco_dados_I_2008a.indb 150
3/3/2008 16:48:50
Banco de Dados I
este modelo manualmente, ou até mesmo complementálo. Com o uso de ferramentas case o trabalho fica mais fácil e seguro, uma vez que você pode visualizar apenas parte do modelo de dados, não se atendo a situações que não lhe interessem no momento.
Geração automática do código para a implementação do projeto do banco de dados.
Atividades de auto-avaliação A empresa Pare Aqui deseja implantar um sistema para controle dos seus clientes. A empresa possui vários pátios de estacionamento na cidade, porém o controle é realizado por meio de anotações em caderno, e isso tem gerado uma perda muito grande de recursos financeiros e até mesmo de clientes. A empresa adota as seguintes regras:
no caderno de clientes são cadastrados: o nome do cliente, a sua data de nascimento e o seu CPF;
no caderno de veículos são cadastrados: a placa, a cor e o modelo;
no caderno de estacionamento são cadastrados: a data de entrada e saída, a hora de entrada e saída e a placa do veículo;
o mesmo cliente pode ter mais de um carro estacionado no pátio.
Com base nesta descrição, construa o modelo de dados numa ferramenta CASE e perceba como fica mais fácil trabalhar com o apoio de uma ferramenta especializada para esta finalidade.
Unidade 6
banco_dados_I_2008a.indb 151
151
3/3/2008 16:48:50
Universidade do Sul de Santa Catarina
152
banco_dados_I_2008a.indb 152
3/3/2008 16:48:50
Banco de Dados I
Saiba mais Para aprofundar as questões abordadas nesta unidade, você poderá pesquisar nos sites dos fabricantes de ferramentas case, alguns são sugeridos abaixo, a fim de identificar de forma mais aprofundada as características das ferramentas e suas potencialidades.
Unidade 6
banco_dados_I_2008a.indb 153
153
3/3/2008 16:48:50
banco_dados_I_2008a.indb 154
3/3/2008 16:48:50
UNIDADE 7
Acesso e Manipulação de Dados Objetivos de aprendizagem
Identificar os comandos de manipulação de dados (DML).
Inserir dados em uma tabela.
Alterar e remover os dados cadastrados.
7
Seções de estudo Seção 1 A estrutura dos comandos de manipulação de dados.
Seção 2 Inserção de dados em uma tabela. Seção 3 Alteração dos dados da tabela. Seção 4 Exclusão de dados da tabela.
banco_dados_I_2008a.indb 155
3/3/2008 16:48:51
Universidade do Sul de Santa Catarina
Para início de estudo Na unidade 5 você pôde utilizar uma ferramenta de banco de dados para criação de um modelo de banco de dados, ou em outras palavras, você pôde criar um conjunto de tabelas que atendam a alguma necessidade específica. Porém, você criou as tabelas, dentro das regras de chaves primárias e estrangeiras, mas não utilizou o modelo criado. E pensando bem, de pouca valia seria você ter um modelo de banco de dados vazio, sem a possibilidade de cadastrar e manipular os dados. Nesta unidade você passará a se familiarizar com um novo conjunto de comandos, os comandos de manipulação de dados, chamados abreviadamente de DML. Por meio desses comandos você poderá cadastrar, alterar, remover e listar os dados de uma determinada tabela, ou de várias tabelas ao mesmo tempo. Sendo assim, nesta unidade você aprimorará seu conhecimento sobre comandos de SQL e que normalmente você utiliza no seu dia-a-dia, realizando relatórios, pesquisas e cadastramento de dados. Você está pronto para aprimorar seus conhecimentos de SQL? Então, bom estudo!
SEÇÃO 1 - A estrutura dos comandos de manipulação de dados Você já estudou que a linguagem de programação SQL é formada por dois grupos de comandos. Nesta unidade, você estudará um desses grupos: o grupo dos comandos DML ou Linguagem de Manipulação de Dados. A Linguagem de Manipulação de Dados (DML) é uma linguagem de consulta e atualização do banco de dados e compreende os comandos para inserir, remover e modificar informações em um banco de dados.
156
banco_dados_I_2008a.indb 156
3/3/2008 16:48:51
Banco de Dados I
São quatro comandos básicos na Linguagem de Manipulação de Dados: Select Insert Update Delete
Basicamente, a função de cada comando é:
Select é o comando mais usado, pois permite ao usuário especificar uma pesquisa com a descrição do resultado desejado.
Insert é usado para cadastrar dados em uma tabela.Esta inserção segue as regras definidas na criação da tabela, como por exemplo: campos do tipo Chave Primária não poderão ter valores repetidos.
Update altera os valores dos campos já cadastrados na tabela.
Delete é o comando que permite remover registros existentes em uma tabela.
Como você pode verificar, cada comando possui uma sintaxe própria e é isto que você vai estudar a partir de agora. Quais as características de cada comando, como escrevê-los e o que esperar como resposta do banco de dados após a sua execução.
SEÇÃO 2 - Inserção de dados em uma tabela Como você estudou na seção anterior, o comando Insert permite a inclusão de novas linhas na tabela: uma linha de cada vez ou várias linhas resultantes de uma consulta. Para isso, as colunas da lista de inserção podem estar em qualquer ordem.
Unidade 7
banco_dados_I_2008a.indb 157
157
3/3/2008 16:48:51
Universidade do Sul de Santa Catarina
No caso de inserção de dados em colunas do tipo Chave Primária, a inserção só será realizada se o valor a ser inserido não existir para a mesma coluna.
Caso o valor inserido não atenda o tipo de dado definido para aquela coluna, a inserção não será realizada. Será apresentada uma mensagem indicando qual ou quais campos não atendem a alguma regra de integridade. Os Campos do tipo not null são obrigatórios e, desta forma, a inserção só será realizada caso os dados forem informados. Acompanhe o exemplo a seguir:
Caso 1. A inserção não precisa seguir a ordem das colunas. Na Unidade 5 foi trabalhado uma tabela, a de Produto, está lembrado? A estrutura da tabela era: Produto Codigo_Produto Integer NN (PK) Descricao_Produto Varchar(30) NN Preco_Produto Float NN
Figura 7.1
Pois bem, a inserção não precisa ser na ordem das colunas da tabela. Você pode inserir um dado informando primeiro o Preço, a Descrição e, por último, o Código.
Caso 2. A inserção deve obedecer ao tipo de dado da Coluna. Na mesma tabela Produtos, se for inserido o código do produto valendo “ABCD”, a inserção não será realizada, pois a coluna é do tipo (INT) integer. Portanto, só aceitará números como dados de cadastro.
Caso 3. A inserção de campos not null. Na tabela de produtos, se você analisar, perceberá que todos os campos são do tipo not null, pois há um NN (not null) ao lado de cada campo da tabela. Isso significa que todos os campos são obrigatórios. Se a inserção for executada sem que todos os campos tenham seu valor informado, a inserção será cancelada.
158
banco_dados_I_2008a.indb 158
3/3/2008 16:48:51
Banco de Dados I
Caso 4. Campos do tipo Chave Primária. O campo Codigo_Produto é do tipo chave primária, pois o campo possui um “PK” ao lado da definição do tipo. Assim sendo, caso seja feita uma inserção com um valor que essa coluna já possui, a inserção será cancelada.
Agora que você já sabe dos cuidados a serem tomados na inserção de dados, é hora de aprender a sintaxe deste comando: Insert into Nome_Da_tabela (Coluna1,Coluna2,...,ColunaN) Values (Valor1,Valor2,...,ValorN);
Cadastrando os produtos na tabela Produtos apresentada anteriormente, tem-se: Código
Descrição
Preço
1
Banana
0,79
2
Uva
2,50
3
Maçã
1,80
4
Mamão
2,00
Os campos que não são do tipo numérico devem ficar entre aspas ( ` ). Insert into Produtos values (1, ’Banana’, 0.79);
Veja o que acontece ao se executar esse comando: Insert into Produtos values ( 1,
Produtos
Codigo_Produto
BANANA,
0,79);
Descricao_Produto Preco_Produto
Figura 7.2 Unidade 7
banco_dados_I_2008a.indb 159
159
3/3/2008 16:48:51
Universidade do Sul de Santa Catarina
Continuando as inserções: Insert into Produtos values (2,’Uva’,2.50); Insert into Produtos values (3,’Maçã’,1.80); Insert into Produtos values (4,’Mamão’,2.00);
Adote a definição dos nomes das colunas somente quando não for inserir dados para todas as colunas da tabela.
Como a inserção dos dados é para todos os campos da tabela, não há a necessidade de especificar as colunas do Insert. Você apenas estaria escrevendo a mais. Se você seguisse a regra geral do Insert, o comando ficaria assim: Insert into Produtos(Codigo_Produto,Descricao_Produto,Preco) Values (1,’Banana’,0.79);
Sempre que estiver construindo uma interface de um software ou qualquer outro programa que necessite incluir um comando de inserção, adote como padrão, sempre definir os nomes das colunas. Isto pode minimizar erros futuros devido a alterações na base de dados como, por exemplo, a inclusão de uma nova coluna não obrigatória (null), a qual o seu insert não está preparado. Ao inserir dados informalmente nas tabelas, aí sim, para obter maior produtividade e digitar um número mínimo de caracteres, sugiro que omita a definição dos nomes das colunas nos comandos de inserção. Adote a definição dos nomes das colunas somente quando não for inserir dados para todas as colunas da tabela. Agora, vamos tentar cadastrar um novo produto, porém com o código de produto valendo 1, que já foi cadastrado anteriormente: Insert into Produtos (Descricao_Produto, Preco_Produto, Codigo_Produto) Values (’Banana’, 0.79,1);
Note que, ao inverter a ordem dos campos, foi necessário escrever o nome de cada coluna que receberá os valores da inserção. Por padrão, a inserção segue a ordem da criação da tabela, que pode ser visualizada através do comando Describe.
160
banco_dados_I_2008a.indb 160
3/3/2008 16:48:51
Banco de Dados I
O resultado da execução do comando será:
Figura 7.3
Dessa forma, a inserção não será realizada. No caso a seguir, vou forçar a inserção de um campo literal (varchar) na coluna de preços: Insert into Produtos Values (10, ’Banana’, ’OLA’);
O resultado da execução do comando será:
Figura 7.4
Sendo assim, a inserção não será realizada. Para finalizar, vamos tentar inserir alguns campos nulos: Insert into Produtos (Codigo_Produto, Descricao_Produto) Values (100, ’Batata’);
O resultado da execução do comando será:
Unidade 7
banco_dados_I_2008a.indb 161
161
3/3/2008 16:48:52
Universidade do Sul de Santa Catarina
Figura 7.5
Sendo assim, a inserção não será realizada. Agora que você já sabe como inserir dados em uma tabela, que tal você aprender a alterar as informações cadastradas? Este será seu próximo aprendizado, está preparado?
SEÇÃO 3 - Alteração dos dados da tabela O comando Update altera os valores das colunas especificadas em todas as linhas que satisfaçam a uma determinada condição. As colunas a serem alteradas devem ser declaradas no comando Update e seguidas dos novos valores para cada coluna, respectivamente. Somente as colunas a serem modificadas devem aparecer na lista de colunas da declaração. Os novos valores de cada coluna devem obedecer ao tipo de dados da coluna, ou seja, campos do tipo numérico só podem receber números e campos não numéricos devem ter o valor de atualização entre aspas (‘), como no comando de inserção. Caso não seja especificada uma condição, a alteração valerá para todas as linhas da tabela.
Mas então, o que é uma condição?
162
banco_dados_I_2008a.indb 162
3/3/2008 16:48:52
Banco de Dados I
Uma condição é qualquer decisão que você inclua no seu comando de SQL e que esteja associada a um operador lógico. Se a condição retornar como verdadeira (true), a execução do comando será realizada. Conheça então, os operadores lógicos: Operador
Função
= <> >
Igual Diferente Maior
< >= <=
Menor Maior ou Igual Menor ou Igual
AND
E lógico – Verdadeiro quando todas as condições são verdadeiras.
OR
OU lógico – Verdadeiro quando pelo menos uma Condição é verdadeira.
NOT
Não – Inverte o valor. Se for verdadeiro, troca para falso, se é falso troca para verdadeiro.
Bem, agora que você já sabe dos cuidados a serem tomados na alteração de dados, é hora de aprender a sintaxe desse comando: Update Nome_Da_tabela set Coluna1= valor1,...,ColunaN = valor N Where (Condição);
Para exercitar esse comando, serão alterados alguns dados da tabela de produtos que foram inseridos por meio do comando Insert. As alterações serão as seguintes: Codigo_Produto 1 2 3 4
Descricao_Produto Banana Uva Maçã Mamão
Trocar o código para 15
Trocar a descrição para melancia
Preco_Produto 0,79 2,50 1,80 2,00 Trocar o preço para 2,10
Figura 7.6
Unidade 7
banco_dados_I_2008a.indb 163
163
3/3/2008 16:48:52
Universidade do Sul de Santa Catarina
a) Trocando a descrição do produto “Banana” para “Melancia” e o preço para 2.10: Update Produtos set Descricao_Produto = ‘Melancia’, Preco _Produto = 2.10 Where Codigo_Produto = 1;
ou Update Produtos set Descricao_Produto = ‘Melancia’, Preco _Produto= 2.10 Where Descricao_Produto = ‘Banana’;
b) Trocando o Código do produto “Uva” para 15: Update Produtos set Codigo_Produto = 15 Where Codigo_Produto = 2;
ou Update Produtos set Codigo_Produto = 15 Where Descricao_Produto = ‘Uva’;
c) Dar um aumento de 10% em todos os produtos cadastrados: Update Produtos set Preco_Produto = Preco_Produto * 1.1
Como não foi apresentada uma condição Where, a atualização será realizada em todas as linhas da tabela, na coluna Preco_Produto.
Veja a tabela com os dados atualizados: Codigo_Produto 1 15 3 4
Descricao_Produto Melancia Uva Maçã Mamão
Preco_Produto 2,31 2,75 1,98 2,20
Tabela 7.1
164
banco_dados_I_2008a.indb 164
3/3/2008 16:48:52
Banco de Dados I
SEÇÃO 4 - Exclusão de dados da tabela O comando Delete exclui as linhas que satisfazem a uma determinada condição na tabela especificada. Se a condição estiver ausente, o efeito é a exclusão de todas as linhas da tabela. O resultado vai ser uma tabela válida, porém vazia. Caso a tabela possua alguma coluna que seja chave estrangeira para outra tabela, e os valores dessa tabela estão sendo usados como referência, a exclusão não poderá ser realizada, pois a exclusão resultará em campos nulos na tabela referenciada. Veja a representação abaixo:
Figura 7.7
A tabela ItensDaNota é uma entidade associativa, pois para que essa tabela possua dados cadastrados é necessário que existam dados na tabela de produtos e na tabela de notas fiscais. Se for solicitado um comando para excluir os dados da tabela Nota_ Fiscal, a referência a essa tabela na entidade ItensDaNota ficará com qual valor?
Unidade 7
banco_dados_I_2008a.indb 165
165
3/3/2008 16:48:52
Universidade do Sul de Santa Catarina
Caso você tenha imaginado que a tabela ItensDaNota ficaria inalterada, isso não pode ocorrer, pois a tabela estaria referenciando um valor que não existe mais na tabela de origem. Por outro lado, a tabela não pode ficar com esses campos nulos (vazios), pois são do tipo not null. Assim sendo, o comando SQL que exclui os dados da tabela Nota_Fiscal será cancelado, de forma que a exclusão não seja realizada. Com certeza agora você deve esta se perguntando, como excluir esses dados então?
Bem, no caso de exclusão de dados em uma tabela que tem dados compartilhados, deve-se primeiro excluir os que estão nas tabelas que fazem a associação, para depois excluir na tabela principal. Por exemplo, no caso descrito anteriormente, que utilizava a tabela Nota_Fiscal e ItensDaNota, primeiro devem ser excluídos os dados da tabela ItensDaNota, para depois excluí-los na tabela Nota_Fiscal. À medida que você avançar nos exercícios de SQL, estes cuidados ficarão mais claros, por enquanto são apenas lembretes para a parte prática dos comandos. Bem, agora só falta você conhecer a sintaxe do comando de exclusão de dados: Delete from Nome_Da_Tabela where Condição;
Antes de você utilizar o comando, conheça quais são os dados a serem excluídos: Tarefa
Comando em SQL
Remover os produtos que custam menos de dois (2) reais;
Delete from Produtos where Preco < 2;
Remover o produto de descrição Melancia;
Delete from Produtos where Descricao_ Produto = ‘Melancia’;
Remover o produto de Código 2;
Delete from Produtos where Codigo_Produto = 2;
166
banco_dados_I_2008a.indb 166
3/3/2008 16:48:53
Banco de Dados I
Caso a intenção seja excluir todos os dados da tabela, basta executar o comando: Delete from Nome_Da_Tabela;
É importante que você atente para as condições que envolvem tipos que não são numéricos. Imagine que na tabela de produtos tenha-se um produto com a descrição “PÊRA”. A palavra PERA é diferente de Pera que é diferente de PÊRA. Ou seja, os dados alfanuméricos são “case sensitive”, em que maiúsculo é diferente de minúsculo, além da acentuação. Neste caso, ao usar o comando a seguir, este não excluíra o registro, pois PERA é diferente de PÊRA: Delete from Produtos where Descricao_Produto = ‘PERA’
Para solucionar este problema, você pode utilizar a função de conversão para maiúscula, que se chama Upper, e possui a seguinte sintaxe: Upper (Coluna);
Essa função retorna o valor literal que está na coluna especificada com todos os caracteres em maiúsculo. Veja: Nome
Upper(Nome)
marcelo
MARCELO
Marcelo
MARCELO
MARCELO
MARCELO
MArCElO
MARCELO
Aplicando essa função ao comando que excluí o produto PERA, o comando ficaria assim: Unidade 7
banco_dados_I_2008a.indb 167
167
3/3/2008 16:48:53
Universidade do Sul de Santa Catarina
Delete from Produtos where Upper(Descricao_Produto) = Upper(‘pêra’);
Bem, seu próximo passo é aprender o comando para seleção de dados da tabela. Mas isto é assunto para a próxima unidade. Até lá pratique mais um pouco com as atividades de de auto-avaliação a seguir.
Síntese É muito importante que você se lembre que esses comandos vistos anteriormente podem ser executados em qualquer ferramenta de banco de dados, pois seguem um padrão mundial chamado de SQL ANSI. Cada comando possui uma característica própria e à medida que você for utilizando-os, mais fácil será a sua compreensão. No comando de Insert, que é responsável pelo cadastramento dos dados nas tabelas, você sempre deve tomar o cuidado de respeitar as regras de criação da tabela, como:
campos obrigatórios – not null;
chaves primárias – não podem ter o valor repetido;
chaves estrangeiras – valores que existem em outra tabela;
tipos de dados de cada coluna – tipos que não são numéricos devem ter seu valor de cadastro entre aspas simples. Campos numéricos só aceitam números.
Lembre-se que qualquer desrespeito a pelo menos uma destas regras a inserção não será realizada. No comando Insert, você só precisa especificar a ordem das colunas de inserção quando não forem informados valores para todos os campos da tabela. 168
banco_dados_I_2008a.indb 168
3/3/2008 16:48:53
Banco de Dados I
INSERT em Todos os Campos
INSERT em Alguns Campos
Insert into Tabela values (v1,v2,...,vn);
Insert into Tabela (c1,c2,..cn) values (v1,v2,…,vn);
Para alteração dos dados da tabela, você deve usar o comando Update. Esse deve estar associado a uma condição, caso contrário todas as linhas da tabela serão alteradas. UPDATE com Condição
UPDATE sem Condição
Altera somente as linhas da tabela que atendam a condição.
altera todas as linhas da tabela. (CUIDADO !!!)
Update Tabela set Campo1 = Valor 1 where Condição;
Update Tabela set Campo1 = Valor 1;
A exclusão de dados da tabela deve ser realizada através do comando Delete. Este comando também está associado a uma condição, porém, quando se deseja excluir todos os dados da tabela, a condição não precisa ser informada. DELETE com Condição
DELETE sem Condição
Remove somente as linhas da tabela que atendam a condição.
Remove todas as linhas da tabela.
DELETE from Tabela where Condição;
DELETE from Tabela;
Quando uma tabela é excluída, a estrutura da tabela continua existindo, porém ela estará vazia, sem registros.Quando se deseja remover uma tabela do banco de dados, usa-se o comando Drop Table visto na seção 4, da unidade 4. Excluir dados da Tabela
Remover a Tabela
DELETE from Tabela ;
DROP Table Tabela;
Para encerrar esta síntese, você deve tomar o cuidado na hora de excluir os dados de uma tabela, principalmente se esta possuir campos que são chaves estrangeiras para outras tabelas, pois se isto for verdadeiro, a exclusão não será realizada.
Unidade 7
banco_dados_I_2008a.indb 169
169
3/3/2008 16:48:54
Universidade do Sul de Santa Catarina
Com relação ao Delete, você estará removendo os dados da tabela, e caso a exclusão tenha sido realizada de forma equivocada, será necessário recadastrá-los um a um, por isso o máximo de cuidado na hora de usar este comando.
Atividades de auto-avaliação 1. Com base no modelo de banco de dados abaixo, escreva os comandos em SQL que executem as seguintes tarefas: Produto Codigo_Produto Integer NN (PK) Descricao_Produto Varchar(30) NN Preco_Produto Float NN
A) Cadastre os seguintes produtos:
Questão
Codigo_Produto
Descricao_Produto
Preco_Produto
1
100
Caneta Azul
1.00
2
200
Borracha
0.80
3
300
Caderno de Desenho
2.20
4
500
Régua
0.25
A1.
A2.
A3.
170
banco_dados_I_2008a.indb 170
3/3/2008 16:48:54
Banco de Dados I
A4.
B) Altere os dados dos seguintes produtos:
B1. Altere o preço da “Caneta Azul” para 2.50.
B2. Altere o código da “Régua” para 400.
B3. Altere a descrição do “Caderno de Desenho” para “Caderno de 12 Matérias”.
Unidade 7
banco_dados_I_2008a.indb 171
171
3/3/2008 16:48:54
Universidade do Sul de Santa Catarina
C) Exclua os seguintes produtos:
C1. Remova os produtos que possuem preço inferior a 1.00.
C2. Remova os produtos que possuem o codigo = 100.
C3. Exclua todos os produtos cadastrados na tabela de Produtos.
Saiba mais
HERNANDEZ, M. J. Aprenda a projetar seu próprio banco de dados. São Paulo: Pearson Education do Brasil Ltda, 1999.
JESUS, J. B. de. Ansi SQL 89 92. Axcel Books do Brasil Ltda, 2004.
SETZER, V. W.; SILVA, F. S. da. Banco de dados. São Paulo: Edgard Blucher, 2005.
SOARES, W. MySQL: conceitos e aplicações. Erica, 2003.
172
banco_dados_I_2008a.indb 172
3/3/2008 16:48:54
UNIDADE 8
Recuperação de Informações do Banco de Dados
8
Objetivos de aprendizagem
Selecionar dados em SQL usando a DML.
Compreender as funções agregadas em SQL.
Gerar consultas com agrupamento em SQL.
Seções de estudo Seção 1 A Estrutura do Comando Select. Seção 2 Ordenando e agrupando os dados. Seção 3 As funções de agregação. Seção 4 Condições especiais.
banco_dados_I_2008a.indb 173
3/3/2008 16:48:54
Universidade do Sul de Santa Catarina
Para início de estudo Em unidades anteriores, você teve a possibilidade de criar e trabalhar com tabelas de um modelo de banco de dados proposto inicialmente. Para tanto, você utilizou um conjunto de comandos da linguagem de definição de dados (create table) e de manipulação de dados que permitia o cadastramento, alteração e a exclusão dos dados (respectivamente Insert, Update e Delete). A criação do banco de dados é uma tarefa complexa. Transformar os processos executados por pessoas em um conjunto de dados em tabelas não é tarefa simples quanto possa parecer. Cada processo possui um conjunto de possibilidades e todas elas devem ser amplamente contempladas através pela sua solução. Por isso a criação do banco de dados dever ser feita analisando-se todo o escopo do problema. Uma vez terminada a tarefa e atendido as necessidades do problema a ser solucionado, este deixa de ser alterado e torna-se um Modelo Estático, pronto para ser utilizado. Deve-se ao máximo evitar alterações em um modelo de banco de dados, pois isto pode impossibilitar a sua utilização. Mas caso as alterações sejam necessárias, deverão ser realizadas para o perfeito funcionamento do sistema criado. Para exemplificar, imagine que você esteja projetando um automóvel, no qual ele deva atender a um conjunto de requisitos funcionais ou expectativas de seus compradores. Depois de estudá-lo e este contemplar as necessidades de mercado, você o coloca em produção. E na linha de produção, na qual são colocados os bancos, vidros, acessórios e etc., estão todos trabalhando a pleno vapor.
174
banco_dados_I_2008a.indb 174
3/3/2008 16:48:54
Banco de Dados I
Mas o que aconteceria se você chegasse a conclusão que algumas peças do veículo devessem ser reprojetadas? Com certeza o caos, a produção pararia, atrasos aconteceriam e com certeza o desagrado dos clientes que aguardam o veículo. Um banco de dados possui os mesmos problemas. Após a sua criação e validação, deve-se tomar o cuidado de não alterar a sua estrutura, pois quem o utiliza pode ter sérios problemas em conseqüência destas modificações. Após a criação do banco e o cadastramento dos dados é que realmente começam os processos de utilização dos dados, que são os processos de consulta a base de dados. O principal objetivo do sistema de banco de dados é permitir ao usuário uma consulta rápida e eficiente. Desta forma, o processo de consulta a tarefa que mais se repete e aquela em que o usuário final mais interage, gerando a maior expectativa junto ao usuário. Quando você acessa sua conta bancária através da internet, você não está preocupado em saber como aquele banco de dados foi modelado. Mas sim se as suas consultas são rápidas e se representam fielmente a verdade dos dados. Esta consulta se repetirá para outras tarefas que você venha a realizar junto ao sistema.
E é com este escopo de um sistema de banco de dados que você passará a interagir a partir desta unidade. Chegou a hora de você começar a interagir com o comando que, será com certeza, o mais executado nos seus projetos: o comando Select. Se prepare para esta nova etapa!
Unidade 8
banco_dados_I_2008a.indb 175
175
3/3/2008 16:48:54
Universidade do Sul de Santa Catarina
SEÇÃO 1 - A Estrutura do Comando Select Selecionar os dados pode parecer uma tarefa complexa. Mas com certeza é muito mais simples do que você possa imaginar. Para facilitar sua compreensão sobre o que faz um comando de seleção, será usado como recurso uma grande e conhecida sua, a tabela. Produto Codigo_Produto Integer NN (PK) Descricao_Produto Varchar(30) NN Preco_Produto Float NN
Figura 8.1
Como a tabela é a junção entre linhas e colunas, é necessário ter-se duas informações para se realizar uma consulta aos seus dados: quais as linhas e colunas mostrar e quais linhas devem ser mostradas. A definição das linhas a serem mostradas é resultado direto de uma condição que especifica os dados que podem ser apresentados. Então como definir quais as colunas que devem ser mostradas de uma tabela?
É muito simples! Você deverá especificar o nome das colunas que você deseja listar. Se desejar listar todas as colunas, você não precisa escrever o nome de todas, mas sim, representá-las por um asterisco (*). A seleção dos dados que serão mostrados é realizada pelo comando Select que retorna as linhas ou registros de uma ou mais tabelas que atendam a uma determinada condição. Como nos comandos Update e Delete, uma condição é representada pela cláusula Where. Se esta cláusula for omitida, todas as linhas da tabela serão listadas.
176
banco_dados_I_2008a.indb 176
3/3/2008 16:48:55
Banco de Dados I
Veja a figura a seguir representando o que foi descrito anteriormente: Área de atuação do SELECT (colunas) Coluna 1
Coluna 2
Área de atuação da cláusula WHERE (linhas)
Coluna N
...
Figura 8.2
A cláusula Select especifica quais as colunas que serão apresentadas no resultado da seleção dos dados. Já a cláusula Where especifica quais as linhas da tabela que serão apresentadas no final da execução do comando. Um comando Select determina quais as colunas e linhas de uma tabela que formam um subconjunto de dados desejado.
A sintaxe do comando Select é: Select
Coluna1,Coluna2,...,ColunaN
From
Nome_Tabela [ ou tabelas ]
Where
condição
Group By
expressão
Having
condição
Order By
expressão;
Como você pode ver, o comando Select é bem amplo. Algumas cláusulas só serão usadas quando realmente necessário, diminuindo sensivelmente o tamanho do comando a ser escrito.
Quais os termos básicos do comando Select?
Unidade 8
banco_dados_I_2008a.indb 177
177
3/3/2008 16:48:55
Universidade do Sul de Santa Catarina
Acompanhe, a seguir, o papel de cada termo existente nesta estrutura. Você vai começar a ter contato com a estrutura básica do comando Select que é: Select
(Coluna1, Coluna2,..., ColunaN)
From
Nome_Tabela
a) Colunas do Select A expressão coluna1,coluna2...colunaN representa as colunas que devem ser listadas pelo comando Select. Caso você deseje selecionar todos os campos, pode simplesmente colocar um asterisco no lugar do nome das colunas. Com base na tabela Produtos, pode-se realizar algumas consultas, tais com:
Tarefa
Comando em SQL
Listar os Códigos dos Produtos
Select Codigo_Produto
Listar os Códigos e as Descrições
Select Codigo_Produto,Descricao_Produto
Listar os Preços, Códigos e Descrições
Select Preco,Codigo_Produto,Descricao_Produto
Listar todos os campos
Select * ou Select Codigo_Produto,Descricao_Produto, Preco_Produto
Listar o Código e os Preços
Select Codigo_Produto, Preco_Produto
b) A cláusula From Esta cláusula especifica uma ou mais tabelas de origem para o Select. Se múltiplas tabelas de origem forem especificadas, o resultado será, conceitualmente, o conjunto das linhas de todas as tabelas envolvidas na seleção, que chama-se produto cartesiano.
178
banco_dados_I_2008a.indb 178
3/3/2008 16:48:55
Banco de Dados I
Por exemplo, com base na tabela Produtos, as mesmas consultas anteriores seriam escritas especificando a tabela de origem da consulta, dessa forma: Tarefa
Comando em SQL
Listar os códigos dos produtos.
Select Codigo_Produto from Produtos
Listar os códigos e as descrições.
Select Codigo_Produto,Descricao_Produto from Produtos
Listar os preços, códigos e descrições.
Select Preco_Produto, Codigo_Produto,Descricao_Produto from Produtos
Listar todos os campos.
Select Codigo_Produto,Descricao_Produto,Preco_Produto from Produtos ou simplesmente Select * from Produtos
Agora vamos um pouco além do básico, vamos verificar como funciona a cláusula where do comando Select.
c) A cláusula Where Esta cláusula é responsável por restringir quais as linhas das tabelas serão apresentadas. A cláusula Where possui a forma geral: Where expressão_booleana;
Só para fi xar, os operadores lógicos são: Operadores Lógicos
Significado
=
Igual
>
Maior
<
Menor
<>
Diferente
>=
Maior ou Igual
<=
Menor ou Igual
AND
E Lógico
OR
OU Lógico
Unidade 8
banco_dados_I_2008a.indb 179
A expressão booleana pode ser qualquer expressão que retorne um valor booleano (verdadeiro ou falso).
179
3/3/2008 16:48:55
Universidade do Sul de Santa Catarina
Para exemplificar melhor a estrutura estudada, utilize a tabela de Produtos com os seguintes dados: Codigo_Produto
Descricao_Produto
Preco
1
Banana
1.00
2
Maçã
2.80
3
Uva
3.25
4
Pêra
1.00
5
Maracujá
2.00
6
Mamão
2.55
7
Goiaba
2.00
8
Laranja
3.25
9
Limão
0.85
10
Melancia
2.55
a) Para listar todos os Produtos, utilize o comando que listará a tabela de modo idêntico à tabela anterior.
Select * from Produtos.
Resultado: esse comando listará a tabela de modo idêntico à tabela anterior. Lembre-se que a cláusula Where atua nas linhas da tabela, realizando um filtro. Como no comando acima não foi especificada a cláusula Where, não haverá restrição de linhas. A cláusula Select especifica quais as colunas serão apresentadas. No caso acima, o símbolo asterisco (*) representa todas as colunas da tabela.
b) Para listar os produtos com preço inferior a 3.00: Select * from Produtos where preco < 3.00;
180
banco_dados_I_2008a.indb 180
3/3/2008 16:48:55
Banco de Dados I
Resultado: Codigo_Produto
Descricao_Produto
Preco
1
Banana
1.00
2
Maçã
2.80
4
Pêra
1.00
5
Maracujá
2.00
6
Mamão
2.55
7
Goiaba
2.00
9
Limão
0.85
10
Melancia
2.55
c) Para listar o Código e a Descrição dos produtos com preço de 1.00: Select Codigo_Produto,Descricao_Produto from Produto where Preco = 1.00;
Resultado: Codigo_Produto
Descricao_Produto
1
Banana
4
Pêra
d) Para listar os dados do Produto de código 5; Select * from Produtos where Codigo_Produto = 5;
Resultado: Codigo_Produto 5
Descricao_Produto
Preco
Maracujá
2.00
Unidade 8
banco_dados_I_2008a.indb 181
181
3/3/2008 16:48:56
Universidade do Sul de Santa Catarina
e) Para listar os dados de todos os Produtos com preço = 1.00 e Código = 10: Select * from Produtos where Preco = 1 AND Codigo_Produto = 10;
Resultado: Codigo_Produto
Descricao_Produto
Preco
Observe que nenhuma linha da tabela atende a esta condição.
f) Listar a descrição e os preços dos produtos: Select Descricao_Produto, Preco_Produto from Produtos;
Resultado: Descricao_Produto
Preco_Produto
Banana
1.00
Maçã
2.80
Pêra
1.00
Maracujá
2.00
Mamão
2.55
Goiaba
2.00
Limão
0.85
Melancia
2.55
A essa altura você já pode perceber que o comando Select é bem poderoso devido às inúmeras combinações que ele permite. Assim, cabe a você construir comandos que extraia exatamente os dados desejados, seguindo as suas necessidades.
182
banco_dados_I_2008a.indb 182
3/3/2008 16:48:56
Banco de Dados I
Com todas essas informações você já deve ter prcebido que o comando Select possui várias atribuições e possibilita inúmeras combinações. Assim, cabe a você construir comandos que extraia exatamente os dados desejados, seguindo as suas necessidades.
SEÇÃO 2 - Ordenando e agrupando dados Você aprendeu até agora sobre como acessar e listar os dados da tabela. Nessa seção, você aprenderá como melhorar a apresentação dos dados que são listados, ordenando-os e agrupando-os. Para isso, será necessário que você conheça mais duas cláusulas do comando Select, as cláusulas Order By e Group By.
a) A cláusula Order By A cláusula Order By serve para ordenar os dados que serão listados. A ordem de apresentação pode ser crescente (ASC) ou decrescente (DESC). Se não for informada a ordem de apresentação, ela será por padrão crescente. A sintaxe do comando é: Order By coluna1,coluna2,...,colunaN ASC ou DESC;
Um item do Order By pode ser o nome ou o número da coluna na estrutura da tabela. Observe a tabela, após a execução do comando: Select * from Produtos;
Unidade 8
banco_dados_I_2008a.indb 183
183
3/3/2008 16:48:56
Universidade do Sul de Santa Catarina
Codigo_Produto
Descricao_Produto
Preco
1
Banana
1.00
2
Maçã
2.80
3
Uva
3.25
4
Pêra
1.00
5
Maracujá
2.00
6
Mamão
2.55
7
Goiaba
2.00
8
Laranja
3.25
9
Limão
0.85
10
Melancia
2.55
Usando o Order By, a tabela será listada em ordem decrescente de Código: Select * from Produtos Order By Codigo_Produto DESC;
Resultado: Codigo_Produto
Descricao_Produto
Preco
10
Melancia
2.55
9
Limão
0.85
8
Laranja
3.25
7
Goiaba
2.00
6
Mamão
2.55
5
Maracujá
2.00
4
Pêra
1.00
3
Uva
3.25
2
Maçã
2.80
1
Banana
1.00
Veja outros exemplos do uso do Order By para mesma tabela:
Listar Codigo e Descrição dos produtos com preço menor que 3.00 em ordem crescente de Descrição: Select Codigo_Produto,Descricao_Produto from Produtos where Preco < 3.00 Order By Descricao_Produto;
184
banco_dados_I_2008a.indb 184
3/3/2008 16:48:56
Banco de Dados I
Resultado:
Codigo_Produto
Descricao_Produto
1 7 9 2 6 5 10 4
Banana Goiaba Limão Maçã Mamão Maracujá Melancia Pêra
Listar os Produtos com código inferior a 5 e ordenados crescentemente por Preço: Select * from Produtos where Codigo_Produto < 5 Order By Preco;
Resultado:
Codigo_Produto
Descricao_Produto
Preco
1 4 2 3
Banana Pêra Maçã Uva
1.00 1.00 2.80 3.25
Listar os produtos ordenados por preço e descrição: Select * from Produtos Order By Preco_Produto,Descricao_Produto;
Resultado: Codigo_Produto
Descricao_Produto
Preco_Produto
9 1 4 7 5 6 10 2 8 3
Limão Banana Pêra Goiaba Maracujá Mamão Melancia Maçã Laranja Uva
0.85 1.00 1.00 2.00 2.00 2.55 2.55 2.80 3.25 3.25
Unidade 8
banco_dados_I_2008a.indb 185
185
3/3/2008 16:48:56
Universidade do Sul de Santa Catarina
Observe que nas linhas em que os preços são os mesmos, a ordenação foi feita também pela descrição do produto em ordem crescente.
b) A cláusula Group By A cláusula Group By condensa em uma única linha todas as linhas selecionadas que compartilham os mesmos valores para as colunas agrupadas. Um item do Group By pode ser o nome de uma coluna ou o número da coluna na estrutura da tabela. A sintaxe do comando é: Group By coluna1,coluna2,...,colunaN;
Para exemplificar esta cláusula Group By, vamos utilizar o seguinte modelo de banco de dados:
Figura 8.3
Listando os dados de cada tabela, tem-se: 1. Select * from Região: Resultado:
186
banco_dados_I_2008a.indb 186
3/3/2008 16:48:56
Banco de Dados I
2.Select * from Produtor: Resultado:
3. Select * from Produtos: Resultado:
Lembre-se que a tabela de Produtos faz referência à tabela de Produtor e à tabela de Região por meio das colunas Produtor_ID e Região_ID, respectivamente. Dessa forma, pode-se afirmar que o produto de Código 11, cuja descrição é PRODUTO A, é produzido pelo Produtor 001, na região SUL, ao preço de 1,44. Sendo assim, a tabela de PRODUTOS possui os seguintes dados se vista pelas chaves estrangeiras:
Unidade 8
banco_dados_I_2008a.indb 187
187
3/3/2008 16:48:56
Universidade do Sul de Santa Catarina
Com base nessa tabela de Produtos, serão executados alguns comandos utilizando a cláusula Group By, veja: 1. Listar todos os produtores por região: Select Produtor_ID,Regiao_ID from Produtos Group By Regiao_ID
Resultado:
2.Listar produtos por produtor: Select Descricao_Produto,Produtor_ID from Produtos Group By Produtor_ID;
Resultado: Descricao_produto
Produtor_ID
PRODUTO A
1
PRODUTO B
2
PRODUTO D
3
Atenção! SGBDs como SQLServer e Oracle têm comportamento diferente do MySQL, apresentando código de erro no referido comando sql apresentado neste item.
188
banco_dados_I_2008a.indb 188
3/3/2008 16:48:57
Banco de Dados I
Note que ao fazer o agrupamento, os itens do agrupamento que possuem o mesmo valor não são reapresentados.
SEÇÃO 3 - As funções de agregação Uma função de agregação retorna um único resultado para várias linhas de entrada de uma tabela. Por exemplo: existem funções de agregação para contar, somar, calcular a média, calcular o valor máximo e o valor mínimo para um conjunto de linhas.
Uma função de agregação recebe os dados de várias linhas de uma tabela, porém um único valor de retorno é apresentado.
As principais funções de agregação são: Função
O que faz
Count
Retorna o número de ocorrências da coluna da tabela;
Sum Avg Max Min Distinct
Retorna a soma os valores da coluna da tabela; Retorna a média de valores da coluna da tabela; Retorna o maior valor da coluna da tabela; Retorna o menor valor da coluna da tabela; Não permite que valores iguais de uma coluna sejam apresentados na consulta.
A função de agregação sempre esta associada a uma coluna da tabela, desta forma a sintaxe do comando é: Função_de_Agregação (Coluna)
Unidade 8
banco_dados_I_2008a.indb 189
189
3/3/2008 16:48:57
Universidade do Sul de Santa Catarina
Veja alguns exemplos de uso das funções de Agregação: Selecionar o maior preço, o menor preço, a média de preços, o total de preços e a quantidade de produtos cadastrados.
select max(preco_produto) as maior, min(preco_produto) as menor, avg(preco_produto) as media, count(codigo_produto)as Qtde, sum(preco_produto) as somatório from produtos;
Resultado:
Note que eu acrescentei ao lado de cada função um nome para apresentação da coluna. Por exemplo, a função max(preco_ produto) será mostrada como sendo a coluna maior. Utilizei essa notação para deixar mais claro o que representa cada resultado da função executada. Veja outros exemplos!
190
banco_dados_I_2008a.indb 190
3/3/2008 16:48:57
Banco de Dados I
1. Listar a quantidade de produtos com preço de 2,99: Select count(codigo_produto) from produtos where preco_produto = 2,99;
2. Listar a soma dos preços de produtos com código maior que 6: Select sum(preco_produto) from produtos where codigo_produto > 13;
3. Listar todos os preços de produtos sem que os preços iguais sejam repetidos: Select distinct(preco_produto) from produtos; Veja o resultado do comando acima:
Unidade 8
banco_dados_I_2008a.indb 191
191
3/3/2008 16:48:57
Universidade do Sul de Santa Catarina
SEÇÃO 4 - Condições especiais Até agora, você aprendeu que para restringir as linhas de resultado Select, usa-se a cláusula Where. Entretanto, há casos em que não poderá ser desta forma. Você acompanhou na seção anterior, o exemplo que que para selecionar a maior temperatura da tabela de clima foi usado o comando: Select max(preco_produto) From produtos;
Mas se fosse solicitado a você para localizar o produto com maior preço? Talvez, de início você imaginaria algo como: Select descricao_produto From produtos Where preco_produto = max(preco_produto);
Porém, isto não pode ser feito porque a função de agregação max não pode ser usada na cláusula Where. A cláusula Where determina as linhas que vão passar para o estágio de agregação e, portanto, precisa ser avaliada antes das funções de agregação serem computadas. A consulta pode ser reformulada para obter o resultado pretendido, sendo feito por meio de uma subconsulta:
Select descricao_produto From produtos Where preco_produto = (Select max(preco_produto ) from produtos);
192
banco_dados_I_2008a.indb 192
3/3/2008 16:48:58
Banco de Dados I
Veja a representação abaixo:
Figura 8.4
Isto está correto porque a subconsulta é uma ação independente que calcula sua agregação isoladamente do que está acontecendo na consulta externa. As agregações também são muito úteis quando combinadas com a cláusula Group By. Por exemplo, pode ser obtido o maior preço por região: Select Regiao_ID, max(Preco_Produto) From Produtos Group By Regiao_ID;
Para produzir uma linha de saída para cada região, significa que cada resultado da agregação é calculado sobre as linhas da tabela correspondendo a uma cidade. Estas linhas agrupadas podem ser filtradas utilizando a cláusula Having: Select Regiao_ID, max(Preco_Produto) From Produtos Group By Regiao_ID; Having max(Preco_Produto) > 100; Mostrando o resultado apenas para as regiões cujo preço máximo alcançado foi 100 Reais.
Unidade 8
banco_dados_I_2008a.indb 193
193
3/3/2008 16:48:58
Universidade do Sul de Santa Catarina
Para concluir, se desejarmos somente produtos cuja descrição comece pela letra “S” podemos escrever: Select Descricao_Produto From Produtos Where Descricao_Produto LIKE ‘S%’
É importante que você compreenda a interação entre as agregações e as cláusulas Where e Having do SQL. A diferença fundamental entre estas duas cláusulas é:
Where seleciona as linhas de entrada antes dos grupos e
agregações serem computados, portanto controla quais linhas irão para o computo da agregação;
Having seleciona grupos de linhas após os grupos e
agregações serem computados. Portanto, a cláusula Where não pode conter funções de agregação. Por outro lado, a cláusula Having sempre possui função de agregação. Esta restrição entre as cláusulas Where e Having se dão em função de como os SGBDs executam o comando Select. Por mais estranho que possa parecer, o comando Select começa a ser executado pela cláusula From, não pelo próprio Select. Vejamos a ordem de execução das cláusulas do comando Select: ORDEM
CLÁUSULA
6
Select
1
From
2
Where
3
Group by
4
Having
5
Order By
Assim sendo, perceba que ao ser executado o Where, o banco de dados ainda não tem conhecimento de como serão constituídos os grupos de dados. Desta forma, não podem processar as funções de agregação.
194
banco_dados_I_2008a.indb 194
3/3/2008 16:48:58
Banco de Dados I
Conforme o exposto, a projeção das colunas selecionadas é sempre a última operação na execução do comando select, isto explica, por exemplo, porque podemos ordenar as informações a serem apresentadas por uma informação que não está sendo selecionada.
Síntese O comando Select é usado em SQL para todas as formas de pesquisar informação. Este é um comando bastante poderoso e versátil, tendo algumas variações. Informalmente, todos os comandos Select podem ser estruturados na seguinte forma: Select lista de colunas From tabelas Where restrições;
Para acessar dados da tabela sem que sejam apresentados valores repetidos, deve-se utilizar a cláusula Distinct: Select distinct (Coluna) from Tabela;
É possível combinar restrições de pesquisa, como: Select Coluna1, Coluna2 From Tabela Where Coluna2 <> ‘Valor1’ AND Coluna1 <> ‘Valor2’;
É possível ainda que o comando Select seja escrito dentro de outros comandos: Select Coluna2, Coluna3 From Tabela Where Coluna = (Select oluna from Tabela);
Unidade 8
banco_dados_I_2008a.indb 195
195
3/3/2008 16:48:58
Universidade do Sul de Santa Catarina
O comando Like permite fazer uma pesquisa na tabela sem saber o valor exato que se procura. Usa-se o % para representar qualquer sequência de caracteres que tenha um símbolo em especifico: Select Coluna from Tabela where Coluna Like “n%”;
As funções de agregação são: Função
O que faz:
Count
Retorna o número de ocorrências da coluna da tabela
Sum
Retorna a soma os valores da coluna da tabela
Avg
Retorna a média de valores da coluna da tabela
Max
Retorna o maior valor da coluna da tabela
Min
Retorna o menor valor da coluna da tabela
Apesar de parecerem idênticos, os comandos Where e Having possuem características diferentes, como você pode verificar.
WHERE seleciona as linhas de entrada antes dos grupos e agregações serem computados, portanto controla quais linhas irão para o computo da agregação;
HAVING seleciona grupos de linhas após os grupos e agregações serem computados. Portanto, a cláusula WHERE não pode conter funções de agregação. Por outro lado, a cláusula HAVING sempre possui função de agregação.
196
banco_dados_I_2008a.indb 196
3/3/2008 16:48:59
Banco de Dados I
Atividades de auto-avaliação 1) Dada a tabela Alunos a seguir:
Matrícula Nome 1 2 3 4 5 6 7
Marcelo Medeiros Ana Paula Bertoldo Lucas Giaretta Sthefanie Caroline Djalma Medeiros Artur Paes Eduarda Duda
Sexo
Idade
M F M F M M F
35 25 7 19 65 5 8
Escreva os comandos em SQL que: a) Liste todos os alunos do sexo Masculino:
b) Liste todos os alunos que possuem o sobrenome “Medeiros”, ordenados crescentemente por idade.
c) Liste a média de idade dos alunos:
d) Liste a maior idade dos alunos:
Unidade 8
banco_dados_I_2008a.indb 197
197
3/3/2008 16:48:59
Universidade do Sul de Santa Catarina
e) Liste a quantidade de alunos com idade menor que 20 anos:
f) Liste o Nome e o Código do aluno chamado “Lucas Giaretta”:
g) Liste o aluno com a menor idade.
h) Liste a quantidade de alunos com idade entre 10 e 20 anos, e que sejam do sexo masculino.
i)Liste a quantidade de mulheres cadastradas na tabela de Alunos.
A melhor forma de identificar se suas respostas estão corretas é fazer o teste prático no MySQL. Faça isso e potencializará seu aprendizado.
198
banco_dados_I_2008a.indb 198
3/3/2008 16:48:59
Banco de Dados I
Saiba mais Para aprofundar as questões abordadas nesta unidade você poderá pesquisar nos livros:
SETZER, V. W.; SILVA, F. S. da. Banco de dados. São Paulo: Edgard Blucher, 2005.
JESUS, J. B. de. Ansi SQL 89 92. Axcel Books do Brasil Ltda, 2004.
Unidade 8
banco_dados_I_2008a.indb 199
199
3/3/2008 16:48:59
banco_dados_I_2008a.indb 200
3/3/2008 16:48:59
UNIDADE 9
Recuperação de informações através de tabelas
9
Objetivos de aprendizagem
Selecionar dados em SQL usando mais de uma tabela como referência.
Compreender os tipos de junções em SQL.
Gerar consultas em SQL mais eficientes.
Seções de estudo Seção 1 O que é uma junção. Seção 2 Junções de produto cartesiano. Seção 3 Junções internas. Seção 4 Junções externas.
banco_dados_I_2008a.indb 201
3/3/2008 16:48:59
Universidade do Sul de Santa Catarina
Para início de estudo Na unidade anterior você conheceu o comando de manipulação de dados chamado Select. Com certeza esse será um dos comandos mais executados por qualquer aplicação de computador que envolva um SGBD. Bem, a estrutura de um comando de seleção é bem simples. Define-se as colunas que serão apresentadas, quais as tabelas relacionadas que fazem parte da seleção e qual a condição de filtro para definição das linhas que farão parte do conjunto de dados recuperado. Porém, na maioria das vezes, a seleção de dados que será executada envolve mais de uma tabela ao mesmo tempo, pois os dados estão distribuídos em várias tabelas relacionais ligadas pelas chaves estrangeiras, os chamados relacionamentos. Assim, durante a construção de consultas em SQL, é muito comum surgir a necessidade de extrair informações de diferentes tabelas para se gerar o resultado esperado. Nesta unidade você terá uma integração maior com o comando Select, criando consultas que envolvam mais de uma fonte de dados. Sendo assim, bem vindo ao mundo do Select!
SEÇÃO 1 – O que é uma junção Nos modelos de banco de dados, principalmente naqueles que envolvem um número elevado de tabelas, é muito comum na elaboração das consultas a necessidade da seleção de dados em diferentes tabelas. Essa operação necessita que o especialista em banco de dados defina os critérios para o agrupamento dessas tabelas.
202
banco_dados_I_2008a.indb 202
3/3/2008 16:48:59
Banco de Dados I
Os critérios para o agrupamento são chamados de condições de junção, ou apenas junção.
A junção de tabelas ocasiona uma tabela derivada de outras duas tabelas de acordo com as regras de junção elaborada. As regras de junção são muito parecidas com as regras da teoria de conjunto da matemática, como união, intersecção e diferença. Veja a figura abaixo:
Tabela A
Tabela B
JUNÇÃO
Tabela C
Figura 9.1 - Representação da junção entre tabelas.
Na Figura 9.1 tem-se duas tabelas com dados quaisquer. A junção executada resulta em uma terceira tabela que agrupa dados em comum entre as tabelas A e B, o que se pode chamar de intersecção entre as tabelas. Porém uma nova junção entre essas tabelas poderia ser realizada, de forma a retornar uma terceira tabela com todos os dados das duas tabelas, fazendo a união dos dados, conforme a figura a seguir:
Unidade 9
banco_dados_I_2008a.indb 203
203
3/3/2008 16:49:00
Universidade do Sul de Santa Catarina
Tabela A
Tabela B
Tabela C
Figura 9.2 - Junção com a união dos dados das duas tabelas.
Veja na próxima figura um terceiro caso, em que a junção retorna os dados que estão na Tabela A, mas não estão na Tabela B, correspondendo à operação de conjunto A-B :
Tabela A
Tabela B
Tabela C
Figura 9.3 - Junção que retorna os dados que estão na tabela a, mas não estão na tabela b.
204
banco_dados_I_2008a.indb 204
3/3/2008 16:49:00
Banco de Dados I
As formas de junção são definidas pela cláusula Where do comando Select como qualquer outra condição da consulta, e possuem influência direta sobre a escolha do método de junção que será realizado pelo especialista em banco de dados. Essas condições de consulta são utilizadas para realizar a união entre os dados contidos nas diferentes tabelas, combinando os registros, formando um único registro que contém os campos definidos na cláusula Select. Conforme as condições de junção é possível obter os seguintes tipos de junção:
produtos cartesianos – retorna toda a combinação de registros das duas tabelas de dados, uma vez que não existe nenhuma restrição definida na cláusula where;
junções interna (inner-join) – a consulta retornará apenas os registros que atendem às condições definidas nas tabelas de dados;
junções externas (outer join) – semelhante à junção simples, porém retornará também os registros da fonte de dados externa que não estão presentes na tabela interna.
Na definição da junção, o especialista em banco de dados deve tomar alguns cuidados, como:
identificar as chaves primárias das tabelas;
identificar as chaves estrangeiras das tabelas;
identificar os relacionamentos entre as tabelas;
visualizar toda estrutura do modelo de dados que está sendo utilizado, com nome dos campos e tipos de cada campo;
ater-se aos dados que serão apresentados pelo comando de seleção.
Unidade 9
banco_dados_I_2008a.indb 205
205
3/3/2008 16:49:00
Universidade do Sul de Santa Catarina
De forma resumida, independentemente do tipo de junção, a criação da junção deve levar em consideração os dados que serão apresentados pela seleção, qual o relacionamento existente entre as tabelas que fazem parte da pesquisa a ser elaborada, quais os campos únicos e quais os nomes e tipos de cada campo.
Na próxima seção você estudará a forma de representar cada um dos tipos de junções vistos anteriormente utilizando o comando Select.
SEÇÃO 2 – Junções de produto cartesiano Esse método de junção se baseia nas regras de relacionamento entre as tabelas que fazem parte da seleção, sendo que as chaves estrangeiras são referenciadas diretamente na formulação do comando Select. Esse método de junção deve ser utilizado quando as tabelas possuem poucos registros e existe uma relação direta entre as tabelas.
Lembre-se que a relação direta entre tabelas é realizada pelas chaves estrangeiras.
Essa junção faz uma pesquisa em todas as tabelas que fazem parte do comando Select, de forma que o próprio SGBD define uma tabela principal, que servirá de base para busca dos registros nas tabelas dependentes. Para cada registro existente na tabela principal, o SGBD buscará os registros relacionados na tabela dependente, desde que atendam às condições da cláusula Where. Antes de apresentar exemplos de comandos Select que implementam a junção com produto cartesiano, você verá o modelo de dados que usaremos como exemplo, bem como:
206
banco_dados_I_2008a.indb 206
3/3/2008 16:49:00
Banco de Dados I
os comandos de definição de dados que criam as tabelas do modelo;
os comandos de inserção de dados de cada tabela do modelo;
a representação gráfica de cada tabela com os dados já cadastrados.
Veja todas as características do modelo de dados que será utilizado, bem como relembre de alguns comandos que já foram vistos nas unidades anteriores. A seguir está a representação gráfica do modelo que usaremos como exemplo:
Cidade Codigo_Cidade(PK) Nome_Cidade Codigo_SubRegiao(FK)
2
Sub Regiao Codigo_SubRegiao Nome_SubRegiao Codigo_Pais(FK)
1 Pais Codigo_Pais(PK) Nome_Pais
Figura 9.4 - Modelo de dados para o exemplo de junção por produto cartesiano.
Nesse modelo de dados, pode-se notar que a tabela País é a única tabela que não depende de dados das outras tabelas. Por outro lado, a tabela de Sub-Região possui um campo que é a chave estrangeira para a tabela País, representada pelo relacionamento número 1 da figura acima. Dessa forma, tem-se uma regra de chave estrangeira na tabela Sub-Região da seguinte forma:
a coluna chamada codigo_pais da tabela Sub-Região referencia a tabela País pelo campo codigo_pais.
Unidade 9
banco_dados_I_2008a.indb 207
207
3/3/2008 16:49:00
Universidade do Sul de Santa Catarina
Já a tabela Cidade possui a sua coluna codigo_subregiao como chave estrangeira para tabela Sub-Região representada pelo relacionamento número 2 da figura acima, da seguinte forma:
a coluna codigo_regiao da tabela Cidade referencia a tabela Sub-Região pelo campo codigo_subregiao.
Para deixar mais claro o modelo de dados acima, representado na Figura 4, vou apresentar logo a seguir os comandos de definição de dados que criaram esse modelo, veja: Create Table Pais ( Codigo_Pais integer, Nome_Pais Varchar(30), Primary Key (Codigo_Pais) ); Create Table SubRegiao ( Codigo_Subregiao integer, Nome_Subregiao Varchar(30), Codigo_Pais integer, Primary Key (Codigo_Subregiao), Foreign Key(Codigo_Pais) references Pais(Codigo_Pais) ); Create Table Cidade ( Codigo_Cidade integer, Nome_Cidade Varchar(30), Codigo_SubRegiao integer, Primary Key (Codigo_Cidade), Foreign Key(Codigo_SubRegiao) references SubRegiao(Codigo_SubRegiao) );
A partir de agora vamos estudar os comandos em SQL para preenchimento das tabelas. Começaremos pela tabela País. Em SQL, por meio do comando Insert, o preenchimento da tabela de países foi feito assim: Cadastro na Tabela País Insert Into Pais Values (1,’Brasil’)
Insert Into Pais Values (2,’Argentina’) Insert Into Pais Values (3, ‘Estados Unidos’) Figura 9.5 - Comandos de insert na tabela país.
208
banco_dados_I_2008a.indb 208
3/3/2008 16:49:00
Banco de Dados I
Graficamente a tabela ficou desta forma: Codigo_Pais
Nome_Pais
1
Brasil
2
Argentina
3
Estados Unidos
Figura 9.6 - Tabela país com os dados cadastrados.
Agora, os comandos de inserção para tabela Sub-Região: Cadastro na Tabela Sub-Região Insert Into Subregiao Values (1, ‘Parana’, 1) Insert Into Subregiao Values (2, ‘Sao Paulo’, 1) Insert Into Subregiao Values (3, ‘Santa Catarina’, 1) Insert Into Subregiao Values (4, ‘Buenos Aires’, 2) Insert Into Subregiao Values (5, ‘Cordoba’, 2) Insert Into Subregiao Values (6,’California’, 3) Insert Into Subregiao Values (7,’Rio Grande do Sul’, 1) Figura 9.7 – Comandos insert na tabela sub-regiao.
Graficamente a tabela ficou desta forma: Codigo_Subregiao
Nome_Subregiao
Codigo_Pais
1
Parana
1
2
Sao Paulo
1
3
Santa Catarina
1
4
Buenos Aires
2
5
Cordoba
2
6
California
3
7
Rio Grande do Sul
1
Figura 9.8 - Tabela de sub-região com os dados cadastrados.
Unidade 9
banco_dados_I_2008a.indb 209
209
3/3/2008 16:49:00
Universidade do Sul de Santa Catarina
Para finalizar, os comandos de inserção na tabela Cidade: Cadastro na Tabela Cidade Insert Into Cidade Values (1, ‘Sao Paulo’ ,2) Insert Into Cidade Values (2, ‘Florianopolis’, 3) Insert Into Cidade Values (3, ‘Buenos Aires’, 4) Insert Into Cidade Values (4, ‘La Plata’, 4) Insert Into Cidade Values (5, ‘Los Angeles’, 6) Insert Into Cidade Values (6,’San Francisco’, 6) Figura 9.9 - Comandos de insert na tabela cidade.
Graficamente a tabela ficou desta forma: Codigo_Cidade
Nome_cidade
Codigo_Subregiao
1
Sao Paulo
2
2
Florianopolis
3
3
Buenos Aires
4
4
La Plata
4
5
Los Angeles
6
6
San Francisco
6
Figura 9.10 – Tabela cidade com os dados cadastrados.
Bem, agora que está tudo preparado, veja alguns comandos em SQL que fazem a seleção de dados pela junção por produto cartesiano. Selecionando todos os dados da tabela Cidade: Select * from Cidade;
210
banco_dados_I_2008a.indb 210
3/3/2008 16:49:01
Banco de Dados I
O resultado do Select será: Codigo_Cidade
Nome_cidade
Codigo_Subregiao
1
Sao Paulo
2
2
Florianopolis
3
3
Buenos Aires
4
4
La Plata
4
5
Los Angeles
6
6
San Francisco
6
Figura 9.11 - Resultado do comando select * from cidade.
Até aqui não há nada de novo, contudo essa tabela fica um pouco estranha ao se perceber que as cidades pertencem a sub-regiões como: 2, 3 ,4 e 6. Esses valores correspondem aos códigos das sub-regiões cadastradas na tabela Sub-Região, conforme a figura a seguir:
Codigo_ Cidade
Nome_cidade
Codigo_ Subregiao
1
Sao Paulo
2
2
Florianopolis
3
3
Buenos Aires
4
4
La Plata
4
5
Los Angeles
6
6
San Francisco
6
Codigo_ Cidade
Nome_Subregiao Codigo_ Pais
1
Parana
2
2
Sao Paulo
3
3
Santa Catarina
4
4
Buenos Aires
4
5
Cordoba
6
6
California
6
Figura 9.12 - Relacionamento entre as tabelas cidade e sub-região.
Unidade 9
banco_dados_I_2008a.indb 211
211
3/3/2008 16:49:01
Universidade do Sul de Santa Catarina
Sendo assim, o comando de seleção de todos os registros da tabela de cidades pode ser escrito da seguinte forma: Select Cidade.Codigo_Cidade,Cidade.Nome_Cidade,SubRegiao.Nome_SubRegiao From Cidade,SubRegiao Where Cidade.Codigo_SubRegiao = SubRegiao.Codigo_SubRegiao;
Nesse caso, há uma junção entre as tabelas de cidades e subregião, por meio da chave estrangeira codigo_subregiao da tabela Cidade que a relaciona com a tabela Sub-Região. O resultado do comando acima será: Codigo_Cidade
Nome_cidade
Nome_Subregiao
1
Sao Paulo
Sao Paulo
2
Florianopolis
Santa Catarina
3
Buenos Aires
Buenos Aires
4
La Plata
Buenos Aires
5
Los Angeles
Califórnia
6
San Francisco
Califórnia
Figura 9.13 - Resultado da junção entre as tabelas cidade e sub-região.
Tem-se um produto cartesiano com dados das tabelas Cidade e Sub-Região. Veja mais alguns comandos de seleção. Selecionar a sub-região da cidade de Florianópolis: Select SubRegiao.Nome_SubRegiao From Cidade,SubRegiao Where Upper(Cidade.Nome_Cidade) = ‘FLORIANÓPOLIS’ AND Cidade.Codigo_SubRegiao = SubRegiao.Codigo_SubRegiao;
Selecionar o código e o nome das cidades da Sub-Região de São Paulo:
212
banco_dados_I_2008a.indb 212
3/3/2008 16:49:01
Banco de Dados I
Select Cidade.Codigo_Cidade,Cidade.Nome_Cidade From Cidade,SubRegiao Where Upper(SubRegiao.Nome_SubRegiao) = ‘SÃO PAULO’ AND Cidade.Codigo_SubRegiao = SubRegiao.Codigo_SubRegiao;
Selecionar o nome das sub-regiões que pertencem ao país chamado Brasil: Select SubRegiao.Nome_SubRegiao From SubRegiao,Pais Where Upper(Pais.Nome_Pais) = ‘BRASIL’ AND Pais.Codigo_Pais = SubRegiao.Codigo_Pais;
Selecionar o nome de todas as sub-regiões e seus respectivos países: Select SubRegiao.Nome_SubRegiao From SubRegiao,Pais Where Pais.Codigo_Pais = SubRegiao.Codigo_Pais;
Selecionar o nome da cidade e o nome da sua respectiva sub-região: Select Cidade.Nome_Cidade,SubRegiao.Nome_SubRegiao,Pais.Nome_Pais From Cidade,SubRegiao,Pais Where Cidade.Codigo_SubRegiao = SubRegiao.Codigo_SubRegiao AND SubRegiao.Codigo_Pais = Pais.Codigo_Pais;
Note que a condição Where sempre especifica as chaves estrangeiras que interligam as tabelas da seleção. Isso é uma característica da junção do tipo produto cartesiano.
Na próxima seção você verá como criar junções sem usar a chave estrangeira diretamente.
Unidade 9
banco_dados_I_2008a.indb 213
213
3/3/2008 16:49:01
Universidade do Sul de Santa Catarina
SEÇÃO 3 – Junções internas A utilização da cláusula Inner é o que caracteriza o comando para uma junção interna, porém ele não é obrigatório. Pode parecer à primeira vista que as junções internas se equiparam com as junções de produto cartesiano vistas anteriormente. Mas nas junções internas é sempre obrigatória a especificação de condição de junção, ou seja, quais linhas de uma tabela têm alguma ligação com a linha de outra tabela. Para isso deve-se utilizar a cláusula On. A cláusula On se assemelha em muito com a cláusula Where, ou seja, um par com uma linha da Tabela A e uma linha da Tabela B são correlacionados se a expressão da cláusula On for verdadeira. Por exemplo, a seleção de todos os registros da tabela Cidade pode ser escrita da seguinte forma: SELECT * FROM Cidade INNER JOIN subregiao ON Cidade.Codigo_subregiao = Subregiao.Codigo_Subregiao;
Note que a cláusula On está sendo utilizada de forma semelhante à cláusula Where das junções de produto cartesiano.
Porém o resultado do Select será diferente. Veja a saída realizada pelo comando anterior:
Figura 9.14 - Resultado de uma junção interna entre as tabelas de cidade e sub-região.
214
banco_dados_I_2008a.indb 214
3/3/2008 16:49:01
Banco de Dados I
Como ambas as tabelas possuem o campo Codigo_SubRegiao, uma coluna se manteve como Codigo_SubRegiao e outra foi renomeada para Codigo_SubRegiao_1, que representa exatamente o relacionamento entre as tabelas e a condição da cláusula On. Veja um exemplo de Select com junção interna para selecionar o nome de todas as sub-regiões e seus respectivos países:
Select SubRegiao.Nome_SubRegiao,Pais.Nome_Pais From SubRegiao INNER JOIN Pais ON SubRegiao.Codigo_Pais = Pais.Codigo_Pais;
O resultado desse comando será:
Figura 9.15 - Resultado de uma junção interna entre as tabelas de sub-região e país.
Bem, o que era importante a respeito do assunto junção interna foi apresentado nesta seção. Na próxima seção você terá contato com as junções externas.
Unidade 9
banco_dados_I_2008a.indb 215
215
3/3/2008 16:49:02
Universidade do Sul de Santa Catarina
SEÇÃO 4 – Junções externas Para representar uma junção externa utiliza-se a cláusula Outer, no entanto, ela não é obrigatória. O que caracteriza realmente as junções externas são as cláusulas Left e Right.
Junção externa left outer join Esse tipo de junção externa funciona da seguinte forma:
executa uma junção interna;
verifica quais linhas da primeira tabela não possuem relacionamento com a segunda tabela da seleção;
para cada linha da segunda tabela que não possui relacionamento é inserido um campo com valor null.
Veja o exemplo a seguir: SELECT * FROM SubRegiao LEFT OUTER JOIN Cidade ON Cidade.Codigo_SubRegiao = SubRegiao.Codigo_SubRegiao;
O resultado do Select acima será:
Figura 9.16 - Resultado de um left outer joiner entre as tabelas sub-região e cidade.
Repare nas linhas destacadas acima em que as sub-regiões que não possuem cidade relacionada às colunas codigo_cidade, nome_cidade e codigo_subregiao_2 ficaram sem valores, ou seja, foram preenchidas com null. Em uma seleção normal essas linhas seriam ignoradas. 216
banco_dados_I_2008a.indb 216
3/3/2008 16:49:02
Banco de Dados I
Com o uso de left outer joiner todas as linhas das tabelas da esquerda que não possuem correspondentes na tabela da direita são apresentadas no resultado da consulta.
Junção externa right outer join Esse tipo de junção externa funciona da seguinte forma:
executa uma junção interna;
verifica quais linhas da segunda tabela não possuem relacionamento com a primeira tabela da seleção;
para cada linha da primeira tabela que não possui relacionamento é inserido um campo com valor null.
Ou seja, a junção externa right outer join é o inverso da junção left outer join. Veja o próximo exemplo, supondo que não há nenhuma sub-região cadastrada para o país Canadá: SELECT * FROM SubRegiao RIGHT OUTER JOIN Pais ON Pais.Codigo_Pais = SubRegiao.Codigo_Pais;
O resultado do comando Select será:
Figura 9.17 - Resultado de um right outer joiner entre as tabelas sub-região e país.
Basicamente, a diferença entre right e left está na escolha da tabela em que os elementos que não possuem relacionamento serão escolhidos para serem acrescidos com null.
Unidade 9
banco_dados_I_2008a.indb 217
217
3/3/2008 16:49:02
Universidade do Sul de Santa Catarina
Síntese Nesta unidade você ficou sabendo que a maioria das seleções criadas por especialistas em banco de dados envolve mais de uma tabela relacional. Essas seleções necessitam de regras específicas para o cruzamento dos dados das tabelas referenciadas na cláusula Where. E essas regras recebem o nome de junção. Se as tabelas que fazem parte da seleção que será implementada possuem poucos registros cadastrados e existe uma relação direta entre as chaves estrangeiras, o ideal é a adoção da junção por produto cartesiano. Porém se as tabelas possuem um número elevado de registros, pode-se utilizar dois métodos: a junção interna e a junção externa. Quando o objetivo é listar os dados de todas as tabelas que fazem parte da seleção e que possuem valores relacionados, o ideal é a junção interna, ou simplesmente inner-join, representada pela cláusula Inner. Por outro lado, podem ser adotadas as junções externas, Left e Right, quando se deseja listar todos os dados das tabelas, mesmo que o relacionamento direto não exista. As junções externas Left e Right especificam quais tabelas terão seus campos preenchidos com null.
218
banco_dados_I_2008a.indb 218
3/3/2008 16:49:02
Banco de Dados I
Atividades de auto-avaliação Com o modelo de dados abaixo, escreva os comandos em SQL que resultam na seleção solicitada. Cidade
Professor
Codigo_Curso Descricao_Curso Vagas Codigo_Local
Codigo_Professor Nome_Professor Titulacao Codigo_Curso
Local Codigo_Local Nome_Local Cidade UF
1. Utilizando uma junção de produto cartesiano, selecione o nome dos professores, a descrição dos seus respectivos cursos e os locais em que os mesmos são ministrados:
2. Utilizando uma junção de produto cartesiano, selecione a descrição dos seus cursos ministrados em Santa Catarina.
Unidade 9
banco_dados_I_2008a.indb 219
219
3/3/2008 16:49:02
Universidade do Sul de Santa Catarina
3. Utilizando uma junção de produto cartesiano, selecione o nome e a titulação dos professores do curso de Banco de Dados I.
4. Utilizando uma junção de produto cartesiano, selecione o local, a cidade e a unidade federativa de todos os cursos que ainda possuem vagas.
5. Utilizando uma junção interna (inner join), selecione todos os cursos e seus respectivos locais em que são lecionados.
6. Utilizando uma junção interna (inner join), selecione todos os professores e seus respectivos cursos.
220
banco_dados_I_2008a.indb 220
3/3/2008 16:49:03
Banco de Dados I
7. Utilizando uma junção externa (outer join), selecione todos os professores e seus respectivos cursos, de forma que os professores sem curso tenham os seus campos preenchidos com null.
8. Utilizando uma junção externa (outer join), selecione todos os professores e seus respectivos cursos, de forma que os cursos sem professor tenham os seus campos preenchidos com null.
Unidade 9
banco_dados_I_2008a.indb 221
221
3/3/2008 16:49:03
Universidade do Sul de Santa Catarina
Saiba mais Para aprofundar as questões abordadas nesta unidade você poderá pesquisar nos livros:
COSTA, R. L. de C. SQL: guia prático. São Paulo. Brasport, 2004.
FONSECA, L. C. Trabalhando com 10g oracle database. Ciência Moderna, 2005.
MECENAS, I.; OLIVEIRA, V. de. Banco de dados: do modelo conceitual à implementação física. Alta Books, 2005.
OPEEL, A. Banco de dados desmistificado. Rio de Janeiro. Alta Books, 2005.
RANGEL, A. Mysql: projeto, modelagem e desenvolvimento. Rio de Janeiro. Alta Books, 2005.
222
banco_dados_I_2008a.indb 222
3/3/2008 16:49:03
Para concluir o estudo Chegamos ao final de mais uma grande jornada. Nesta disciplina, a intenção foi colocar você em contato com o mundo dos sistemas de bancos de dados, possibilitando a compreensão do seu papel como um profissional que está envolvido com armazenamento e gerenciamento de informações, identificando as atividades que serão executadas, as ferramentas que podem ser utilizadas. O mais importante é que a tecnologia é um adicional à sua capacidade de solucionar problemas. Para muitos de vocês os comandos e as tecnologias aqui apresentadas talvez não tenham sido novidade, no entanto espero que a disciplina tenha contribuído para um aprimoramento do seu conhecimento, independente dos seus conhecimentos prévios do assunto. Acredito que muitas perguntas ainda se formam em sua mente, porém este é o meu papel como autor, fomentar a dúvida, a curiosidade e estimular a busca por novos conhecimentos. Espero ter atingido este de plantar a semente da busca pela informação. Parabéns, você acaba de dar mais um grande passo rumo ao objetivo maior que é se tornar um profissional que domine a tecnologia da informação por meio da internet! Se a caminhada parecia longa, você acaba de encurtá-la! Desejo que cada vez mais você esteja próximo do seu objetivo maior, mesmo que em alguns momentos o final da caminhada se apresente mais distante. Levante a cabeça, tome fôlego e... rumo ao sucesso!
banco_dados_I_2008a.indb 223
3/3/2008 16:49:03
banco_dados_I_2008a.indb 224
3/3/2008 16:49:03
Referências CHU, S. Y. Banco de dados: organização, sistemas e administração. São Paulo: Atlas, 1983. CHEN, P. Modelagem de dados: a abordagem entidaderelacionamento para projeto lógico. São Paulo: Makron Books, 1990.DATE, C. J. Bancos de dados: fundamentos. Rio de Janeiro: Campus, 1985. . Introdução a sistemas de banco de dados. 8. ed. Rio de Janeiro: Campus, 1990. COUGO, P. Modelagem conceitual e projeto de banco de dados. 7. Reimp. Rio de Janeiro: Campus, 2001. COSTA, Rogério Luís de Carvalho. SQL: Guia prático. São Paulo. Brasport, 2004. FONSECA, Luiz Claudio. Trabalhando com 10g Oracle database. Ciência Moderna, 2005. HERNANDEZ, M. J. Aprenda a projetar seu próprio banco de dados. São Paulo: Pearson Education do Brasil Ltda, 1999. JESUS, J. B. de. Ansi SQL 89 92. Axcel Books do Brasil Ltda, 2004. LIMA, A. da S. ERwin 4.0: modelagem de dados. 2. ed. São Paulo: Érica, 2002. MECENAS, Ivan. OLIVEIRA, Viviane de. Banco de dados: do modelo conceitual à implementação física. Alta Books, 2005. MEDEIROS, M. Oracle 8i: conceitos básicos. Florianópolis: Advanced, 2000.
banco_dados_I_2008a.indb 225
3/3/2008 16:49:03
Universidade do Sul de Santa Catarina
NASSU, E. A. Banco de dados orientado a objetos. Edgard Blucher, 1999. OLIVEIRA, A. R de. Modelagem de dados. São Paulo: Senac, 2004. OPEEL, Andy. Banco de dados desmistificado. Rio de Janeiro. Alta Books, 2005. PRESTES, R. Mysql guia de consulta rápida. Novatec, 2000. RANGEL, Alexandre. Mysql - Projeto, modelagem e desenvolvimento. Rio de Janeiro. Alta Books, 2005. SETZER, V. W.; SILVA, F. S. da. Banco de dados. São Paulo: Edgard Blucher, 2005. SOARES, S. P. de M. Dominando o ERwin: modelagem de dados para banco oracle. São Paulo: Ciência Moderna, 2004. SOARES, W. MySQL conceitos e aplicações. Erica, 2003.
226
banco_dados_I_2008a.indb 226
3/3/2008 16:49:03
Sobre os professores conteudistas Marcelo Medeiros é bacharel em Ciências da Computação pela Universidade Regional de Blumenau e professor da Unisul desde 1995, na qual leciona as disciplinas de Banco de Dados, Programação e Estrutura de Dados para os cursos de Engenharia, Ciência da Computação e Sistemas de Informação. Atualmente participa do projeto de Incubadora da Unisul, desenvolvendo projetos de software na área de automação e segurança via IP. Atua como consultor junto a empresas no desenvolvimento de novos produtos de informática. Luciano José Sávio possui graduação em Ciência da Computacao pela Universidade do Sul de Santa Catarina (1995) , mestrado em Engenharia de Produção pela Universidade Federal de Santa Catarina (2000) e cursa doutorado em Engenharia de Produção pela Universidade Federal de Santa Catarina (2004) . Atualmente é professor titular da Universidade do Sul de Santa Catarina na área de banco de dados. Tem experiência na área de Ciência da Computação , com ênfase em Sistemas de Computação. Atuando principalmente nos seguintes temas: Agentes, Inteligência Artificial, Banco de Dados.
banco_dados_I_2008a.indb 227
3/3/2008 16:49:03
banco_dados_I_2008a.indb 228
3/3/2008 16:49:03
Respostas e comentários das atividades de auto-avaliação Unidade 1 1) Por que a área de banco de dados é considerada crítica numa empresa? Resposta: Os elementos formadores da área de infra-estrutura são ditos de funções críticas. Dentre estes elementos estão as áreas de redes de computadores, telecomunicações e também a área de banco de dados, uma vez que o Sistema Gerenciador de Banco de Dados (SGBD) é quem provê o acesso às informações numa organização. Desta forma, qualquer problema envolvendo algum elemento da área de infra-estrutura pode causar uma paralisação das atividades de grande parte da empresa, inviabilizando o trabalho de muitas pessoas.
2) Na maioria dos países de primeiro mundo, as empresas utilizam um profissional especialista para cada área. O analista de sistemas e o programador executam cada um a sua tarefa. Já no Brasil, o profissional de informática tende a agrupar todas as funções numa única pessoa. Em sua opinião, porque isso acontece? Resposta: O Brasil possui uma economia em franca expansão, sendo classificado como um país emergente. Em conseqüência, a organização interna das áreas de TI tendem a agregar várias funções a um mesmo especialista, visando diminuir custos e aumentar a competitividade. Desta forma, o profissional da área de informática tende a se tornar um especialista em várias áreas do conhecimento, a fim de se destacar e garantir a melhor vaga possível no mercado de trabalho.
3) Quais os principais benefícios proporcionados pelo surgimento do SGBD para as empresas? Resposta: - O SGBD assume a responsabilidade pela manutenção das informações, retirando parte desta responsabilidade dos sistemas de informação.
banco_dados_I_2008a.indb 229
3/3/2008 16:49:04
Universidade do Sul de Santa Catarina
- Padronização na forma de acesso aos dados, através da linguagem SQL - Compartilhamento mais eficiente das informações armazenadas - Diminuição ou controle da redundância dos dados armazenados
Unidade 2 1) Se lhe fosse apresentado um conjunto de ferramentas computacionais para o gerenciamento de dados, quais requisitos você utilizaria para avaliar a melhor ferramenta? Resposta: Independente de ser relacional ou orientado a objetos, a ferramenta computacional deve ser avaliada com base no problema que será solucionado. Nem sempre o menor preço significa custos menores. É importante que a ferramenta possua um bom grupo de usuários no mercado de trabalho, para que seja gerada uma boa base de conhecimento, para troca de informações e soluções já implementadas. Além disso, é importante que a ferramenta tenha suporte ao usuário e referências bibliográficas de fácil acesso. Outra característica fundamental é a atualização da ferramenta, que deve acompanhar a evolução da área da informática, que possa apresentar novas metodologias e tecnologias de gerenciamento da informação. Tecnicamente, é essencial que a ferramenta garanta a integridade dos dados e a fidelidade dos dados. Sem nunca esquecer que a melhor solução não é aquela que a ferramenta disponibiliza, mas aquela que o usuário deseja.
2) A utilização de uma ferramenta computacional do tipo SGDB significa garantia de que o banco de dados modelado atenderá a todas as necessidades do usuário? Resposta: Não. A ferramenta computacional é um auxílio às atividades do especialista em banco de dados. A tarefa de analisar e modelar uma solução que atenda as necessidades do usuário final é do especialista. Se a tarefa de análise e definição das tabelas for realizada de forma equivocada, a ferramenta implementará a solução da forma proposta pelo especialista, ou seja, também de forma equivocada. A garantia de atendimento às necessidades do usuário está diretamente relacionada ao processo de definição e criação do banco de dados, e essa tarefa é realizada pelo estudo e conhecimento do especialista. Cabe ao especialista saber utilizar de forma correta as funcionalidades que a ferramenta computacional lhe disponibiliza.
230
banco_dados_I_2008a.indb 230
3/3/2008 16:49:04
Banco de Dados I
Unidade 3 1. Com base na descrição acima, desenhe a cardinalidade que liga as tabelas do modelo criado a seguir.
Clientes
Veículos
Nome Varchar(30) Data_Nasc Date CPF Varchar(14)
Placa Varchar(07) Cor Varchar(30) Modelo Varchar(30)
Estacionados CPF Varchar(14) Placa Varchar(07) Data_Entrada Date Data_Saída Date Hora_Entrada Time Hora_Saída Time
2. Identifique na tabela de Clientes o campo sujeito à chave primária. Resposta: CPF. 3. Identifique na tabela de Veículos o campo sujeito à chave primária. Resposta: Placa. 4. Identifique na tabela de Estacionados os campos sujeitos à chave primária e às chaves estrangeiras. Resposta: Chaves primárias: CPF e Placa. Chaves estrangeiras: CPF fazendo referencia ao CPF na tabela de Clientes. Placa fazendo referencia à Placa na tabela de Veículos.
231
banco_dados_I_2008a.indb 231
3/3/2008 16:49:04
Universidade do Sul de Santa Catarina
Unidade 4 1. Qual a diferença entre banco de dados relacional e banco de dados orientado a objetos? Resposta: um banco de dados relacional tem suas estrutura de funcionamento baseada em tabelas relacionais, que implementam as regras por meio de chaves primárias e chaves estrangeiras. Um banco de dados orientado a objeto tem sua estrutura de funcionamento baseada nas regras de definição da classe. As classes representam o esqueleto do objeto, no qual se define as propriedades e formas de acesso ao objeto. 2. Na maioria dos países de primeiro mundo, as empresas utilizam um profissional especialista para cada área. O analista de sistemas e o programador executam cada um a sua tarefa. Já no Brasil, o profissional de informática tenda a agrupar todas as funções numa única pessoa. Na sua opinião, porque isso acontece? Resposta: o Brasil é um país de terceiro mundo, em desenvolvimento, e possui uma economia em expansão. Em conseqüência, não possibilita que as empresas tenham condição de agregar vários especialistas, um para cada área, como acontece nos países de primeiro mundo, pois isso honorária em muito o custo da empresa, principalmente pela carga tributária. Desta forma, o empregado brasileiro tende a se tornar um especialista em várias áreas para poder se destacar diante dos outros, a fim de conseguir uma vaga no mercado de trabalho. 3. Caso uma empresa lhe questionasse sobre as vantagens e desvantagens do uso de ferramentas de uso livre, que tipo de informação você passaria? A escolha da ferramenta, se proprietária ou de uso livre, deve se adequar à necessidade da empresa, ou do usuário final. A avaliação apenas pelo requisito preço pode levar a escolhas precipitadas. A ferramenta de uso livre deve ter além da gratuidade, suporte, manuais, garantia de funcionamento e que acompanhe as atualizações de mercado. O mais importante é avaliar se a ferramenta, independentemente de custo, atende as necessidades do usuário.
232
banco_dados_I_2008a.indb 232
3/3/2008 16:49:04
Banco de Dados I
Unidade 5 1. Comando em SQL para criação da tabela Produto. Create Table Produto ( Codigo_Produto Integer, Descricao_Produto Varchar(30) not null, Preco_Produto float not null, Primary key(Codigo_Produto) ); 2. Comando em SQL para criação da tabela Nota_Fiscal. Create Table Nota_Fiscal( Numero_NF Integer, Data_NF Date not null, Valor_NF Float not null, Primary key(Numero_NF) ); 3. Comando em SQL para criação da tabela de Itens. Create Table Itens( Cod_Prod Integer, NumNF Integer, Num_Item Integer not null, Qde_Item Float not null, PrimaryKey(Cod_Prod,NumNF), Foreign Key(Cod_Prod) references Produto(Codigo_Produto), Foreign Key(NumNF) references Nota_Fiscal(Numero_NF) ); 4. Altere o campo Descricao_Produto da tabela Produto para o tipo Varchar(50). Alter Table Produto Modify Descricao_Produto Varchar(50); 5. Altere a tabela Nota_Fiscal adicionando o campo ICMS do tipo Float. Alter Table Nota_Fiscal Add ICMS float; 6. Altere a tabela Produto adicionando o campo Peso do tipo Float. Alter Table Produto Add Peso float;
233
banco_dados_I_2008a.indb 233
3/3/2008 16:49:04
Universidade do Sul de Santa Catarina
7. Altere a tabela Produto adicionando o campo Data_Validade do tipo Date. Alter Table Produto Add Data_Validade Date; 8. Escreva o comando em SQL que apresenta a estrutura da tabela Produto. Desc Produto ou Describe Produto; 9. Escreva o comando em SQL que apresenta a estrutura da tabela Nota_Fiscal. Desc Nota_Fiscal ou Describe Nota_Fiscal; 10. Remova a tabela Itens do modelo de banco de dados. Drop Table Itens;
Unidade 6 1. A empresa Pare Aqui deseja implantar um sistema para controle dos seus clientes. A empresa possui vários pátios de estacionamento na cidade, porém o controle é realizado por meio de anotações em caderno, e isso tem gerado uma perda muito grande de recursos financeiros e até mesmo de clientes. A empresa adota as seguintes regras: no caderno de clientes são cadastrados: o nome do cliente, a sua data de nascimento e o seu CPF; no caderno de veículos são cadastrados: a placa, a cor e o modelo; no caderno de estacionamento são cadastrados: a data de entrada e saída, a hora de entrada e saída e a placa do veículo; o mesmo cliente pode ter mais de um carro estacionado no pátio. Com base nesta descrição, construa o modelo de dados numa ferramenta CASE e perceba como fica mais fácil trabalhar com o apoio de uma ferramenta especializada para esta finalidade.
234
banco_dados_I_2008a.indb 234
3/3/2008 16:49:04
Banco de Dados I
Resposta:
Obs.: Dependendo da ferramenta CASE utilizada a simbologia dos elementos gráficos pode apresentar variações.
Unidade 7 a1) Resposta: Insert into Produto values (100, ’Caneta Azul’, 1.00); a2) Resposta: Insert into Produto values (200, ’Borracha’, 0.80); a3) Resposta: Insert into Produto values (300, ’Caderno de Desenho’, 2.20); a4) Resposta: Insert into Produto values (400,’Régua’,0.25);
b) Altere os dados dos seguintes produtos: b1) Altere o preço da “Caneta Azul” para 2.50. Resposta: Update Produto set Preco_Produto = 2.50 where Codigo_Produto = 1; b2) Altere o código da “Régua” para 400. Resposta: Update Produto set Codigo_Produto = 400 where Codigo_Produto = 500; b3) Altere a descrição do “Caderno de Desenho” para “Caderno de 12 Matérias”. Resposta: Update Produto set Descricao_Produto = “Caderno 12 Matérias” where Codigo_Produto = 300;
235
banco_dados_I_2008a.indb 235
3/3/2008 16:49:04
Universidade do Sul de Santa Catarina
C) Exclua os seguintes produtos: c1) Remova os produtos que possuem preço inferior a 1.00. Resposta: Delete from Produtos where Preco_Produto < 1.00;
c2) Remova os produtos que possuem o codigo = 100. Resposta: Delete from Produtos where Codigo_Produto = 100; c3) Exclua todos os produtos cadastrados na tabela de Produtos. Resposta: Delete from Produtos;
Unidade 8 1. a) Liste todos os alunos do sexo masculino. Resposta: Select * from Alunos where Upper(Sexo) = ‘M’; b) Liste todos os alunos que possuem o sobrenome “Medeiros”, ordenados crescentemente por idade. Resposta: Select * from Alunos where Upper(Nome) like ‘%MEDEIROS’ Order by Idade; c) Liste a média de idade dos alunos. Resposta: Select AVG(Idade) from Alunos; d) Liste a maior idade dos alunos. Resposta: Select Max (Idade) from Alunos; e) Liste a quantidade de alunos com idade menor que 20 anos. Resposta: Select Count(Matricula) from Alunos where Idade < 20;
236
banco_dados_I_2008a.indb 236
3/3/2008 16:49:05
Banco de Dados I
f) Liste o nome e a matrícula do aluno chamado “Lucas Giaretta”. Resposta: Select Nome, Matricula from Alunos where Upper(Nome) = Upper(‘Lucas Giaretta’); g) Liste o aluno com a menor idade. Resposta: Select Nome from Alunos where Idade = (Select Min(Idade) from Alunos); h) Liste a quantidade de alunos com idade entre 10 e 20 anos, e que sejam do sexo masculino. Resposta: Select Count(Matricula) from Alunos where (Idade >= 10 and Idade <=20) and (Upper(Sexo) = ‘M’); i)Liste a quantidade de mulheres cadastradas na tabela de Alunos. Resposta: Select Count (Matricula) from Alunos where Upper (Sexo) = ‘F’;
Unidade 9 1. Utilizando uma junção de produto cartesiano, selecione o nome dos professores, a descrição dos seus respectivos cursos e os locais em que os mesmos são ministrados: Resposta: Select Professor.Nome_Professor,Curso.Descricao_Curso,Local.Nome_Local From Professor,Curso,Local Where Professor.Codigo_Curso = Curso.Codigo_Curso AND Curso.Codigo_Local = Local.Codigo_Local; 2. Utilizando uma junção de produto cartesiano, selecione a descrição dos seus cursos ministrados em Santa Catarina. Resposta: Select Curso.Descricao_Curso From Curso, Local Where upper(Local.UF) = ‘SC ‘ AND Local.Codigo_Local = Curso.Codigo_Local;
237
banco_dados_I_2008a.indb 237
3/3/2008 16:49:05
Universidade do Sul de Santa Catarina
3. Utilizando uma junção de produto cartesiano, selecione o nome e a titulação dos professores do curso de Banco de Dados I. Resposta: Select Professor.Nome_Professor,Professor.Titulacao From Professor,Curso Where upper(Curso.Descricao_Curso) = ‘BANCO DE DADOS I ‘ AND Curso.Codigo_Curso = Professor.Codigo_Curso; 4. Utilizando uma junção de produto cartesiano, selecione o local, a cidade e a unidade federativa de todos os cursos que ainda possuem vagas. Resposta: Select Local.Nome_Local,Local.Cidade,Local.UF From Curso,Local Where Curso.Vagas > 0 AND Curso.Codigo_Local = Local.Codigo_Local; 5. Utilizando uma junção interna (inner join), selecione todas os cursos e seus respectivos locais em que são lecionados. Resposta: Select * From Curso INNER JOIN Local ON Curso.Codigo_Local = Local.Codigo_Local; 6. Utilizando uma junção interna (inner join), selecione todos os professores e seus respectivos cursos. Resposta: Select * From Professor INNER JOIN Curso ON Professor.Codigo_Curso = Curso.Codigo_Curso; 7. Utilizando uma junção externa (outer join), selecione todos os professores e seus respectivos cursos, de forma que os professores sem curso tenham o seus campos preenchidos com null. Resposta: Select * From Curso LEFT OUTER JOIN Professor ON Professor.Codigo_Curso = Curso.Codigo_Curso;
238
banco_dados_I_2008a.indb 238
3/3/2008 16:49:05
Banco de Dados I
8. Utilizando uma junção externa (outer join), selecione todos os professores e seus respectivos cursos, de forma que os cursos sem professor tenham o seus campos preenchidos com null. Resposta: Select * From Professor RIGHT OUTER JOIN Curso ON Professor.Codigo_Curso = Curso.Codigo_Curso;
239
banco_dados_I_2008a.indb 239
3/3/2008 16:49:05
banco_dados_I_2008a.indb 240
3/3/2008 16:49:05