Thiago Hernandes de Souza SQL Avançado e Teoria Relacional Copyright¤ Editora Ciência Moderna Ltda., 2013 Todos os direitos para a língua portuguesa reservados pela EDITORA CIÊNCIA MODERNA LTDA. De acordo com a Lei 9.610, de 19/2/1998, nenhuma parte deste livro poderá ser reproduzida, transmitida e gravada, por qualquer meio eletrônico, mecânico, por fotocópia e outros, sem a prévia autorização, por escrito, da Editora. Editor: Paulo André P. Marques Produção Editorial: Aline Vieira Marques Assistente Editorial: Lorena Fernandes Capa: Carlos Arthur Candal Diagramação: Tatiana Neves Copidesque: Eveline Vieira Machado Várias Marcas Registradas aparecem no decorrer deste livro. Mais do que simplesmente listar esses nomes e informar quem possui seus direitos de exploração, ou ainda imprimir os logotipos das mesmas, o editor declara estar utilizando tais nomes apenas para fins editoriais, em benefício exclusivo do dono da Marca Registrada, sem intenção de infringir as regras de sua utilização. Qualquer semelhança em nomes próprios e acontecimentos será mera coincidência. FICHA CATALOGRÁFICA SOUZA, Thiago Hernandes de. SQL Avançado e Teoria Relacional Rio de Janeiro: Editora Ciência Moderna Ltda., 2013. 1. Programação de Computador – Programas e Dados 2. Ciência da Computação I — Título ISBN: 978-85-399-0428-0 Editora Ciência Moderna Ltda. R. Alice Figueiredo, 46 – Riachuelo Rio de Janeiro, RJ – Brasil CEP: 20.950-150 Tel: (21) 2201-6662/ Fax: (21) 2201-6896 E-MAIL: [email protected] WWW.LCM.COM.BR CDD 005 004 05/13 Introdução Nos dias atuais, uma das preocupações de programadores é o aprendizado de novas tendências tecnológicas para área de TI (Tecnologia da Informação). Muitos desses se deparam constantemente com reciclagens, especializações e foco em linguagens que possam trabalhar fornecendo informações para o banco de dados corporativo em que desenvolve incumbências. Essa é uma realidade! Não obstante, uma parte da TI que tem sido pouco explorada e enfocada para um resultado mais profissional e que flexibilize a implementação a qualquer momento de uma aplicação é o banco de dados. Um banco de dados, juntamente com suas teorias de otimização e normalização, na verdade estão em segundo plano, tendo como objetivo principal o desenvolvimento de trabalhos demandados e a grande ansiedade em colocá-los para “funcionar”. Com isso, bancos de dados mais complexos e que requeiram um maior fluxo de dados e constantes processamentos de procedimentos armazenados e instruções para atualização ou correção acabam se tornando: instáveis, lentos e duvidosos para certas empresas. Além de propícios aos famosos “travamentos” e reinicialização do SGBD. Mesmo assim, pelo desconhecimento e até mesmo pela pouca ênfase na Teoria Relacional, servidores estão cada vez mais sendo escolhidos pela escalabilidade vertical. Esta, que trabalha com máquinas cada vez mais potentes e que, mesmo assim, ao não conseguir atender a demandas, são trocados e configurados constantemente para manutenção operacional com o objetivo de rapidez e confiabilidade parcial. A Teoria Relacional, aliada à escalabilidade horizontal, tende a reduzir gastos com grandes e potentes servidores, devido à característica de distribuir processamentos, demandas e demais tarefas pertinentes a um sistema de computador. IV SQL Avançado e Teoria Relacional Contudo, não basta! Se os mandamentos de Codd e as Formas Normais(FN) não forem estabelecidos corretamente e pré-dispostos a receber adaptações e implementações futuras, o grande responsável em manter, armazenar e disponibilizar os dados para estatísticas e consultas empresariais, o banco de dados, não vai passar de um “sofrimento” e “dor de cabeça” para uma corporação, tendo que conviver com momentos de “pico” e, consequentemente, a famosa “lentidão” de sistemas. Sumário V Sumário Capítulo 1 SQL (Structured Query Language) e Teoria Relacional ........................................... 1 Capítulo 2 Valor e Variável .............................................................................................................. 3 Capítulo 3 Características do Emprego do Banco de Dados .................................................... 5 Capítulo 4 Linguagens do Banco de Dados ................................................................................. 7 Capítulo 5 Interfaces do SGBD ...................................................................................................... 9 Capítulo 6 Ambiente dos Sistemas de Banco de Dados ......................................................... 11 6.1 Módulos Componentes do SGBD ......................................................................... 11 Capítulo 7 Utilitários do Sistema do Banco de Dados ............................................................. 13 Capítulo 8 Arquiteturas para SGBD............................................................................................. 15 VI SQL Avançado e Teoria Relacional Capítulo 9 Projeto de Banco de Dados e afim com o modelo relacional ............................. 17 Capítulo 1 0 10 Modelo Entidade-Relacionamento ........................................................................... 19 10.1 Generalização ....................................................................................................... 19 10.2 Especialização ...................................................................................................... 20 10.3 Relacionamentos ................................................................................................. 20 10.4 Condicionalidade .................................................................................................. 20 10.5 Expressão do Relacionamento .......................................................................... 21 Capítulo 11 Relacionamentos Especiais ...................................................................................... 23 11.1 Relacionamentos entre Múltiplas Entidades .................................................. 23 11.2 Modelo Lógico Relacional .................................................................................. 23 11.2.1 Principais Vantagens da Abordagem Relacional ................................ 24 Capítulo 1 2 12 Regras de Codd ........................................................................................................... 25 12.1 Chaves e Índices .................................................................................................. 26 12.2 Regras de Integridade no Modelo Relacional ................................................. 27 Capítulo 1 3 13 Derivação do Modelo E-R para o Modelo Relacional ............................................ 29 13.1 Conversão do Modelo Conceitual no Modelo Lógico Relacional ................. 29 13.2 Generalizações ..................................................................................................... 31 13.3 Normalização ........................................................................................................ 31 13.4 Sentido de Cima para Baixo (TOP-DOWN) ....................................................... 31 13.5 Sentido de Baixo para Cima (BOTTON-UP) ...................................................... 31 Sumário VII Capítulo 1 4 14 Anomalias .................................................................................................................... 33 Capítulo15 Primeira Forma Normal (1FN) .................................................................................. 35 15.1 Variação Temporal e a Necessidade de Histórico .......................................... 35 15.2 Dependência Funcional ...................................................................................... 36 15.3 Dependência Funcional Total (Completa) e Parcial ....................................... 36 15.4 Dependência Funcional Transitiva .................................................................... 37 Capítulo 1 6 16 Segunda Forma Normal (2FN) .................................................................................. 39 Capítulo 1 7 17 Terceira Forma Normal (3FN) ................................................................................... 41 Capítulo 1 8 18 Cláusulas SQL .............................................................................................................. 43 18.1 Operadores Lógicos ............................................................................................. 43 18.2 Operadores Relacionais ...................................................................................... 44 18.3 Funções de Agregação ........................................................................................ 44 18.4 Sistemas de Banco de Dados que usam SQL ................................................. 44 Capítulo 19 Praticando com SQL ................................................................................................... 47 19.1 Criação das Entidades/Tabelas do Banco de Dados ..................................... 51 19.2 Realizando INSERTs nas Tabelas ...................................................................... 55 19.3 Trabalhando com SELECT ................................................................................... 66 19.4 Trabalhando com JOINs ...................................................................................... 67 19.5 SUBSELECTs .......................................................................................................... 72 VIII SQL Avançado e Teoria Relacional 19.6 Funções de Agregação ......................................................................................... 74 19.7 Operador Relacional LIKE ................................................................................... 77 19.8 >, <, >=, <= e BETWEEN ..................................................................................... 79 19.9 GROUP BY, ORDER BY e HAVING ....................................................................... 80 19.10 WHERE ................................................................................................................ 85 19.11 Processamento Condicional com CASE ......................................................... 86 19.12 Encapsulamento ................................................................................................ 87 Capítulo 20 Aprofundando no SQL ................................................................................................ 89 Capítulo 2 1 21 Otimização ................................................................................................................... 97 21.1 Erros Comuns na Definição das Entidades ...................................................... 98 21.2 Chaves Primárias Compostas ............................................................................ 99 21.3 UPDATE e DELETE .............................................................................................. 100 21.4 Integridade Relacional Referencial ................................................................. 101 21.5 Campos Calculados ........................................................................................... 102 Capítulo 22 Permissões para os Usuários.................................................................................. 107 22.1 Permissão para Todos os Objetos do Banco de Dados “academicosqlavancado” .. 107 22.2 Excluindo as Permissões para Todos os Objetos do Banco de Dados “academicosqlavancado” ........................................................................................... 108 22.3 Permissão por Tabelas ...................................................................................... 108 22.4 Excluindo a Permissão por Tabelas ................................................................ 109 Capítulo 23 Praticando um Pouco Mais .................................................................................... 111 23.1 Exercitando as Instruções SQL com o Banco “estoqueentradassaidas” ...... 118 Sumário IX 23.2 Considerações Finais da Performance com o SQL ...................................... 121 23.2.1 Aperfeiçoando a definição de QUERIES (QUERY) .............................. 123 23.2.2 Dicas para a normalização das entidades e a integridade dos dados ..................................................................................................................... 124 Capítulo 2 4 24 Prática Final Avançada - Banco de Dados Normalizado para uma Empresa de Ônibus .........................................................................................................................127 24.1 Diagrama E-R (Entidade-Relacionamento) Conceitual ................................ 127 24.2 Criando o Banco de Dados ............................................................................... 129 24.2.1 Tabelas ..................................................................................................... 133 24.2.2 Indexes ..................................................................................................... 142 24.2.3 Triggers ..................................................................................................... 144 24.2.4 Functions .................................................................................................. 146 24.2.5 Views ......................................................................................................... 147 24.2.6 Procedures ............................................................................................... 149 Capítulo 1 SQL (Structured Query Language) e Teoria Relacional A teoria relacional é geralmente incrompreendida por diversos programadores de banco de dados ou DBAs (Database Administrators). Com isso, a grande maioria dos profissionais da área de banco de dados não sabe o quanto é importante a compreensão desse tópico. Na verdade, o que muitos profissionais de TI (Tecnologia da Informação) não sabem é que o modelo relacional é o fundamento para a criação de qualquer banco de dados bem estruturado e de alta disponibilidade. Ou seja, é o alicerce para o bom uso da linguagem SQL em qualquer cenário ou metamodelo de dados. Toda parte relacional envolve consistentemente os registros, a diferença entre a relação de valores e a relação de variáveis, a importância de nomes de atributos e as regras cruciais para a integridade de constraints. Constraint é um fator elementar que tem como principal objetivo referenciar as entidades.