Você está na página 1de 47

Guia Mang de

Bancos de Dados

Mana Takahashi Shoko Azuma Trend-pro Co., Ltd.

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

Internacionais de Catalogao na Publicao (Cmara Brasileira do Livro, SP, Brasil)


Takahashi, Mana Guia mang de bancos de dados / Mana Takahashi, Shoko Azuma, Trend-pro Co ; [ilustrao] Shoko Azuma ; [traduo Thas Cristina Casson]. -So Paulo : Novatec Editora ; Tokyo : Ohmsha ; So Francisco : No Starch Press, 2009. Ttulo original: The manga guide to databases ISBN 978-85-7522-163-1 1. Banco de dados - Histria em quadrinhos 2. Banco de dados - Gerncia - Histria em quadrinhos 3. SQL (Linguagem de programao para computadores) - Histria em quadrinhos I. Azuma, Shoko. II. Trend-pro Co.. III. Ttulo.

(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 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

162 164 164 165 166 166 167 167 167

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?

Por que precisamos de Bancos de Dados?


r fr a ngo es co s s mo

cloc cloc

el o

ma

Reino

de

Kod*

No faa essa cara,

o que voc queria... Princesa Ruruna!

* 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

A colheita deste ano foi mais abundante que nunca!

Voc deveria estar feliz por estar to ocupada.


Ooh...

Ugh! Aqui est.

se pelo menos desse para otimizar o trabalho...

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

Tenho certeza que um sistema extremamente eficiente.

Agora, vou trabalhar, trabalhar!!

Departamentos de Mercadorias, de Negcios Internacionais e de Exportao, no sabe?

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!

Oh, voc, Cain. O que foi?

Do meu pai?!

chegou um pacote do rei.

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..

Vocs tm que ir?

como rei, Uma das minhas funes mais importante ir ao exterior!


ho-ho-ho

Cain, cuide da Ruruna durante nossa ausncia.

Cuidem-se.
Si...Sim, Vossa
Majestade!

Inacreditvel!
cloc
ag

cloc
lta
cloc

or

a.

..

Me empurraram o trabalho, e foram viajar sem mim. No d pra acreditar!

De

vo

ao

Se acalme, por favor.

T furiosa!

O Rei decidiu viajar porque ele confia em voc, princesa Ruruna.

Bom, um pacote...

uma carta?

Ento, o que ele mandou pra mim?

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

Abra o livro, e use-o para melhorar nosso pas."

Oh, por favor! Vocs no sabem o quanto estou estressada!

Rasg Rasg

Oh, to velho...

qu??

Rasg

No consigo abrir.

Sim, funcionou...

Est trancado.
Hmm...

Essa a chave para o livro?


Estava no envelope...

click!

! Ka-boom

?!

Ham!

Cof! cof!

Aiiieee!!

!!!

o que um banco de dados? 7

hein?

onde estou?

E quem voc? E quem so vocs? ?! Voc est no cas...cas... castelo de Kod.


Zip!

UM FANTASMA?!

i-isso fa la!?

e voa...?

Eu sou Cain! - o ajudante principal da princesa Ruruna.

NO!

O que o modelo E-R?


A princesa Ruruna e o Cain descobriram as condies reais do Reino de Kod utilizando um modelo E-R (Entidade-Relacionamento). Quando voc tentar criar um banco de dados por si mesmo, o primeiro passo determinar as condies dos dados que se est tentando modelar. Utilizando um modelo E-R, tente definir as entidades em seus dados. Uma entidade um objeto ou coisa no mundo real, como frutas ou destino de exportao. Alm disso, um modelo E-R mostra relacionamentos entre entidades. A princesa Ruruna e o Cain fizeram sua anlise pressupondo que existisse um relacionamento chamado vendas entre frutas e destinos de exportao. Frutas so exportadas para mltiplos destinos de exportao, e cada um destes importa diversos tipos de frutas. Por esse motivo, uma anlise para o modelo E-R foi feita presumindo-se que existia um relacionamento chamado de muitos-para-muitos entre frutas e destinos de exportao. O nmero de associaes entre entidades chamado de cardinalidade.

Como analisar um modelo E-R


Como se fariam anlises nos casos abaixo? Pense a respeito.

1 Caso: Relacionamento um-para-um


Um destino de exportao gerencia uma unidade de informao do histrico de exportao. Esse tipo de relacionamento chamado de um-para-um.

74 Captulo 3

2 Caso: Relacionamento um-para-muitos


Vrios serviais servem uma princesa. Os serviais no servem outra princesa, nem mesmo o rei.

Esse tipo de relacionamento chamado de um-para-muitos.

3 Caso: Relacionamento muitos-para-muitos


Frutas so exportadas para vrios destinos. Os destinos de exportao importam diversos tipos de frutas.

Este tipo de relacionamento chamado de muitos-para-muitos.

vamos projetar um banco de dados! 75

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.

vamos projetar um banco de dados! 77

Normalizando uma tabela


A princesa Ruruna e o Cain aprenderam sobre normalizao, o processo de tabular dados do mundo real em um banco de dados relacional. necessrio normalizar dados para gerenciar apropriadamente um banco de dados relacional. Resumimos normalizao aqui (os campos sombreados so chaves primrias).
Forma desnormalizada

Cdigo do Relatrio

Data

Cdigo de Nome de destino de destino de exportao exportao

Cdigo do Produto

Nome do Produto

Preo Quantidade Unitrio

Primeira forma normal

Cdigo do Relatrio Cdigo do Relatrio

Data

Cdigo de destino de exportao Nome do Produto Preo Unitrio

Nome de destino de exportao

Cdigo do Produto

Quantidade

Segunda forma normal

Cdigo do Relatrio

Data

Cdigo de destino de exportao

Nome de destino de exportao

Cdigo do Relatrio

Cdigo do Produto

Quantidade

Cdigo do Produto

Nome do Produto

Preo Unitrio

Terceira forma normal

Cdigo do Relatrio

Data

Cdigo de destino de exportao

Cdigo de destino de exportao

Nome de destino de exportao

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

Nome do Livro Nome do Autor Data de Publicao Nmero de Pginas

Cdigo de Emprstimo

ISBN

Quantidade

vamos projetar um banco de dados! 79

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

Endereo de Aluno Nome do Autor

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

Vendas do Cdigo de Nome do Membro Departamento Departamento

Depto. de Mercadorias

Depto. de Negcios Internacionais

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

Passos para projetar um Banco de Dados


Voc aprendeu como projetar um banco de dados! No entanto, voc tem que fazer mais do que isso. preciso projetar uma estrutura de arquivos detalhada dentro do banco de dados e desenvolver mtodos para importar e exportar dados. De forma geral, pode-se dividir todo o projeto do banco de dados em trs partes: esquemas conceitual, interno e externo. O esquema conceitual refere-se a um mtodo que retrata o mundo real. Em outras palavras, uma forma de determinar a estrutura lgica de um banco de dados. O esquema conceitual realizado levando-se em considerao um entendimento do mundo real baseado no modelo E-R e normalizao de tabelas. O esquema interno refere-se ao banco de dados visto de dentro de um computador. Isso quer dizer que uma forma de determinar a estrutura fsica de um banco de dados. O esquema interno projetado aps a criao de um mtodo para fazer pesquisas no banco de dados rapidamente. O esquema externo refere-se a um banco de dados como ele visto pelos usurios ou aplicativos. O esquema externo projetado aps a criao de dados necessrios para os aplicativos.

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 membro de equipe Nome de membro de equipe Cdigo de departamento

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

Q9 Cdigo de pedido Data Cdigo de cliente

Cdigo de cliente

Nome de cliente

Cdigo de pedido

Cdigo do produto

Quantidade

Cdigo do produto Cdigo de classificao do produto Nome do produto Preo unitrio

Cdigo de classificao do produto

Nome de classificao do produto

vamos projetar um banco de dados! 83

Projetando um BANCO de Dados


Neste captulo, voc aprendeu como criar um banco de dados relacional. No entanto, existem outros mtodos de projeto. Usabilidade e eficincia de um banco de dados dependem de um mtodo de anlise e de projeto. Portanto, importante criar um banco de dados apropriado no estgio de projeto. No estgio de projeto do banco de dados, preciso executar vrias tarefas alm do design. Por exemplo, voc precisa considerar os tipos de dados para usar nas tabela. Voc tambm pode precisar especificar colunas utilizando valores numricos, moedas e sequncias de caracteres. Alm disso, preciso desenvolver um mtodo de pesquisa para possibilitar pesquisas rpidas. s vezes, voc deve criar um design enquanto pensa na organizao fsica de arquivos. E voc tem que controlar quais usurios podem acessar o banco de dados para garantir a segurana. H muitos fatores que devem ser considerados ao projetar um banco de dados. Vamos examinar alguns desses fatores nos captulos seguintes.

84 Captulo 3

5
Vamos usar um Banco de Dados!

O que uma transao?


Tec, tec, tec... bip bip

Tec, tec, tec...

Tec, tec, tec...

Veja, esse e esse so pedidos novos.

est bem, princesa. Vou adicion-los ao banco de dados imediatamente.

Estamos finalmente aprendendo a usar um banco de dados, no?

Ai, d pra aparecer de forma normal?


Tica! Desculpe por isso.

nossa!!

Uiiiii! *
* Plop!

126 Captulo 5

Na verdade, eu tenho que agradecer...

Mas ainda temos muito para aprender.

Por exemplo, me pergunto por que um banco de dados ainda pode operar quando tantos usurios o acessam ao mesmo tempo.

E falando nisso, a questo de segurana tambm me preocupa um pouco.


Bom, para entender melhor essas questes, Aham!

Aparentemente, voc tem algumas preocupaes em relao a seu banco de dados.

Acho que sim.


O ttulo de minha apresentao :

Eu fiz uma pequena pesquisa.

Ah ?

Como um banco de dados pode deixar um grande nmero de usurios acess-lo simultaneamente?

Eu at preparei umas ilustraes para ajudar em seu entendimento!

Uau, que timo. Oh!


Teatro de Banco de Dados

Adoro um bom show!

Agora deixem eu comear.

Clap, clap, clap

Um dia, o Andy e a Becky acessaram o banco de dados ao mesmo tempo.

banco de dados

acesso

Uhuuu!

No banco de dados, o Andy leu a tabela de produto, especificamente as mas.

30 mas Eu vejo 30 agora.

t.

Ele ento acrescentou 10 ao estoque escrevendo uma operao de banco de dados.

Vou adicionar 10.

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!

Isso est certo?

Mas depois dessa operao, o banco de dados mostra o nmero atual de mas como 40.

Vou adicionar 10.

Vou adicionar 10.

Terei 40 ento.

Terei 40 ento.

40 mas

128 Captulo 5

No deveriam ser 50 agora?


O Andy adicionou 10. A Becky adicionou 10.

Isso mesmo.

Ento onde foram parar as 10 mas?


Pense bem!

Deixa eu ver...

O Cain as comeu!
Acusado!

De jeito nenhum! Elas j no estavam l desde o incio!

Eu?!

*
* tadam

**
** tadaaam

Na verdade, nessa sequncia, a Becky no deveria executar qualquer operao de banco de dados enquanto o Andy estiver trabalhando.

no!! banco de dados

adicione 10.

Ento 10 mas nunca iriam desaparecer.

Para permitir que o Andy e a Becky usem o banco de dados ao mesmo tempo,

Ento a questo , como um banco de dados controla as operaes de usurio?

deve haver um mecanismo para impedir inconsistncias e duplicidades como essa.

Ele show!

Vou explicar isso agora!

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.

assim que as mudanas no contedo do banco de dados so registradas.

Logs, ...?

O mais importante so registros de valores antes e depois de uma atualizao no banco de dados.

Humm...

Que foi, Tica?

Ei, ele tambm est se interessando por bancos de dados.

...

Voc quer dizer o Raminess? Tem certeza?

148 Captulo 5

QuanDo um problema ocorrer, primeiro se reinicia o sistema.

O mtodo de recuperao varia dependendo de se a transao foi efetivada ou no.

Depois utilizam-se os logs para recuperar o banco de dados.

BL, Bl, bl

Trans o qu?

Aparentemente, ele no EST ENTENDENDO NADA.. uma pena.

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

Nesse tipo de recuperao, o banco de dados confirma os valores posteriores atualizao.

Dados A
depois de uma operao de atualizao

Esse mtodo de recuperao chamado de avano (rolling forward).

Vamos usar um Banco de Dados! 149

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.

Dados A estado inicial

O sistema recupera os dados e garante que eles estejam livres de inconsistncias.

No estou familiarizado com termos como efetivao (commit ) e transao. HUMMM..


Humm

No entanto, parece que as medidas de segurana do seu banco de dados so boas.

sabe, bancos de dados so robustos! Mesmo quando desastres ocorrem!

ufA

Agora voc percebeu?


150 Captulo 5

Bem, tendo em vista tudo isso, vou perdoar vocs desTa vez.
Ainda bem...

mas

Estou falando srio sobre nosso casamento, entende?

GULP!!

Ruruna...?

Por que no?

Porque eu...

Raminess, sinto muito. No posso aceitar sua proposta.

Amo outra pessoa.

Me pergunto quem seria...

ELE O... Oh!

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?!

Vamos garantir que o Reino de Kod prospere!

Em nome dos cus... no... no faa isso comigo...


Sinto muito.

Voc prefere algum humilde como o Cain?

Por que voc est se desculpando, Cain?

Que o! ep dec

Bem, sim, quer dizer, perdoe-me.

Ah, no, eu no devia, me desculpe...

Fique comigo para sempre, Cain. Sim, sim, Vossa Alteza!

Eles formam um timo casal.

Por que, oh, por qu? 152 Captulo 5

Propriedades das transaes


A pesquisa de Cain mostrou que usurios de um banco de dados podem pesquisar, inserir, atualizar e excluir dados. Um conjunto de operaes bem-sucedidas efetuadas por um nico usurio chamado de transao.

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

Significado Atomicidade Consistncia Isolamento

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

Vamos examinar cada uma dessas propriedades em detalhes.

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.

vamos usar um banco de dados! 155

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 compartilhada Trava compartilhada Trava exclusiva SIM NO

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

TRAVA A TRAVA B LEITURA A LEITURA B ESCRITA A ESCRITA B DESTRAVA A DESTRAVA B

A fase para travamentos

A fase para remover as travas

TRAVA A LEITURA A ESCRITA A DESTRAVA A TRAVA B LEITURA B ESCRITA B DESTRAVA B

Travas foram removidas antes que escritas tenham sido feitas

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?

vamos usar um banco de dados! 157

Outros controles de execuo simultnea

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.

Pode-se conceder os seguintes privilgios (permisses) com comandos SQL.


Privilgios em bancos de Dados

Comando SELECT INSERT UPDATE DELETE ALL

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.

vamos usar um banco de dados! 159

banco de dados

Concede privilgios a diversos usurios utilizando grupos.

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

Usurios podem efetuar processamento nos dados nesta visualizao.

Usurios no podem efetuar processamento no restante dos dados da tabela.

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;

Pesquisar Depto. negcios internacionais Depto. mercadorias Depto. exportao


160 Captulo 5

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.

Vocs progrediram muito...

Com certeza..

Do que voc est falando? Voc vai ficar conosco, no vai, Tica?

Mas h tanta coisa que ainda no aprendemos!

Desculpem, No posso.

Ah, no...

Meu trabalho aqui est feito.

Tenho mais pessoas para visitar.

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?

Os bancos de dados esto em todos os lugares! 189

os a fada d de bancos dados!

Eu s vim me despedir hoje.

tada m!

he-he-he

Mas no pude evitar fazer mais que isso.

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.

no gosto de ver voc to triste, princesa.

Temos que implementar o conhecimento que a Tica nos ofereceu

Ah, sim. Voc est certo.

em um sistema real.

Dias depois...

Est indo bem seu livro sobre bancos de dados, princesa?

Sim!

Voc quer dar uma olhada?

Claro!

To fofinho...

uma boa ideia faz-lo em forma de quadrinhos.

Eu estou facilitando as coisas para todo mundo entender.

E os desenhos do Cain esto excelentes.

Aqui! Esta a capa. E olhe!

Fabuloso!

192 Captulo 6

Est lindo.

Falando do Cain, o rei est esperando por voc para conversar sobre os preparativos do casamento.

...ah, sim.

Meu pai est esperando?

Tudo bem. Eu j estou indo.

Era uma vez, um pequenino pas chamado Reino de Kod.

timo.

Um dia, de dentro de um livro antigo sobre bancos de dados,

no dos a D de cos de Kod n a B o Rein


surgiu uma minscula menina chamada...

FIM