Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Bancos de Dados
novatec
Original Japanese-language edition Manga de Wakaru Database ISBN 4-274-06631-2 2004 by Mana Takahashi and TREND-PRO Co., Ltd., published by Ohmsha, Ltd. English-language edition The Manga Guide to Databases ISBN 978-1-59327-190-9 2009 by Mana Takahashi and TREND-PRO Co., Ltd., co-published by No Starch Press, Inc. and Ohmsha, Ltd. Portuguese-language rights arranged with Ohmsha, Ltd. and No Starch Press, Inc. for Guia Mang de Bancos de Dados ISBN 978-85-7522-163-1 2009 by Mana Takahashi and TREND-PRO Co., Ltd., published by Novatec Editora Ltda. Edio original em Japons Manga de Wakaru Database ISBN 4-274-06631-2 2004 por Mana Takahashi e TREND-PRO Co., Ltd., publicado pela Ohmsha, Ltd. Edio em Ingls The Manga Guide to Databases ISBN 978-1-59327-190-9 2009 por Mana Takahashi e TREND-PRO Co., Ltd., co-publicao da No Starch Press, Inc. e Ohmsha, Ltd. Direitos para a edio em Portugus acordados com a Ohmsha, Ltd. e No Starch Press, Inc. para Guia Mang de Bancos de Dados ISBN 978-85-7522-163-1 2009 por Mana Takahashi e TREND-PRO Co., Ltd., publicado pela Novatec Editora Ltda. Copyright 2009 da Novatec Editora Ltda. Todos os direitos reservados e protegidos pela Lei 9.610 de 19/02/1998. proibida a reproduo desta obra, mesmo parcial, por qualquer processo, sem prvia autorizao, por escrito, do autor e da Editora. Editor: Rubens Prates Ilustrao: Shoko Azuma Traduo: Thas Cristina Casson Reviso gramatical: Lia Gabriele Regius Editorao eletrnica: Camila Kuwabata e Carolina Kuwabata ISBN: 978-85-7522-163-1 Histrico de impresses: Novembro/2010 Outubro/2009 Primeira reimpresso Primeira edio
NOVATEC EDITORA LTDA. Rua Lus Antnio dos Santos 110 02460-000 So Paulo, SP Brasil Tel.: +55 11 2959-6529 Fax: +55 11 2950-8869 E-mail: novatec@novatec.com.br Site: www.novatec.com.br
Dados
(CIP)
09-09515
CDD-005.7565 ndices para catlogo sistemtico: 1. Banco de dados : Computadores : Processamento de dados : Histria em quadrinhos 005.7565 VC20101112
Sumrio
Prefcio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ix 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 O que um Banco de Dados? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 Por que precisamos de Bancos de Dados? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 O que est acontecendo no reino? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 Os dados esto duplicados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 Podem ocorrer conflitos nos dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 Dados so difceis de atualizar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 Um Banco de Dados - a nossa soluo! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 Como usar um Banco de Dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 Resumo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 O que um banco de dados relacional? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 Terminologia de Banco de Dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 Bancos de Dados relacionais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 Tipos de modelos de dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 Operaes de extrao de dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 Operaes de conjunto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 Operaes relacionais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 Questes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 O Banco de Dados relacional vence! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 Resumo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 Respostas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 Vamos projetar um banco de dados! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 O modelo E-R . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 Normalizao de uma tabela . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 O que o modelo E-R? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 Como analisar um modelo E-R . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 1 Caso: Relacionamento um-para-um . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 2 Caso: Relacionamento um-para-muitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 3 Caso: Relacionamento muitos-para-muitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 Questes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 Normalizando uma tabela . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 Questes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79 Passos para projetar um Banco de Dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 Resumo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 Respostas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 Vamos aprender sobre SQL! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 Uso de SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 Pesquisa de dados usando um comando SELECT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93 Uso de funes de totalizao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98 Juno de tabelas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 Criao de uma tabela . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103 Viso geral sobre SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106 Pesquisa nos dados usando um comando SELECT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106 Criao de critrios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 Operadores de comparao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 Operadores lgicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 Padres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108 Pesquisas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108 Questes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109 Funes de agregao numricas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110 Totalizao de dados com agrupamento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110 Questes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111 Pesquisa de dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112 Uso de uma subconsulta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112 Uso de uma subconsulta correlata . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113 Questes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114 Juntando tabelas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114 Criao de uma tabela . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115 Insero, atualizao ou excluso de linhas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116 Criao de uma visualizao (View) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117 Questes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118 Resumo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119 Respostas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125 Vamos usar um Banco de Dados! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125 O que uma transao? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . O que uma trava (bloqueio)? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Segurana de Bancos de Dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Acelerando as coisas com indexao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Recuperao de desastres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Propriedades das transaes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Atomicidade . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Consistncia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Isolamento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Durabilidade . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Quando um desastre ocorre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Tipos de falhas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Pontos de checagem (checkpoints) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Questes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126 131 138 143 148 153 153 154 155 159 161 161 161 162
viSumRIO
ndices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Questes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Otimizao de uma consulta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Laos aninhados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Fuso ordenada (sort merge) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Hash . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Otimizador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Resumo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Respostas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169 os Bancos de Dados esto em todos os lugares! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169 Banco de Dados em uso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Bancos de Dados e a web . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Bancos de Dados distribudos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Procedimentos armazenados e gatilhos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Bancos de Dados na Internet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Uso de procedimentos armazenados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Questes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . O que um Banco de Dados distribudo? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Distribuio horizontal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Distribuio vertical . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Particionamento de dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Particionamento horizontal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Particionamento vertical . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Evitando inconsistncias com efetivao em duas fases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Questes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Replicao de Banco de Dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Somente leitura (Read-Only) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Replicao ativa em todos os servidores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Outras aplicaes de Bancos de Dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Bancos de dados orientado a objeto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Resumo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Repostas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Apndice Comandos SQL Usados com Frequncia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207 Referncias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209 ndice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211 175 177 183 185 194 196 196 197 197 198 198 198 199 199 201 201 201 202 202 202 203 205 205
Sumriovii
1
O que um Banco de Dados?
cloc cloc
el o
ma
Reino
de
Kod*
* Possvel referncia a Edgar Frank Codd (1924-2003), matemtico e criador do Modelo de Banco de Dados Relacional
Be n
se eu tenho tanta coisa pra fazer! somos O Reino de Kod - "O pas das frutas"
da
Pilha !
Te r
ra
Voc sabe que a nossa produo de frutas administrada por arquivos criados pelos...
. de Depto rias a do M e rc
Depto. de Negcios
nais
Internac io
Exportao
Depto. de
L L R Lari L!
Blam!
sim.
Hmm...
eu ainda acho trabalho dobrado cada departamento gerenciar a produo e faturamento cada um por si. Foi uma dor de cabea to grande quando o preo das mas subiu outro dia.
Princesa Ruruna!!
Blam!
Do meu pai?!
s mo a r tre pens de
Al
em pensar que, Se meus pais ainda estivessem no castelo, nada disso estaria acontecendo...!
gu
te
Pr
? esa inc
po
tr
s..
Cuidem-se.
Si...Sim, Vossa
Majestade!
Inacreditvel!
cloc
ag
cloc
lta
cloc
or
a.
..
De
vo
ao
T furiosa!
Bom, um pacote...
uma carta?
e uma carta.
o que um banco de dados? 5
"Encontramos um livro sobre uma tecnologia inovadora em uma terra distante que visitamos.
A pessoa que nos deu este livro disse que ele descreve uma magia secreta chamada de banco de Dados.
segundo a pessoa nos contou, o banco de Dados um sistema que permite a todo mundo compartilhar, gerenciar, e usar dados.
Mas como ele ser usado depende da ndole de quem ler o livro.
ela nos confiou o livro acreditando que o Reino de Kod o utilizaria de forma pacfica.
Ruruna...
6 Captulo 1
Rasg Rasg
Oh, to velho...
qu??
Rasg
No consigo abrir.
Sim, funcionou...
Est trancado.
Hmm...
click!
! Ka-boom
?!
Ham!
Cof! cof!
Aiiieee!!
!!!
hein?
onde estou?
UM FANTASMA?!
i-isso fa la!?
e voa...?
NO!
74 Captulo 3
Questes
Quanto voc entendeu do modelo E-R? Analise e desenhe um modelo E-R para cada um dos casos abaixo. As respostas esto na pgina 82. Q1 Um membro da equipe gerencia vrios clientes. Um cliente nunca ser contactado por mais de um membro da equipe.
Q2 Uma pessoa pode consultar diversos livros. Estes podem ser lidos por vrios alunos em momentos diferentes.
76 Captulo 3
Q3 Cada aluno participa de diversas palestras. Cada palestra assistida por diversos alunos. Um professor d diversas palestras. Cada palestra dada por um professor.
Q4 Cada cliente pode abrir vrias contas correntes. Cada conta aberta por um cliente. Cada banco gerencia diversas contas. Cada conta gerenciada por um banco.
banco
banco banco
Lembre-se de que a anlise baseada no modelo E-R no necessariamente apresenta um resultado correto. Pode haver muitas formas de organizar logicamente os dados para refletir condies reais.
Cdigo do Relatrio
Data
Cdigo do Produto
Nome do Produto
Data
Cdigo do Produto
Quantidade
Cdigo do Relatrio
Data
Cdigo do Relatrio
Cdigo do Produto
Quantidade
Cdigo do Produto
Nome do Produto
Preo Unitrio
Cdigo do Relatrio
Data
Cdigo do Relatrio
Cdigo do Produto
Quantidade
Cdigo do Produto
Nome do Produto
Preo Unitrio
78 Captulo 3
A forma desnormalizada uma tabela na qual itens que aparecem mais de uma vez no foram removidos. Vimos que no se pode gerenciar bem dados usando este tipo de tabela em um banco de dados relacional. Consequentemente, preciso dividir a tabela. A primeira forma normal refere-se a uma tabela simples, bidimensional, resultante da diviso da original desnormalizada. Pode ser considerada como uma tabela com um item em cada clula. A tabela dividida para que nenhum item aparea mais de uma vez. A segunda forma normal refere-se a uma tabela na qual uma chave que pode identificar dados determina os valores de outras colunas. Aqui, a chave primria que determina valores em outras colunas. Em um banco de dados relacional, um valor chamado de funcionalmente dependente se ele determinar valores em outras colunas. Na segunda forma normal, a tabela dividida para que valores em outras colunas sejam funcionalmente dependentes da chave primria. Na terceira forma normal, uma tabela dividida para que um valor no seja determinado por nenhuma chave no-primria. Em um banco de dados relacional, um valor chamado de transitivamente dependente se ele determinar valores em outras colunas indiretamente, o que parte de uma operao funcionalmente dependente. Na terceira forma normal, a tabela dividida para que valores transitivamente dependentes sejam removidos.
Questes
importante ser capaz de criar uma tabela de banco de dados relacional para diversas situaes, ento vamos examinar alguns exemplos de tabelas normalizadas. Determine como a tabela foi normalizada em cada caso abaixo. As respostas esto na pgina 82. Q5 A tabela a seguir gerencia emprstimos de livros como o exemplo em Q2. Para qual estgio ela foi normalizada? Cdigo de Data Emprstimo Cdigo do Aluno Nome do Aluno Endereo de Aluno Ano de Ingresso
Curso
ISBN
Cdigo de Emprstimo
ISBN
Quantidade
Q6 A tabela a seguir tambm mostra uma situao de emprstimo de livros. Para qual estgio ela foi normalizada? Cdigo de Emprstimo Data Cdigo de Aluno
Cdigo de Aluno
Nome de Aluno
Curso
Ano de Ingresso
ISBN
Nome do Livro
Data de Publicao
Nmero de Pginas
Cdigo de Emprstimo Q7
ISBN
Quantidade
A tabela a seguir mostra as vendas mensais para cada membro da equipe. Cada departamento contm vrios membros. Um membro da equipe pode fazer parte de apenas um departamento. Normalize essa tabela na terceira forma normal. Cdigo de Membro da Equipe Nome de Membro da Equipe
Ms
Depto. de Mercadorias
Depto. de Exportao
Servial
Servial
Servial
Servial
Servial
Q8 A tabela a seguir representa um sistema de recebimento de pedidos. Normalize-a na terceira forma normal. No entanto, processe um cliente por cdigo de pedido. Voc pode processar diversos produtos baseado em um cdigo de pedido. Alm disso, um cdigo de pedido deve corresponder a apenas um representante. Cdigo de Pedido Cdigo de Cliente Nome Cdigo Nome Preo Cdigo do Nome do Quantidade do do do Unitrio Representante Representante Cliente Produto Produto
Data
80 Captulo 3
Q9 A tabela a seguir representa um sistema de recebimento de pedidos. Normalize-a na terceira forma normal. Suponha que os produtos sejam classificados por cdigo. Cdigo de Data Pedido Cdigo do Cliente Nome do Cliente Nome Cdigo do do Produto Produto Cdigo de Classificao do produto Nome de Classificao Quantidade do Produto
Preo Unitrio
A Princesa Ruruna e o Cain criaram um banco de dados com foco no esquema conceitual neste captulo. Eles esto no processo de melhoria do banco de dados. Agora que voc completou o projeto bsico de um banco de dados, vamos examinar seu uso no prximo captulo.
Resumo
Um modelo E-R usado para analisar entidades e relacionamentos. Relacionamentos entre entidades podem ser um-para-um, um-para-muitos e muitospara-muitos. Os dados em uma tabela devem ser normalizados antes que possam ser usados para criar um banco de dados relacional. O projeto de um banco de dados pode ser dividido em trs tipos: esquemas conceitual, interno e externo.
vamos projetar um banco de dados! 81
Respostas
Q1
Membro da equipe 1
Q2
Livro m
Q3
Alunos m
Q4
Cliente 1
Gerencia
Emprstimo
istem
Abrem
N Clientes
N Alunos
N Palestras m
N Contas m
ministra
Gerenciam
1
Profe ores
1 Banco
Q5 Segunda forma normal Q6 Terceira forma normal Q7 Cdigo de membro de equipe Ms Vendas do membro
Cdigo de departamento
Nome de departamento
82 Captulo 3
Q8
Cdigo de pedido
Data
Cdigo do cliente
Cdigo do representante
Cdigo do cliente
Nome do cliente
Cdigo de pedido
Cdigo do produto
Quantidade
Cdigo do produto
Nome do produto
Preo unitrio
Cdigo do representante
Nome do representante
Cdigo de cliente
Nome de cliente
Cdigo de pedido
Cdigo do produto
Quantidade
84 Captulo 3
5
Vamos usar um Banco de Dados!
nossa!!
Uiiiii! *
* Plop!
126 Captulo 5
Por exemplo, me pergunto por que um banco de dados ainda pode operar quando tantos usurios o acessam ao mesmo tempo.
Ah ?
Como um banco de dados pode deixar um grande nmero de usurios acess-lo simultaneamente?
banco de dados
acesso
Uhuuu!
t.
Terei 40 ento.
Enquanto isso, a Becky tambm leu o nmero de mas, 30, e acrescentou 10.
30 mas
Eu vejo 30 agora.
tem 30 agora!
Mas depois dessa operao, o banco de dados mostra o nmero atual de mas como 40.
Terei 40 ento.
Terei 40 ento.
40 mas
128 Captulo 5
Isso mesmo.
Deixa eu ver...
O Cain as comeu!
Acusado!
Eu?!
*
* tadam
**
** tadaaam
Na verdade, nessa sequncia, a Becky no deveria executar qualquer operao de banco de dados enquanto o Andy estiver trabalhando.
adicione 10.
Para permitir que o Andy e a Becky usem o banco de dados ao mesmo tempo,
Ele show!
Verdade.
O Cain est timo hoje.
Recuperao de desastres
Dentro de um banco de dados, registros chamados de logs so criados sempre que uma operao executada, no?
Log
banco de dados
Log
Log
Log
Log
Exato.
Logs, ...?
O mais importante so registros de valores antes e depois de uma atualizao no banco de dados.
Humm...
...
148 Captulo 5
BL, Bl, bl
Trans o qu?
sim.
Vou ilustrar...
No necessrio...
Se o problema ocorreu depois que uma transao j tinha sido efetivada, isso quer dizer que as operaes j estavam finalizadas para aquela transao. Ento, pode-se recuperar os dados reaplicando-se as operaes no banco de dados.
c, r i s sc i r
Dados a avano
Dados A
depois de uma operao de atualizao
O que acontece se a transao no tiver sido efetivada ainda quando o problema ocorre?
Numa operao de reverso (ou rollback), o valor antes da atualizao confirmado, para cancelar a transao.
Dados A
Reverso
Em outras palavras, o estado do banco de dados antes que a transao tenha iniciado restaurado. No se preocupe! Nesse caso, uma reverso efetuada.
ufA
Bem, tendo em vista tudo isso, vou perdoar vocs desTa vez.
Ainda bem...
mas
GULP!!
Ruruna...?
Porque eu...
Voc no notou...?
VEM C, CAIN!
Eu e Cain ficaremos juntos para sempre, e com o poder do nosso banco de dados,
H?! E...EU?!
Que o! ep dec
banco de dados
Leitura Transao
Escrita
Quando se compartilha um banco de dados, importante garantir que mltiplas transaes possam ser processadas sem causar conflitos nos dados. tambm importante proteger os dados para evitar inconsistncias na eventualidade de falhas durante o processamento de uma transao. Nesse sentido, listamos na tabela seguinte as propriedades que uma transao precisa apresentar, que de forma memorvel formam a palavra ACID.
Propriedades Obrigatrias para uma Transao
Propriedade A C I
Descrio Uma transao precisa sempre terminar com uma operao de efetivao ou de reverso. Processar uma transao nunca pode resultar em perda de consistncia no banco de dados. Mesmo quanto transaes so processadas simultaneamente, os resultados precisam ser os mesmos de um processamento sequencial. O contedo de uma transao completa no pode ser afetado por falhas.
Durabilidade
Atomicidade
A primeira propriedade obrigatria para uma transao, atomicidade, significa que uma transao precisa terminar com uma efetivao ou com uma reverso para manter o banco de dados livre de inconsistncias. Em resumo, ou todas as aes da transao so concludas, ou todas so canceladas. Uma efetivao finaliza as operaes de uma transao. Uma reverso as cancela.
vamos usar um banco de dados! 153
banco de dados
banco de dados
Efetivao
Reverso
Em alguns casos, uma efetivao ou uma reverso so efetuadas automaticamente. Pode-se tambm especificar qual das duas deve ser utilizada. Por exemplo, pode-se ordenar uma reverso se um erro ocorrer. Para efetuar essas operaes, utilizam-se os comandos COMMIT (efetivar) ou ROLLBACK (reverter) da SQL. COMMIT; Use este comando para efetivar uma transao Use este comando para reverter uma transao.
ROLLBACK;
questes
Responda a estas questes para ver quo bem entendeu a atomicidade. As respostas esto na pgina 167. Q1 Escreva um comando SQL que possa ser usado para finalizar uma transao. Q2 Escreva um comando SQL que possa ser usado para cancelar uma transao.
Consistncia
Uma transao no deve gerar erros. Se o banco de dados estava consistente antes do processamento de uma transao, ele precisa continuar consistente depois que a transao se encerra. O Cain deu como exemplo Andy e Becky, cada um tentando adicionar 10 mas em um total de 30 mas. Em vez de obter o valor correto de 50 mas, o banco de dados mostra um total de 40. Este tipo de erro chamado de atualizao perdida.
154 Captulo 5
30 mas
30 mas 30 mas
+10 mas
+10 mas
40 mas
40 mas
40 mas?
Quando transaes so processadas simultaneamente, mais de uma pode acessar a mesma linha da mesma tabela ao mesmo tempo, e conflitos nos dados podem ocorrer. Tabelas e linhas sujeitas a operaes em uma transao so chamadas de recursos. Em um banco de dados, transaes devem ser capazes de acessar os mesmos recursos simultaneamente sem criar inconsistncias.
Isolamento
Quando duas ou mais transaes simultneas produzem os mesmos resultados que seriam obtidos se elas tivessem sido processadas em momentos diferentes, diz-se que elas so serializveis. A propriedade de isolamento exige que as transaes sejam serializveis, o que serve como proteo contra erros. Para conseguir que as transaes sejam serializveis, preciso ter controle sobre aquelas que ocorrem simultaneamente. O mtodo mais comum utilizado para esse propsito o controle baseado em travas (bloqueios). Uma trava compartilhada usada quando se leem os dados, enquanto uma trava exclusiva usada quando se gravam dados.
Trava compartilhada
Trava exclusiva
leitura?
escrita?
leitura?
escrita?
Quando uma trava compartilhada est em uso, outro usurio pode aplicar uma trava compartilhada em outras transaes, mas no uma trava exclusiva. Quando uma trava exclusiva est aplicada, outro usurio no pode aplicar nem uma trava compartilhada nem uma exclusiva em outras transaes. A tabela a seguir resume o relacionamento entre travas compartilhadas e exclusivas.
Relacionamento de coexistncia entre tipos de trava (bloqueio)
Trava exclusiva NO NO
questes
Voc entendeu as travas? Responda s questes e verifique as respostas na pgina 167. Q3 Quando Andy aplica uma trava compartilhada, Becky pode fazer o mesmo? Q4 Quando Andy aplica uma trava exclusiva, Becky pode aplicar uma compartilhada? Q5 Quando Andy aplica uma trava compartilhada, Becky pode aplicar uma exclusiva? Q6 Quando Andy aplica uma trava exclusiva, Becky pode fazer o mesmo?
Travamento em duas fases
Para ter certeza de que as transaes so serializveis, precisamos obedecer certas regras para aplicar e remover travas. Uma dessas regras o travamento em duas fases - para cada transao, duas fases devem ser implementadas: uma para aplicar travas, e outra para remov-las. Por exemplo, suponha que existam os recursos A e B, ambos sujeitos a travamento. A transao observa a regra do travamento em duas fases, mas a no. Serializao s pode ser obtida se todas as transaes atendem a regra do travamento em duas fases.
156 Captulo 5
Granularidade de Trava
Existem diversos recursos que podem ser travados (bloqueados). Por exemplo, pode-se travar dados usando tabelas ou linhas como unidade. A extenso do travamento do recurso conhecida como granularidade. Granularidade grossa ocorre quando muitos recursos so travados ao mesmo tempo, enquanto que granularidade fina ocorre quando menos so.
Travar usando tabelas como unidade implica numa granularidade grossa nos travamentos. Travar usando linhas como unidade implica numa granularidade mais fina para os travamentos.
Quando a granularidade grossa (ou alta), o nmero de travas necessrias por transao reduzido, o que torna gerenciar a granularidade mais fcil. Por um lado, isso reduz a quantidade de processamento necessria para a CPU que executa o banco de dados. Por outro lado, conforme mais recursos vo sendo travados, o tempo de espera de transaes aguardando remoo de travas tende a aumentar. Dessa forma, a quantidade de transaes que se pode executar tende a cair quando a granularidade alta. Em contraste, quando a granularidade fina (ou baixa), uma quantidade maior de travas usada por transao, resultando em mais operaes para gerenciar o travamento. Isso resulta em mais processamento sendo imposto CPU. No entanto, j que menos recursos esto travados, menos tempo ser empregado esperando que outras transaes removam travas. Assim, o nmero de transaes que se pode efetuar tende a aumentar.
questes
Responda s questes, e confira as respostas corretas na pgina 168. Q7 A unidade de travamento para recursos foi alterada de tabelas para linhas. O que acontece com a quantidade de transaes que se pode efetuar simultaneamente? Q8 A unidade de travamento para recursos mudou de linha para tabela. O que acontecer com o nmero de transaes que se pode executar ao mesmo tempo?
Pode-se utilizar travamento para executar com sucesso duas ou mais transaes ao mesmo tempo. No entanto, utilizar travas implica no fardo do gerenciamento de travamento, uma vez que deadlocks - momentos em que aes entram em conflito - podem ocorrer. Mtodos mais simples de controle de execuo simultnea podem ser usados quando se tem uma quantidade menor de transaes ou um grande nmero de operaes de leitura. Nesses casos, os seguintes mtodos podem ser utilizados: Controle timestamp Um rtulo contendo o momento do acesso, conhecido como estampa de tempo (timestamp), atribudo aos dados acessados durante uma transao. Se outra com uma estampa mais adiantada no tempo j atualizou os dados, a operao no ser permitida. Quando uma operao de leitura ou escrita bloqueada, a transao revertida. Controle otimista Este mtodo permite operaes de leitura. Quando se tenta uma operao de escrita, os dados so verificados para ver se qualquer outra transao est ocorrendo. Se outra transao j tiver atualizado os dados, a transao revertida.
Nveis de Isolamento
Em um banco de dados no mundo real, pode-se configurar o nvel em que transaes sero processadas simultaneamente. Isso chamado de nvel de isolamento. Na SQL, o comando SET TRANSACTION (configurar transao) pode ser usado para especificar os seguintes nveis de isolamento: READ UNCOMMITTED READ COMMITTED REPEATABLE READ SERIALIZABLE SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; Dependendo do nvel de isolamento configurado, os seguintes problemas podem ocorrer. Leitura suja READ UNCOMMITTED READ COMMITTED REPEATABLE READ SERIALIZABLE Possvel No ocorre No ocorre No ocorre Leitura no reproduzvel Possvel Possvel No ocorre No ocorre Leitura fantasma Possvel Possvel Possvel No ocorre
Uma leitura suja ocorre quando uma segunda transao l uma linha antes que uma primeira a efetive. Uma leitura no reproduzvel ocorre quando uma transao l duas vezes os mesmos dados e obtm valores diferentes. Uma leitura fantasma ocorre quando uma transao procura linhas que obedecem um certo critrio, mas encontra as linhas erradas devido a alteraes feitas por outra transao.
158 Captulo 5
Durabilidade
Um banco de dados gerencia dados importantes, de modo que garantir a segurana e durabilidade no caso de falhas essencial. Segurana tambm importante para evitar que usurios no autorizados substituam dados e criem inconsistncias. Em um banco de dados, pode-se configurar permisses relativas a quem pode acessar todo o banco de dados ou as tabelas contidas. O Cain evitou problemas para o banco de dados do reino melhorando a segurana. Em um banco relacional, o comando GRANT (conceder) utilizado para conceder permisses para que outros usurios possam efetuar processamento nas tabelas que voc cria. Configurar permisses uma tarefa importante na operao de um banco de dados.
GRANT SELECT, UPDATE ON produtos TO Departamento_Negocios_Internacionais; Este comando concede permisses para processar os dados.
Resultado Permite que usurios pesquisem linhas numa tabela. Permite que usurios acrescentem linhas numa tabela. Permite que usurios atualizem linhas numa tabela. Permite que usurios apaguem linhas numa tabela. Concede todos os privilgios.
Conceder privilgios com WITH GRANT OPTION permite que o usurio conceda privilgios que recebeu a outros. Como o comando mostrado abaixo, o departamento de negcios internacionais pode permitir a outros usurios a atualizao do banco de dados.
GRANT SELECT, UPDATE ON produtos TO Departamento_Negocios_Internacionais WITH GRANT OPTION; O usurio que recebe os privilgios pode conced-los a outros.
Pode-se tambm retirar privilgios. Para fazer isso, utiliza-se o comando REVOKE. REVOKE SELECT, UPDATE ON produtos FROM Departamento_Negocios_Internacionais; Este comando revoga os privilgios concedidos ao usurio.
Alguns produtos de banco de dados podem agrupar uma srie de privilgios e conced-los a diversos usurios ao mesmo tempo. O agrupamento pode facilitar o gerenciamento de permisses.
banco de dados
Depto. de Mercadorias
Depto. de Negcios
Internacionais
Depto. de Exportao
Utilizar visualizaes, como descrito na pgina 117, permite um gerenciamento ainda mais controlado para melhorar a segurana. Primeiro, extraia parte de um banco de dados para criar uma visualizao. Configurar privilgios para ela significa que esses tambm foram aplicados na parte dos dados que foi selecionada para a visualizao.
Visualizao Tabela base
questes
Tente responder s seguintes questes sobre durabilidade. As respostas esto na pgina 168. Q9 Escreva um comando SQL que permita ao departamento de exportaes a pesquisa nos dados da tabela de produtos. Q10 Crie um comando SQL para revogar o privilgio dado ao departamento de negcios internacionais de excluir dados da tabela de produtos. Q11 Privilgios foram configurados como segue na tabela de produtos criada pelo administrador. Responda SIM ou NO em cada clula da tabela abaixo para indicar a presena ou ausncia de um privilgio para cada departamento, respectivamente.
GRANT ALL produtos TO Departamento_Negocios_Internacionais; GRANT INSERT, DELETE ON produtos TO Departamento_Mercadorias; GRANT UPDATE, DELETE ON produtos TO Departamento_Exportacoes;
Inserir
Atualizar
Excluir
Vocs dois s comearam recentemente a entender os mecanismos de um sistema de banco de dados. Mas tenho certeza de que ficaro bem sozinhos.
Com certeza..
Do que voc est falando? Voc vai ficar conosco, no vai, Tica?
Desculpem, No posso.
Ah, no...
Vocs sabem, h muitas pessoas que querem aprender sobre bancos de dados!
sim!
afinal, eu sou...
Ento voc vai visitar mais algum que abriu um livro sobre bancos de dados?
tada m!
he-he-he
Esse tempo que eu passei com vocs foi curto, mas feliz!
Tica, espere!
Eu tenho que...
Tica!!
vup!
Tica...
Tica fique!
190 Captulo 6
Obrigada!!
Ela se foi.
em um sistema real.
Dias depois...
Sim!
Claro!
To fofinho...
Fabuloso!
192 Captulo 6
Est lindo.
Falando do Cain, o rei est esperando por voc para conversar sobre os preparativos do casamento.
...ah, sim.
timo.
FIM