This is a file preview. Join to view the original file.
* Banco de Dados I Danielle Filgueiras * * Banco de Dados O que é BD ? Conceitos de BD Histórico de Banco de Dados Composição de um Sistema de BD Linguagens de BD O que é um SGBD ? Objetivos do SGBD Níveis de Abstração de SGBD Usuários do SGBD Interfaces do SGBD Tipos de SGBD SGBD x SGA Modelo de Dados * * Banco de Dados Arquitetura do BD Níveis de Modelagem Modelo Entidade – Relacionamento Extensões do MER Mapeamento MER x DER Modelagem com ferramenta CASE Modelo Relacional Normalização Desnormalização Fragmentação de dados Scripts * * Referências Fundamentals of Database System – Elmarsi/Navathe Introdução a Sistemas de Banco de Dados – C.J.Date Sistemas de Banco de Dados - Sylberchartz * * O que é BD ? * * O que é BD ? * * Conceitos de Banco de Dados * * Conceitos de Banco de Dados (cont.) CHU- 1983 Um banco de dados é um conjunto de arquivos relacionados entre si. DATE - 1985 Um banco de dados é uma coleção de dados operacionais armazenados usados pelos sistemas de aplicação de uma determinada organização. * * Conceitos de Banco de Dados (cont.) ELMARSI & NAVATHE - 1999 Um banco de dados é uma coleção de dados relacionados, não isolados. ENGLES Um banco de dados é uma coleção de dados operacionais usados pelos sistemas aplicativos de uma empresa. * * Conceitos de Bancos de Dados Um BD representa aspectos do mundo real Um BD é projetado, construindo e os dados são nele armazenados com algum propósito Um BD é definido e mantido por uma coleção de programas (SGBD) Sistema de Bando de Dados = Dados + Programas (SBD = BD + SGBD) * * Conceitos de Banco de Dados (cont.) Dado X Informação Informação é um ou mais dados processados, tratados, lapidados Dado: A 4 L 8 L 3 D 5 I 7 E 1 E 8 N Informação: D A N I E L L E 4 8 8 3 8 7 5 Processamento Dado Informação * * Estratégico Conceitos de Banco de Dados (cont.) Tipo de Informação Tático Operacional Projeções Comparações AD-HOC Comparações Resumos Informações detalhadas Informações Precisas Nível de Decisão * * AS = Análise de Dados + Análise de Funções Conceitos de Banco de Dados (cont.) Análise de Dados Uns preferem pela “AD” outros preferem pela “AF”, mas todos já concordam: deve-se fazer Análise de Dados “AD”” Por onde começar ? * * Conceitos de Banco de Dados (cont.) Análise de Dados Ato de Construir modelos conceituais de dados, através de abstrações, a partir do mundo real, buscando simplificação rumo à implementação física Conceitual Lógico Físico Mundo Real * * Conceitos de Banco de Dados (cont.) Análise de Sistemas * * Conceitos de Banco de Dados (cont.) Análise de Dados Projeto Conceitual: Objetivo: Definição do problema, não da solução Dados: eliminação de redundância de dados Funções: Como descrever o problema do cliente ? * * Conceitos de Banco de Dados (cont.) Análise de Dados Projeto Lógico: Dados: O que armazena e qual a estrutura ? Funções: Que informações o sistema deve fornecer ? Que dados o sistema deve receber e de quem ? Que transformações os dado devem sofrer para produzir as informações desejadas ? * * Conceitos de Banco de Dados (cont.) Análise de Dados Projeto Físico: Dados: Como e onde armazenar os dados ? Funções: Como apresentar as saídas ? Como fornecer os dados ao sistema ? Como e quando executar os processos ? * * Conceitos de Banco de Dados (cont.) Projeto de Banco de Dados Projeto Conceitual Modelagem de dados para descrever o problema, normalmente manual. Projeto Lógico Modelagem de dados com ferramenta CASE, não necessariamente precisa ser uma cópia do modelo conceitual. Definição de restrições de integridade. Projeto Físico Definição do armazenamento * * Conceitos de Banco de Dados (cont.) Projeto Conceitual Declaração de Objetivos (DO) Lista de Eventos (LE) Modelo de Entidade relacionamento (MER) * * Conceitos de Banco de Dados (cont.) Declaração de Objetivos (DO) Descrever de forma sucinta e objetiva, em uma página, a finalidade do sistema. Ex: O sistema de Compra e Venda de Mercadorias tem como objetivos automatizar de forma integrada as atividades de: Compras de mercadorias Vendas de mercadorias Controle de estoque Contabilização * * Conceitos de Banco de Dados (cont.) Lista de Eventos Descreve todos os eventos que ocorrem, ocorreram ou poderão ocorrer no sistema, classificando-os em três tipos: Orientados ao fluxo Temporais Controle * * Conceitos de Banco de Dados (cont.) Lista de Eventos Eventos orientados a fluxo de dados Cliente envia pedido Cliente faz pagamento Cliente devolve mercadoria Fornecedor envia mercadorias Fornecedor envia fatura Departamento de vendas define política de vendas * * Conceitos de Banco de Dados (cont.) Lista de Eventos Eventos temporais O relatório de estatística de vendas deve amanhecer pronto às segundas-feiras Os lançamentos contábeis devem estar disponíveis para a Contabilidade no dia 01 de cada mês * * Conceitos de Banco de Dados (cont.) Lista de Eventos Eventos de Controle Ao atingir o ponto de ressuprimento, emitir pedido ao fornecedor Ao exceder o limite de crédito, bloquear o cliente por excesso * * Conceitos de Banco de Dados (cont.) Modelo de Entidade-Relacionamento Entidade: Um objeto do mundo real Atributo: Característica de uma entidade ou relacionamento Relacionamento: Associação entre entidades * * Conceitos de Banco de Dados (cont.) Projeto Lógico Diagrama de Entidade relacionamento (DER) Dicionário de Dados (DD) * * Conceitos de Banco de Dados (cont.) Diagrama de Entidade-Relacionamento Uma evolução do Modelo de Entidade-Relacionamento * * Conceitos de Banco de Dados (cont.) Dicionário de Dados Uma visão organizada por linhas com tabelas e colunas do Diagrama de Entidade-Relacionamento Tabela Clientes * * Conceitos de Banco de Dados BD = Dados + Metadados Um sistema de Banco de Dados contém, além dos dados normais, uma descrição completa desses dados num dicionário de dados (catálogo) Metadados ou Dicionário de Dados Abstração, ou seja, deixar o usuário tratar os dados em alto nível, enquanto o SGBD usa o DD para tratar os dados fisicamente (baixo nível) * * Conceitos de Banco de Dados (cont.) Projeto Físico Projeto Detalhado de: Saídas Arquivos Entradas Controles no sistema Especificação de Programas * * Histórico do Banco de Dados * * Histórico do Banco de Dados (cont.) Desenvolvimento de software Até 1972: Construção Artística de Software (Artesanal) 1972: Programação Estruturada (Dijkstra) Foco: ao nível de programa Objetivos: Melhora a forma Facilita a leitura e manutenção Controla a complexidade Torna a programação mais científica * * Histórico do Banco de Dados (cont.) Desenvolvimento de software 1976: Projeto Estruturado (Yordon / Constantine, Michael Jackson, Warnier – Orr) Foco: ao nível de problema Objetivos: Modularidade Padronização do projeto * * Histórico do Banco de Dados (cont.) Desenvolvimento de software 1977: Análise Estruturada (Chris Ganentine, Tom de Marco) Foco: ao nível de sistema Objetivos: Desenvolver o modelo lógico Obter especificação funcional * * Histórico do Banco de Dados (cont.) Desenvolvimento de software 1979: Análise de Dados Foco: ao nível de empresa Objetivos: Definir requisitos Sistema de informação gerencial Normalização Modelagem de Dados * * Histórico do Banco de Dados (cont.) Desenvolvimento de software Anos 80: Técnicas Automatizadas Geradores de tela, de programa, de aplicação LG4, Query Language, CASE Engenharia da Informação Anos 90: Orientação a Objeto, Cliente / Servidor * * Histórico de Banco de Dados (cont.) Arquivos Convencionais Arquivos convencionais servem a sistemas específicos (isolados) com pouco ou nenhum compartilhamento com outros sistemas difícil obtenção de informações gerenciais Técnicas de bancos de dados ressaltam o dado como um recurso importante na empresa, devendo ser: compartilhado, controlado de forma centralizada para se saber quem onde, e com que finalidade, o dado é usado * * Histórico de Banco de Dados (cont.) Sistemas Isolados Aplicativos independentes, tanto em relação aos dados quanto as saídas Cada aplicação cuida apenas de seus arquivos, ignorando possíveis repetições Possível inconsistência de dados Programas levam em conta distribuição física dos dados nos arquivos: alteração no lay-out do registro significa alteração nos programas * * Histórico de Banco de Dados (cont.) Num_conta, nome, endereço, sld_atual, sld_medio, cpf-cgc, dt_nasc Conta Corrente Cpf-cgc, nome, endereço, num_atual_cotas, dt_nasc Fundos de Investimentos Sistemas Isolados * * Histórico de Banco de Dados (cont.) Sistemas Integrados Dados de uma mesma área são armazenados em um mesmo conjunto de arquivos Um sistema grava saída em arquivo em meio magnético a ser usado como entrada por outro sistema Alteração no layout de arquivos compartilhado implica alteração em programas de mais de um sistema * * Histórico de Banco de Dados (cont.) nome, endereço, cpf-cgc, dt_nasc Conta Corrente num_atual_cotas, dt_nasc Fundos de Investimentos Sistemas Integrados Num_conta, sld_atual, sld_medio, cpd-cgc * * Histórico de Banco de Dados (cont.) Sistemas que usam SGBD Integração de dados não apenas por área, mas por toda a Empresa Dados da empresa compartilhados por todos os sistemas Sistemas “enxergam” os dados independentemente de sua distribuição pelos arquivos Programas de aplicação ignoram detalhes de armazenamento/recuperação de dados Sem redundância de dados não há inconsistência * * Histórico de Banco de Dados (cont.) nome, endereço, cpf-cgc, dt_nasc Conta Corrente num_atual_cotas, cpf-cgc Fundos de Investimentos Sistemas que usam SGBD Num_conta, sld_atual, sld_medio, cpd-cgc SGBD * * Composição de um Sistema de Banco de Dados * * Composição de um Sistema de Banco de Dados Dados: em um ou mais arquivos Metadados: dicionário de dados Software: SGBD (interface entre usuários e dados) Hardware: discos Usuários: DBA, Programadores de Aplicação, Usuários Finais * * Composição de um Sistema de Banco de Dados (cont.) SGBD dá suporte ao acesso dos usuários aos dados esconde do usuário detalhes de armazenamento dos dados Programador de Aplicação codifica programas batch ou on-line para manter o DB * * Composição de um Sistema de Banco de Dados (cont.) DBA - Administrador de BD define: que dados manter no BD estrutura que deve ter o BD estratégias de acesso que esquema de backup adotar procedimentos de autorização como monitorar/sincronizar/reorganizar o BD * * Composição de um Sistema de Banco de Dados (cont.) Usuário Final Acessa o BD via: query language programas de aplicação * * Linguagens de Bando de Dados * * Linguagens de Bancos de Dados DDL - Linguagem de definição de dados (create, drop, alter...) DML - Linguagem de manipulação de dados (insert, delete, update, ...) DCL - Linguagem de controle de acesso aos dados (grant, revoke, ...) QL - Linguagem de consulta (select) * * Linguagens de Bancos de Dados (cont.) SDL - Linguagem de definição de armazenamento VDL - Linguagem de definição de visões * * DDL Usada pelo DBA ou por qualquer projetista do BD Serve para definir os esquemas interno e conceitual quando a arquitetura é de 2 níveis Define a construção do esquema e a descrição do esquema de armazenamento * * SDL Usada para especificar o esquema interno O mapeamento entre os dois esquemas pode ser feito com a SDL ou a DDL * * VDL Usada para especificar as visões e faz o mapeamento com o esquema conceitual * * DML Usada para manipular o banco de dados como inserir, apagar e alterar dados Alto nível ou não procedural Usada no terminal ou dentro de uma linguagem de programação Baixo nível ou procedural Usada dentro de uma linguagem de programação * * O que é um SGBD ? * * O que é um SGBD ? Sistema Gerenciador de Banco de Dados Software que administra o banco de dados e o dicionário de dados, garantindo as restrições de integridade, segurança e consistência do BD. * * O que é um SGBD ? (cont.) Por que usar SGBD ? Abstração de dados Um SGBD permite uma representação conceitual dos dados evitando preocupação com detalhes de armazenamento de dados Suporte a múltiplas visões de dados Cada usuário acessa apenas o que lhe é dado direito de acessar * * O que é um SGBD ? (cont.) Por que usar SGBD ? Controle de redundância Sem repetição de dados não há inconsistência Compartilhamento dos dados Acesso multi-usuário com controle de concorrência garantido Segurança contra acesso indevido Diferentes visões asseguram confidencialidade * * O que é um SGBD ? (cont.) Por que usar SGBD ? Múltiplas Interfaces Acesso via menu, linguagem natural, query language, linguagem de programação Relacionamentos complexos Uma entidade pode se relacionar com outras de forma binária, ternária, ... Restrições de integridade Armazenadas no BD “enxugam” os programas de aplicação * * O que é um SGBD ? (cont.) Por que usar SGBD ? Independência de dados A definição das estruturas de dados é armazenada fora dos programas de aplicação: alteração de estruturas dispensa recompilação de programas Recuperação do BD Feito através de check-points * * Objetivos de um SGBD Controlar redundância Restringir o acesso Armazenamento persistente Inferência do BD usando regras de dedução Fornecer múltiplas interfaces Representação complexa de relacionamentos entre dados * * Objetivos do SGBD (cont.) Garantir restrições de integridade Backup e Recuperação * * Objetivos do SGBD (cont.) Vantagens no uso do SGBD Garantir padrões Redução no tempo de desenvolvimento Flexibilidade Disponibilidade de informações on-line * * Objetivos do SGBD (cont.) Desvantagens no uso do SGBD Alto investimento em hardware, software e treinamento Modelo geral de definição e processamento de dados Excesso de segurança, controle de concorrência, recuperação e funções de integridade * * Níveis de abstração de SGBD * * Níveis de abstração de SGBD Arquitetura de 3 níveis (Visões) Visões de usuário Visão total do BD Visão do armazenamento ... * * Níveis de abstração de SGBD (cont.) Arquitetura de 3 níveis (Esquemas) Sub-esquemas Esquema Conceitual Esquema Físico ... * * Níveis de abstração de SGBD (cont.) Arquitetura de 3 níveis (CODASYL - 71) (Conference on Data System and Language) Visão Conceitual Físico ... * * Níveis de abstração de SGBD (cont.) Arquitetura de 3 níveis (ANSI/SPARC 75) (American. Nacional Standart Institute / System Planning and Requirements Commitee) Externo Conceitual Interno ... * * Níveis de abstração de SGBD (cont.) Nível Externo Visão de um subconjunto do nível conceitual (visão que um aplicativo tem dos dados) Visão que cada usuário tem do sistema Administrador da aplicação: usuário * * Níveis de abstração de SGBD (cont.) Nível Conceitual Visão conceitual e global dos dados, representando o mundo real Consiste de entidades, relacionamentos e atributos Deve envolver todos os objetos do sistema de informação Administrador de dados: AD * * Níveis de abstração de SGBD (cont.) Nível Interno Visão dos diversos registros armazenados em um banco de dados Alteração no nível interno (estrutura de armazenamento) não deve afetar o modelo conceitual Administrador de Banco de Dados: DBA * * Usuários do SGBD * * Usuários do SGBD Administradores do BD Projetistas de BD usuários finais Casual Ingênuos Sofisticados Isolados * * Usuários do SGBD (cont.) Analistas de Sistemas Programadores Desenvolvedores de ferramentas Operadores Pessoal de manutenção * * Interfaces do SGBD Interfaces baseadas em menus Interfaces gráficas Interfaces baseadas em formulários Interfaces de linguagem natural Interfaces para usuários sem experiência Interfaces para DBA * * Utilitários do SGBD Carga de arquivos existentes Backup/Recovery Reorganização de arquivos Monitoramento de performance Software de comunicação * * Tipos de SGBD Hierárquico Rede Relacional Objeto-Relacional Orientado-Objeto Outros * * Tipos de SGBD: Hierárquico Lógico Entidades implementadas como segmentos e relacionamentos como ponteiros Restrições de integridade: exceto a raiz qual registro deve ter um pai Operações: get first, get next, ... * * Tipos de SGBD: Hierárquico Físico (cont.) Dados armazenados usando estruturas embutidas Usuário vê um conjunto de árvores Ligações explicitas via ponteiros no nível físico Navegação através de ponteiros e de responsabilidade do programador Tem dependência de dados * * Tipos de SGBD: Rede Lógico (cont.) Entidades como coleções de registros e relacionamentos como ligações pai-filho Restrições de integridade: relacionamento m:n não pode ser representado por um único tipo de ligação Operações: get, find, store, ... * * Tipos de SGBD: Rede Físico (cont.) Dados organizados através de uma rede de nós e links Usuário vê um conjunto de grafos Ligações explicitas via ponteiros no nível físico Navegação através de ponteiros e de responsabilidade do programador Tem dependência de dados * * Tipos de SGBD: Relacional Lógico (cont.) Entidades como tabelas e relacionamentos como colunas em pares de tabelas Restrições de integridade: componentes de PK não pode ser nulo para cada valor de FK em uma tabela deve existir um valor de PK em outra tabela Operações: seleção, projeção, junção, ... * * Tipos de SGBD: Relacional Físico (cont.) Dados armazenados de forma tabular Usuário vê um conjunto de tabelas Ligações implícitas compartilhando chaves num nível lógico Navegação automática: otimizadores de consultas * * Tipos de SGBD: Classificação de BD (cont.) Plan1 MER RELACIONAL REDE HIERARQUICO Entidade Tabelas Grafos Árvores Entidade Linhas Registro Segmento Relacionamento Implícito (pares de colunas) Explícito (ponteiros) Explícito (ponteiros) Atributos Coluna Campo Campo Plan2 Plan3 * * Tipos de SGBD: Classificação de BD (cont.) A B E C D MER 1 A 3 C 1 4 D 2 2 B 1 5 E 2 3 RELACIONAL * * Tipos de SGBD: Classificação de BD (cont.) A B E C D MER REDE A B E C D * * Tipos de SGBD: Classificação de BD (cont.) A B E C D MER HIERÁRQUICO A B E C D E * * Tipos de SGBD: SGBD’s Hierárquicos (cont.) IMS (IBM) SYSTEM 2000 (SAS) TDMS (BURROUGHS) MARS VI (CDC) RFMS (Univ. Texas) * * Tipos de SGBD: SGBD’s Rede (cont.) IDS II (Bull) DMS II (UNISYS) IDMS ( CULLINAME) DMS 1100 (UNIVAC) DBMS-11 (DEC) TOTAL (CINCON) ADABAS (Software AG) * * Tipos de SGBD: SGBD’s Relacionais (cont.) ORACLE INGRES DB2 INFORMIX RDB PROGRES SQL SERVER * * SGBD x SGA * * SGBD x SGA SGBD - software responsável pela definição e manutenção de um BD SGA - conjunto de rotinas do sistema operacional responsável pelo sistema de arquivos (SA) e respectivos métodos de acesso SA - arquivos convencionais (sequenciais, indexados, randômicos) e suas operações * * SGBD x SGA Máquina Mundo real MER SGBDOO Relacional Rede Hierárquica SGBD Específico SGA tempo * * SGBD X SGA SGBD SGA Alto nível Baixo nível * * Modelo de Dados * * Modelo de Dados É a principal ferramenta para fornecer abstração de dados É um conjunto de conceitos que pode ser usado para descriminar a estrutura do banco de dados Um modelo de dados se compõe de tipos de objetos, relacionamentos entre objetos e restrições de objetos * * Modelo de Dados (Cont.) As operações básicas fazem parte da maioria dos modelos de dados Ferramenta usada para descrever a estrutura do BD O modelo de dados se compõem de: Estruturas de dados Operações Restrições de integridade * * Modelo de Dados (Cont.) Os modelos de dados se dividem em três níveis: Conceitual (alto nível) Lógico Físico (baixo nível) * * Modelo de Dados (Cont.) Conceitual: Descreve dados que estão próximos da forma como muitos usuários vêem os dados, muito próximos do mundo real. Ex: Modelo Semântico e MER Lógico: Nível intermediário que descreve dados ao nível de registro bem próximo da implementação física Ex: Relacional, Rede e Hierárquico * * Modelo de Dados (Cont.) Físico: Descreve as estruturas de dados ao nível de armazenamento físico dos dados * * Lógico Físico Conceitual Fase de Projeto do BD Relacional Rede Hierárquico SGBD específico SGA Semântico/MER Modelo de Dados * * Modelo de Dados: conceitual (cont.) Entidades: representa um objeto do mundo real ou conceito Atributos: propriedades que descrevem uma entidade Relacionamentos: interações entre entidades * * Projetos Funcionários Cod. Projeto Nome Projeto Valor Projeto Cod. Funcionário Nome Funcionário Endereço Funcionário Projetos têm Funcionários Modelo de Dados: Conceitual (cont.) * * Modelo de Dados: Lógico (cont.) São usados na maioria dos DBMS, incluindo os três tipos de modelos usados Relacional Rede hierárquico Representam dados usando estruturas de registros São por vezes chamados de modelos de dados baseados em registros * * Modelo de Dados: Físico (cont.) Descrevem como os dados são armazenados no computador através da representação da informação tal como formato, ordem e acesso aos registros * * Modelo de Dados (cont.) Esquema: Descrição gráfica ou textual do BD conforme o modelo de dados. Ele é especificado durante o projeto do BD e não é modificado com freqüência. Ex: FUNC (mat, nome, sal, dep) DEPA (dep, descr) DEPE (mat, seq, nomd, sexd) Diagrama de Esquema: Mostra alguns aspectos do BD * * Modelo de Dados (cont.) Instância: Descrição de uma abstração do banco de dados. São os dados estão no BD em determinado momento. Pode ser modificado com freqüência. * * Arquitetura do BD * * Arquitetura do BD Usaremos a arquitetura de três níveis O objetivo é separar as aplicações de usuário da parte física do BD Nível interno: armazenamento físico da estrutura do BD. Usa a modelagem de dados físicos e descreve detalhes de armazenamento e caminhos para BD. * * Arquitetura do BD (cont.) Nível conceitual: descreve a estrutura de todo o BD para os usuários. Esconde os detalhes as estruturas de armazenamento físico e se concentra na descrição de entidades, tipos de dados, relacionamentos, operações de usuários e restrições. Um modelo de dados de ato nível ou modelo de implementação pode ser usado neste nível * * Arquitetura do BD (cont.) Nível externo: descreve a parte do BD a um grupo de usuários (visões) e esconde o restante do BD. Um modelo de alto nível ou modelo de implementação é usado neste nível * * Visão externa1 Esquema Interno ... Esquema Conceitual Armazenamento do BD Usuários Finais Visão externa2 * * Arquitetura do BD (cont.) Mapeamento de Dados Processo de transformar requisições de usuários feitas no nível externo aos níveis mais internos e retornar uma resposta ao usuário Divide-se em: Lógico Físico * * Arquitetura do BD (cont.) Independência de Dados Capacidade de fazer modificações no banco de dados em um dos níveis sem afetar o nível mais alto Independência lógica dos dados Independência física dos dados * * Arquitetura do BD (cont.) Independência Lógica Capacidade de modificar o esquema conceitual sem modificar o esquema externo ou programas de aplicação Independência Física Capacidade de modificar o esquema interno sem modificar o esquema externo ou programas de aplicação (Reorganização de arquivos) * * Por que modelagem de dados ? * * Por que modelagem de dados ? Com o crescente uso de SGBD’s em face da necessidade de aplicações cada vez mais complexas, é inevitável esta abordagem Antes, as aplicações usavam um número muito reduzido de arquivos convencionais Sistemas antigos (aplicações isoladas) primavam pela repetição de dados em vários arquivos * * Por que modelagem de dados ? (cont.) Aplicações desenvolvidas com “L4G” dependem de uma rígida administração de dados - cada usuário projeta os dados de seu uso específico sem tomar conhecimento das necessidades dos demais usuários Principal virtude dos modelos de dados: estabilidade * * Por que modelagem de dados ? (cont.) Enquanto modela dados o analista concentra-se nesta tarefa “esquecendo” software e SGBD Os relacionamentos representam a obtenção de respostas a certas necessidades de informação por parte do usuário * * Por que modelagem de dados ? (cont.) Modelo prévio de dados é um excelente instrumento de documentação do mundo real, em tempo de entrevista Levanta e documenta a parte mais estável de uma aplicação: os dados Excelente ferramenta gráfica de projeto conceitual de BD * * MER * * MER Proposto por Peter S. Chen - 1976 Entidade Algo sobre que dados são armazenados Representação abstrata de algo do mundo real Ex: Aluno, cliente, nota fiscal, ... Conjunto de entidades Grupo de entidades com características semelhantes Ex: Alunos, clientes, notas fiscais, ... * * MER (cont.) Relacionamento - associação entre entidades Relacionamento Binário - é um par ordenado (e1, e2), onde e1 e e2 são respectivamente as entidades E1 e E2 * * MER (cont.) Grau de um relacionamento - número de conjuntos de entidades envolvidos no relacionamento Ex: unário, binário. ternário, ... * * MER (cont.) Classe ou cardinalidade dos relacionamentos - razão ente as quantidades com que cada conjunto de entidades participa do relacionamento Ex: Binários - 1:1 1:n m:n Ternários - 1:m:n m:n:p * * MER (cont.) Funcionários Projetos Chefia Hor_trab Dt_posse Dt_aloc Trabalha Departamentos Chefia Chefia * * MER (cont.) Atributos São características de entidades ou de relacionamentos São funções que levam um ponto do conjunto de entidades ou do relacionamento a um ponto de conjuntos de valores F M Funcionários 100 200 Matricula Sexo * * MER (cont.) Relacionamento unário ou recursivo ou auto-relacionamento Pessoas casa 1 1 Marido Esposa Papel da entidade Produtos compõe n m É componente É composto * * MER (cont.) Itens Pedidos Requisições P_R_I m n p - Para um item e para um pedido correspondem n requisições - Para uma requisição e um pedido correspondem m itens - Para uma requisição e um item correspondem p pedidos * * MER (cont.) Professores Disciplinas Alunos P_A_D 1 n m - Um aluno cursa uma disciplina com um professor - Um professor ministra uma disciplina para n alunos - Um professor ministra para um aluno m disciplinas * * MER (cont.) * * MER (cont.) Chave primária Conjunto de atributos que identificam uma única entidade Ex: matrícula, cod_produto, cod_cli, CPF, ... Restrições Só pode haver uma por entidade Não pode ser nula Deve identificar apenas um elemento da entidade Deve ser a menor possível Valor não muda ao longo da vida da entidade * * MER (cont.) Chave estrangeira Conjunto de atributos que fazem associação entre esta entidade e outra que contenha esta chave como primária. Exemplo: Alunos Disciplinas Nota Período Mat Nom Cod Des Cursa Mat Cod * * Extensões do MER Chave candidata - conjunto de atributos que podem ser chave primária Ex: mat, RG, CDD Chave secundária ou alternada - conjunto de atributos que identificam um grupo de entidades Ex: sal, sexo, ... * * Extensões do MER Chave artificial ou surrogate key Número seqüencial sem qualquer semântica, introduzido para ser chave primária de um conjunto de entidades Ex: nud, mat, ... Departamentos Dependentes Funcionários CDD Nmd Mat Nmf Sexo RG Matf Nud Nmd Sal CoDep * * Extensões do MER Como escolher a chave primária Deve ser a menor possível Valor não muda ao longo da vida da entidade Não pode ser NULL (nem parcial, nem totalmente) * * MER (cont.) Entidade Fraca Sua existência depende de outra Seus atributos, em geral, são insuficientes para determinar uma chave primária Funcionários Dependentes Depende 1 n * * MER (cont.) Cardinalidade dos relacionamentos Um relacionamento pode ter a cardinalidade alterada com o tempo ou conforme as necessidades de informação por parte do usuário Ex: Casamento entre pessoas Atual (1h x 1m) ... 1 : 1 Atual (1h x 1Poligamiam) ... 1 : n Histórico de todos os casamentos ... M : n * * MER (cont.) Passos para identificar a cardinalidade Passo 1: Identificar a cardinalidade entre Cliente Pedido Passo 2: Identificar a cardinalidade entre Pedido Cliente Passo 3: Identificar a cardinalidade máxima para cada entidade * * MER (cont.) Cliente Pedido 1 n Passo 1 Cliente Pedido n n Passo 2 Cliente Pedido n n Passo 3 n 1 * * MER (cont.) Itens Lojas Vende n 1 Itens Lojas Vende n m Loja única Abertura de novas lojas Cardinalidade dos casamentos * * MER (cont.) Cardinalidade dos relacionamentos Departamentos Funcionários Aloca 1 n Departamentos Funcionários Aloca m n Qual a alocação atual do funcionário ? Data Um funcionário pode estar lotado simultaneamente em mais de um departamento: devia haver um atributo tipo percentual de dedicação do funcionário ao departamento Em quais departamentos esteve ou está lotado o funcionário ? * * MER (cont.) Análise Sentencial Substantivos (sujeitos/objetos) - entidades Verbos (predicados) - relacionamentos Casas Pessoas Mora Tem Carros * * MER (cont.) Análise Sentencial Adjetivos - atributo de entidades Advérbios - atributo de relacionamentos Pessoas Possui Carros Nome Profissão Nome Profissão Dt_aquisição José, advogado, possui um volks azul desde 1987 * * MER (cont.) Análise Sentencial Entidade tem atributos Ex: nota fiscal tem série, data, número carro tem marca, cor, modelo Atributo de entidade é valor Ex: o número da nota fiscal é 1234 a idade da pessoa é 36 * * Extensões do MER * * Extensões do MER Atributos compostos - formados por mais de um atributo Atributos multivalorados - levam uma entidade a mais de um ponto do conjunto de valores Clientes Fones Endereço Logradouro CEP Apto Num Nome * * Extensões do MER (cont.) Parcialidade / Totalidade Nem todo funcionário gerencia um departamento (parcial) Todo departamento é gerenciado por um funcionário (total) Funcionários Gerencia Departamentos 1 1 * * Extensões do MER (cont.) Relacionamentos totais e parciais Pessoas Nasce Cidades 1 1 Mora Casa 1 1 n 1 Nome Dt_nasc Nome Pop * * Extensões do MER (cont.) Cardinalidade dos relacionamentos com valores máximo e mínimo de entidades que se associam Alunos Cursa Disciplinas (1,6) Nome Mat (0,40) Nota Período Cod Des * * Extensões do MER (cont.) Generalização x Especialização * * Extensões do MER (cont.) Generalização/Especialização As subcategorias (subtipos) herdam os atributos da categoria supertipo. As subcategorias detém a mesma chave primária da categoria supertipo * * Extensões do MER (cont.) Agregação Médicos Prescreve Pacientes Atende m n Exames Consultas Um exame é prescrito por um médico para um paciente * * Extensões do MER (cont.) Agregação - é uma abstração que: permite que relacionamentos sejam tratados como entidades de nível mais alto permite modelar um relacionamento entre uma entidade e um relacionamento (este geralmente m: n) A agregação origina uma nova entidade * * Mapeamento MER x DER * * Mapeamento MER X DER Funcionários Projetos Mat Nmd Cdp Nmp Cdp Dt_aloc Funcionários Projetos Mat Nmd Cdp Nmp Aloca Dt_aloca n 1 Chave primária do lado 1 vai para o lado n Atributos do relacionamento vão para o lado n * * Mapeamento MER X DER (cont.) Alunos Disciplinas Cda Nma Cdd Nmd Cdp Dt_aloc Alunos Disciplinas Cda Nma Cdd Nmd Cursa Período m n Quebra o relacionamento m:n em dois 1:n Atributos do relac. ficam na entidade intermediária Chaves primárias das entidades fazem parte da chave primária da entidade intermediária Nota Al-di Cdd Cda * * Mapeamento MER X DER (cont.) Médicos Hospitais Cdm Nmm Cdm Nmm Médicos Hospitais Cdm Nmm Cdh Nmh Gerencia Dt_posse 1 1 Atributos do relacionamento vão para a entidade que tem participação total no relacionamento Chave primária da entidade do lado parcial vai para a entidade que participa totalmente Cdm Dt_posse * * Mapeamento MER X DER (cont.) Funcionários Mat Nom Chefia Chefe 1 n Subordinado Funcionários Mat Nom Matchefe * * Mapeamento MER X DER (cont.) Peças Cod des Compõe Componentes m n Compostos Funcionários Mat Nom Cd-composto Qtd Compõe Cd-componente Qtd * * Mapeamento MER X DER (cont.) Funcionários Mat Nom Gerencia Dt_posse 1 1 Dt_aloc Departamentos Aloca Cursa Chefia 1 n Cursos n m n 1 Cdd Des Cdct Nmc * * Mapeamento MER X DER (cont.) Funcionários Mat Nom Dt_posse Mat-ger Departamentos Cursos Cdd Des Cdct Nmc Cursa Cdct Mat Dt_cur Mat-ch Chefe Subordinado Dt_aloc Cdd * * Mapeamento MER X DER (cont.) Modelo Físico Modelo Lógico Modelo Conceitual Mundo Real Modelo Relacional ..... DER ..................................... MER...................................... * * Mapeamento MER X DER (cont.) MER - os atributos de uma entidade não devem aparecer em outra DER - os atributos de uma entidade podem aparecer em outra para estabelecer o relacionamento * * Mapeamento MER X DER (cont.) A B R 1 1 AR CA AA CB AB A B AR CA AA CB AB CB A B R 1 N AR CA AA CB AB A B AR CA AA CB AB CA A B R M N AR AA CB AB A B CA AA CB AB CA AB AR CA CB * * Mapeamento MER X DER (cont.) Relacionamento M x N se transforma em 2 relacionamentos 1 : n Funcionários Departamentos Lotações Mat Cdd Cdd Nom Mat Nmd Dat 100 Ari 100 Adm Jan/98 Ven Vendas 200 Ana 100 Ven Mar/99 Pro Produção 300 Eva 200 Ven Out/00 Adm Adminst 300 Pro Mai/01 * * Mapeamento MER X DER (cont.) A C 1 B 1 1 CA AA Tipo A C B CA AA Tipo AC AB CA CA AB AC * * Mapeamento MER X DER (cont.) A C M B N CA AA CC AC R P CB AB A C B CA AA CC AC CB AB R AR CA CC CB AR * * Mapeamento MER X DER (cont.) A C M B N CA AA CC AC R P CB AB AR S Q AS A C B CA AA CC AC CB AB AS R CA CB AR S CA CC CB * * Modelagem com ferramenta CASE * * Modelagem com ferramenta CASE Metodologia IDE1X Desenvolvida pela US Air Force Usada por vários órgãos do governo americano Representa relacionamentos via chaves compartilhadas Usada por grandes empresas de diversas áreas * * Modelagem com ferramenta CASE (cont.) Metodologia IDE1X... Trata chaves como o modelo relacional A chave primária (PK) do lado 1 vai para o lado N Relacionamento não identificador (linha cheia): chave estrangeira fará parte da PK no lado N Relacionamento não identificador (linha pontilhada): chave estrangeira não fará parte da chave primária no lado N * * Modelo Relacional * * Modelo Relacional Baseia-se na teoria dos conjuntos Os elos são implícitos O usuário vê o banco de dados como um conjunto de tabelas Mat Nome Dep 100 Ana Ven 200 Edu Pro 300 Ari Adm 400 Eva |Mar Funcionários Nome da tabela Atributos Tuplas Valor de atributo Domínios * * Modelo Relacional (cont.) Esquema da relação (tabela): funcionários (mat, nom, dep) Relação - subconjunto do produto cartesiano dos domínios R D1 x D2 x ... X Dn 100 200 300 400 Ana Edu Eva Ari Adm Mar Pro Ven Nomes Matrículas Departamentos * * Modelo Relacional (cont.) Uma relação pode ser representada sob forma de tabela, onde cada coluna representa um atributo cada linha representa uma ocorrência de: uma entidade um relacionamento Linha (tupla) é um conjunto de atributos * * Modelo Relacional (cont.) Um relação pode ser representada sob forma de tabela onde: ... Domínio - conjunto de valores do atributo Grau de uma relação - número de atributos da tupla da relação Chave primária - um ou mais atributos que identificam uma única linha Ex: aluna (mat, nom, dt_nasc, sexo) * * Normalização * * Normalização MER Modelo Lógico Arquivos (Top-Down) Mundo Real Modelo Lógico Normalização Arquivos (Botton-Up) Mundo Real * * Normalização (cont.) Simplificação de relações a fim de que os algoritmos de atualização de dados sejam mais simples e mais claros Como sub-produto: eliminação da redundância de dados Resultado das pesquisas de E. F. Codd * * Normalização (cont.) Dependência Funcional A matrícula de um funcionário determina funcionalmente o nome bem como o salário do funcionário Matrícula Nome Matrícula Salário Se A determina funcionalmente B, então B depende funcionalmente de A, logo: Nome depende funcionalmente de matrícula * * Normalização (cont.) Dependência Funcional Func (mat, nome, sal, CPF) Mat Nome Mat Sal Mat CPF CPF Sal CPF Nome CPF Mat Mat CPF Sal Nome * * Normalização (cont.) Dependência Funcional Tarefa (mat, nom, nu_proj, nm_proj, horas-trab) Mat, nu_proj horas-trab Mat nome Mat Nm_proj Horas-trab Nu_proj Nom * * Normalização (cont.) Porque ? Garante a falta de redundância decorrente das DF Garante a falta da anomalia de atualização uma ocorrência de um fato é atualizada, e não todas Garante a falta da anomalia de retirada um fato válido é permitido quando a tupla é deletada * * Normalização (cont.) Existem 6 formas normais Analisaremos aqui apenas as 4 primeiras formas normais e a forma normal de Boyce-Codd * * Normalização (cont.) 1FN Força a organização dos dados como estruturas “planas” sem grupos repetidos Todo componente de toda tupla é um valor atômico Exemplo: Carros(Chassi, nome, cor, ano, cod_marca, descrição_marca) Grupo 1: Dados sobre o carro Grupo 2: Dados sobre a marca Solução Carros(chassi,nome,cor,ano) Marcas(cod_marca,descrição_marca) * * Normalização (cont.) 2FN Todos os atributos não chave devem depender de toda a chave Exemplo: Projeto (Matricula, nome, cod_projeto, nome_projeto, horas_trabalhadas) Matricula nome Cod_projeto nome_projeto Matricula, cod_projeto horas_trabalhadas Solução Projeto(Cod_projeto,nome_projeto) Funcionário(Matricula, nome) Proj_func(Matricula, cod_proj, horas_trabalhadas) * Normalização (cont.) 3FN Não permite dependencia circular Ex: Teatro(cod,nome,peça) Solução Teatro(cod,nome) Cliente(cod, nome, logradouro, CEP) Solução Cliente(cod,nome,logradouro) CEPs(numero, CEP) * * Normalização (cont.) 4FN Reconhece e separa atributos multivalorados constituindo uma chave primária composta Exemplo: Cliente(codigo, nome, telefones) Telefones pode ser fixo, fax, celular, residencial, comercial, etc. Solução Cliente(codigo,nome) Telefones(numero,telefone) * * Normalização (cont.) FNBC Elimina redundâncias e anomalias de atualização e retirada Exemplo: Venda(Cod_produto, valor_unitário, quantidade, valor_total) Valor total é calculado a partir do valor unitário * a quantidade Solução Venda(cod_produto,valor_unitario,quantidade) * * Desnormalização * * Desnormalização Vantagens Melhorar o desempenho das consultas Quando necessita retornar muitas vezes resultados já calculados Criação de históricos Quando já tiver pré-determinado os tipos de valores de uma tabela. * * Desnormalização (cont.) Desvantagens Vulnerabilidade ao surgimento de anomalias quando ocorre manipulação Ameaça a integridade dos dados Quando a consulta precisa de dados separados. Nesse caso, se as tabelas estão desnormalizadas, a leitura das informações não necessárias ocasiona maior tempo de processamento. * * Fragmentação Desnormalização * Scripts Oracle * * Tabela Unidade básica de armazenamento da base de dados, formada por colunas e linhas (tuplas) * * Criando Tabelas SQL> CREATE TABLE depto 2 (depto_num NUMBER(2), 3 depto_nom VARCHAR2(14), 4 depto_loc VARCHAR2(13)); Table created. Criando a tabela depto. Listando a estrutura da tabela criada. SQL> DESCRIBE depto Name Null? Type --------------------------- -------- --------- DEPTO_NUM NOT NULL NUMBER(2) DEPTO_NOME VARCHAR2(14) DEPTO_LOC VARCHAR2(13) * * Descartando uma Tabela Todos os dados e a estrutura da tabela são destruídos. Qualquer transação pendente é encerrada. Todos os índices são descartados. Essa operação não pode ser desfeita. SQL> DROP TABLE depto30; Table dropped. * * Truncando uma Tabela Remove todas as linhas da tabela liberando o espaço ocupado Essa operação não pode ser desfeita SQL> TRUNCATE TABLE departamento; Table truncated. * * Alterando uma Tabela Altera a estrutura de uma tabela Essa operação não pode ser desfeita SQL> Alter TABLE departamento alter column nome varchar(20); Table altered. SQL> Alter TABLE departamento drop column nome; Table altered. SQL> Alter TABLE departamento add nome varchar(20); Table altered. * O Comando INSERT Adicione linhas a uma tabela utilizando o comando INSERT. O comando INSERT insere apenas uma linha por vez. Não esqueça o COMMIT INSERT INTO table [(column [, column...])] VALUES (value [, value...]); * Inserindo Novas Linhas Insira uma nova linha informando os valores para cada coluna da tabela. Liste os valores na mesma ordem das colunas na tabela. Opcionalmente, liste as colunas na cláusula do INSERT. Strings e datas devem ser informando entre aspas simples. SQL> INSERT INTO depto (depto_num, depto_nome, depto_loc) 2 VALUES (50, 'DESENVOLVIMENO', ‘RECIFE'); 1 row created. * SQL> INSERT INTO depto (depto_num, depto_nome ) 2 VALUES (60, ‘REC HUMANOS'); 1 row created. SQL> INSERT INTO depto 2 VALUES (70, ‘JURIDICO', NULL); 1 row created. Inserindo Linhas com Nulls Implicitamente: omita o nome da coluna da lista de colunas. Explicitamente: especifique o valor NULL. * O Comando UPDATE Modificando linhas existentes com o comando UPDATE. Modifique mais de uma linha por vez especificando uma condição na cláusula WHERE. Não esqueça o COMMIT UPDATE table SET column = value [, column = value] [WHERE condition]; * Atualizando linhas em uma tabela Linhas específicas podem ser modificadas utilizando a cláusula WHERE. Todas as linhas da tabela são modificadas se a cláusula WHERE for omitida. SQL> UPDATE emp 2 SET depto_num = 20 3 WHERE enum = 7782; 1 row updated. SQL> UPDATE emp 2 SET depto_num = 20; 14 rows updated. * Eliminando Linhas de uma Tabela Linhas específicas podem ser eliminadas utilizando a cláusula WHERE. Todas as linhas da tabela são eliminadas se a cláusula WHERE for omitida. SQL> DELETE FROM depto 2 WHERE depto_nome = 'DESENVOLVIMENTO'; 1 row deleted. SQL> DELETE FROM depto; 4 rows deleted. * * O Comando SELECT SELECT [DISTINCT] {*, column [alias],...} FROM table; SELECT identifica as colunas FROM identifica as tabelas * * Selecionando linhas SQL> SELECT * 2 FROM depto; * * Definindo Alias para Colunas SQL> SELECT enome AS nome, sal AS salario 2 FROM emp; NOME SALARIO ------------- --------- ... SQL> SELECT enome "Nome", 2 sal*12 “Salario Anual" 3 FROM emp; * * Eliminando Linhas Duplicadas SQL> SELECT DISTINCT depto_num 2 FROM emp; DEPTO_NUM --------- 10 20 30 DISTINCT * Utilizando a Cláusula WHERE SQL> SELECT enome, cargo, depto_num 2 FROM emp 3 WHERE cargo='CAIXA'; ENOME CARGO DEPTO_NUM ---------- --------- --------- RONALDO CAIXA 30 MANUEL CAIXA 20 PAULO CAIXA 20 LUCIANO CAIXA 10 * Operadores de Comparação Operador = > >= < <= <> Significado Igual a Maior que Maior ou igual a Menor que Menor ou igual a Diferente de * Outros Operadores Operador BETWEEN ...AND... IN(lista) LIKE IS NULL Significado Entre dois valores (inclusive) Satisfaz uma lista de valores Satisfaz um padrão de caracteres É um valor nulo (null) * Operador BETWEEN ENOME SAL ---------- --------- MARIA 1250 SERGIO 1500 MATHEUS 1250 PAULO 1100 LUCIANO 1300 SQL> SELECT enome, sal 2 FROM emp 3 WHERE sal BETWEEN 1000 AND 1500; * Operador IN SQL> SELECT enum, enome, sal, ger 2 FROM emp 3 WHERE ger IN (7902, 7566, 7788); ENUM ENOME SAL GER --------- ---------- --------- --------- 7902 JOSE 3000 7566 7369 MANUEL 800 7902 7788 FABIO 3000 7566 7876 PAULO 1100 7788 * SQL> SELECT enome 2 FROM emp 3 WHERE enome LIKE ‘M%'; Operador LIKE Utilize o operador LIKE para realizar pesquisas por padrões (wildcards). % substitui zero ou mais caracteres _ substitui um único caracter * SQL> SELECT enome, ger 2 FROM emp 3 WHERE ger IS NULL; ENOME GER ---------- --------- CARLOS Operador IS NULL Testando valores nulos (null) * Operadores Lógicos Operador AND OR NOT Significado Retorna TRUE se a condição de ambos os componentes for TRUE Retorna TRUE se a condição de um dos componentes for TRUE Retorna TRUE se a condição for FALSE (vise-versa) * Operador NOT SQL> SELECT enome, cargo 2 FROM emp 3 WHERE cargo NOT IN('CAIXA','GERENTE','ANALISTA'); ENOME CARGO ---------- --------- CARLOS PRESIDENTE MARIA VENDEDOR CELSO VENDEDOR SERGIO VENDEDOR MATHEUS VENDEDOR * Cláusula ORDER BY SQL> SELECT enome, cargo, depto_num, dtinicio 2 FROM emp 3 ORDER BY dtinicio DESC; ENOME CARGO DEPTO_NUM DTINICIO ---------- --------- --------- --------- PAULO CAIXA 20 12-JAN-83 FABIO ANALISTA 20 09-DEC-82 LUCIANO CAIXA 10 23-JAN-82 RONALDO CAIXA 30 03-DEC-81 JOSE ANALISTA 20 03-DEC-81 CARLOS PRESIDENTE 10 17-NOV-81 MARIA VENDEDOR 30 28-SEP-81 ... 14 rows selected. * Joins Utilize uma junção para consultar dados de mais de uma tabela. Especifique a condição de junção na cláusula WHERE. Informe o nome da tabela junto com o nome da coluna, se tabelas diferentes possuírem colunas com os mesmos nomes. SELECT table1.column, table2.column FROM table1, table2 WHERE table1.column1 = table2.column2; * Criando Alias para Tabelas SQL> SELECT emp.enum, emp.enome, emp.depto_num, 2 depto.depto_num, depto.depto_loc 3 FROM emp, depto 4 WHERE emp.depto_num = depto.depto_num; SQL> SELECT e.enum, e.enome, e.depto_num, 2 d.depto_num, d.depto_loc 3 FROM emp e, depto d 4 WHERE e.depto_num = d.depto_num; * O que são Funções de Grupo? Funções de grupo operam em conjuntos de linhas, produzindo um resultado por grupo. EMP “o maior salário da tabela EMP” DEPTO_NUM SAL --------- --------- 10 2450 10 5000 10 1300 20 800 20 1100 20 3000 20 3000 20 2975 30 1600 30 2850 30 1250 30 950 30 1500 30 1250 MAX(SAL) --------- 5000 * Tipos de Funções de Grupo AVG (média) COUNT (contagem) MAX (máximo) MIN (mínimo) STDDEV SUM (soma) VARIANCE (variação) * Utilizando Funções de Grupo SELECT column, group_function(column) FROM table [WHERE condition] [ORDER BY column]; * AVG(SAL) MAX(SAL) MIN(SAL) SUM(SAL) -------- --------- --------- --------- 1400 1600 1250 5600 SQL> SELECT AVG(sal), MAX(sal), 2 MIN(sal), SUM(sal) 3 FROM emp 4 WHERE cargo LIKE ‘VEND%'; Funções AVG e SUM Utilize o AVG e SUM apenas para dados numéricos * SQL> SELECT MIN(dtinicio), MAX(dtinicio) 2 FROM emp; MIN(DTINI MAX(DTINI --------- --------- 17-DEZ-80 12-JAN-83 Funções MIN e MAX Utilize MIN e MAX para qualquer tipo de dado * COUNT(*) --------- 6 SQL> SELECT COUNT(*) 2 FROM emp 3 WHERE depto_num = 30; Função COUNT COUNT(*) retorna o número de linhas na tabela * COUNT(COMIS) ------------ 4 SQL> SELECT COUNT(comis) 2 FROM emp 3 WHERE depto_num = 30; Função COUNT COUNT(coluna) retorna o número de linhas não nulas da tabela * Criando Grupos de Dados EMP “média salarial por departamento” DEPTO_NUM SAL --------- --------- 10 2450 10 5000 10 1300 20 800 20 1100 20 3000 20 3000 20 2975 30 1600 30 2850 30 1250 30 950 30 1500 30 1250 DEPTO_NUM AVG(SAL) --------- --------- 10 2916.6667 20 2175 30 1566.6667 * Criando Grupos de Dados: A Cláusula GROUP BY Divida as linhas de uma tabela em pequenos grupos usando a cláusula GROUP BY. SELECT column, group_function(column) FROM table [WHERE condition] [GROUP BY group_by_expression] [ORDER BY column]; * SQL> SELECT AVG(sal) 2 FROM emp 3 GROUP BY depto_num; Colunas utilizadas em funções de grupo não precisam estar listadas no GROUP BY. AVG(SAL) --------- 2916.6667 2175 1566.6667 A Cláusula GROUP BY * SQL> SELECT depto_num, cargo, sum(sal) 2 FROM emp 3 GROUP BY depto_num, cargo; Utilizando GROUP BY em Múltiplas Colunas DEPTO_NUM CARGO SUM(SAL) --------- --------- --------- 10 CAIXA 1300 10 GERENTE 2450 10 PRESIDENTE 5000 20 ANALISTA 6000 20 CAIXA 1900 ... 9 rows selected. * Subqueries A subquery (inner query) geralmente é executada antes da consulta principal. O resultado da subquery é, então, avaliado pelo da query principal (outer query). SELECT select_list FROM table WHERE expr operator (SELECT select_list FROM table); * SQL> SELECT enome 2 FROM emp 3 WHERE sal > 4 (SELECT sal 5 FROM emp 6 WHERE enum=7566); Utilizando uma Subquery ENOME ---------- CARLOS JOSE FABIO * Regras para Subqueries Utilize subqueries entre parênteses. As subqueries vêem sempre à direita do operador de comparação. Não utiliza a cláusula ORDER BY em subqueries. Uma subquery retorna uam tabela sobre a qual pode-se realizar qualquer uma das operações vista anteriormente. * * Stored Procedures Procedimantos que permanecem armazenados no banco, de forma compilada. Servem para executar alguma computação quando invocados * * Sintaxe CREATE OR REPLACE PROCEDURE NOME ( NOME TIPO[,NOME TIPO] ) IS BEGIN [DECLARE] <CORPO> COMMIT; EXCEPTION WHEN OTHERS THEN <CORPO> END NOME; / * * Sintaxe (exemplo) CREATE OR REPLACE PROCEDURE AJUSTE (VALOR REAL, CAD INTEGER) IS BEGIN UPDATE acf_EMPREGADO SET salario=salario + salario*VALOR WHERE cadastro=CAD; COMMIT; EXCEPTION WHEN OTHERS THEN INSERT INTO acf_ERROS values(SYSDATE,'Erro na execucao de ajuste'); END AJUSTE; / * * Execução EXECUTE AJUSTE(0.1, 21); O procedimento é executado. Caso algum erro ocorra, então a tabela de erros será atualizada. * * Exemplo CREATE OR REPLACE PROCEDURE Lista_Func (codDepto llma_funcionarios.depto_func%TYPE) IS BEGIN DECLARE --cursor para guardar os funcionarios CURSOR c_diario_func is SELECT llma_funcionarios.cod_func, llma_funcionarios.nome_func, FROM llma_funcionarios WHERE depto_func = codDepto; --declaracao das variaveis do cursor v_cod_func llma_funcionarios.cod_func%TYPE; v_nome_func llma_funcionarios.nome_func%TYPE; * * Procedures Prodecures não retornam valores A partir de uma procedure pode-se chamar outras procedures Procedures são salvas em um arquivo .sql e compiladas no Oracle com o comando @caminho_completo do SQL Plus Caso ocorra algum erro de compilação a procedure não funciona corretamente Erros de compilação podem ser vistos com o comando show_errors do SQL Plus. * * Triggers Procedimantos especiais guardados no banco de forma compilada Acionados automaticamente pelo banco quando sua condição de ativação for veradeira * * Sintaxe CREATE OR REPLACE TRIGGER NOME CONDICAO DE ATIVACAO BEGIN <CORPO> END; / A CONDICAO DE ATIVACAO pode ser montada a partir de expressões lógicas: BEFORE DELETE ON NOME_TABELA ou AFTER DELETE OR INSERT OR UPDATE ON NOME_TABELA * * Sintaxe (exemplo) CREATE OR REPLACE TRIGGER LOG_FUNCIONARIO BEFORE DELETE OR INSERT OR UPDATE ON acf_EMPREGADO BEGIN INSERT INTO acf_LOG_funcionario VALUES(SYSDATE,'Tabela modificada'); END; / * * Triggers Triggers são salvas em um arquivo .sql e compiladas no Oracle com o comando @caminho_completo do SQL Plus Caso ocorra algum erro de compilação a trigger não funciona corretamente Erros de compilação podem ser vistos com o comando show_errors do SQL Plus. Gatilhos podem ser utilizados para implementar regras de negócio * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Database Objects An Oracle database can contain multiple data structures. Each structure should be outlined in the database design so that it can be created during the build stage of database development. Table: Stores data View: Subset of data from one or more tables Sequence: Generates primary key values Index: Improves the performance of some queries Synonym: Gives alternative names to objects Oracle8 Table Structures Tables can be created at any time, even while users are using the database. You do not need to specify the size of any table. The size is ultimately defined by the amount of space allocated to the database as a whole. It is important, however, to estimate how much space a table will use over time. Table structure can be modified online. Note: More database objects are available but are not covered in this course. Class Management Note Tables can have up to 1000 columns and must conform to standard database object naming conventions. Column definitions can be omitted when using the AS subquery clause. Tables are created without data unless a query is specified. Rows are usually added by using INSERT statements. * Creating Tables The example above creates the DEPT table, with three columns¾namely, DEPTNO, DNAME, and LOC. It further confirms the creation of the table by issuing the DESCRIBE command. Since creating a table is a DDL statement, an automatic commit takes place when this statement is executed. * Dropping a Table The DROP TABLE statement removes the definition of an Oracle8 table. When you drop a table, the database loses all the data in the table and all the indexes associated with it. Syntax where: table is the name of the table. Guidelines All data is deleted from the table. Any views or synonyms will remain but are invalid. Any pending transactions are committed. Only the creator of the table or a user with the DROP ANY TABLE privilege can remove a table. The DROP TABLE statement, once executed, is irreversible. The Oracle Server does not question the action when you issue the DROP TABLE statement. If you own that table or have a high-level privilege, then the table is immediately removed. All DDL statements issue a commit, therefore making the transaction permanent. DROP TABLE table; * Truncating a Table Another DDL statement is the TRUNCATE TABLE statement, which is used to remove all rows from a table and to release the storage space used by that table. When using the TRUNCATE TABLE statement, you cannot rollback row removal. Syntax TRUNCATE TABLE table; where: table is the name of the table. You must be the owner of the table or have DELETE TABLE system privileges to truncate a table. The DELETE statement can also remove all rows from a table, but it does not release storage space. * Truncating a Table Another DDL statement is the TRUNCATE TABLE statement, which is used to remove all rows from a table and to release the storage space used by that table. When using the TRUNCATE TABLE statement, you cannot rollback row removal. Syntax TRUNCATE TABLE table; where: table is the name of the table. You must be the owner of the table or have DELETE TABLE system privileges to truncate a table. The DELETE statement can also remove all rows from a table, but it does not release storage space. * Adding a New Row to a Table (continued) You can add new rows to a table by issuing the INSERT statement. In the syntax: table is the name of the table. column is the name of the column in the table to populate. value is the corresponding value for the column. Note: This statement with the VALUES clause adds only one row at a time to a table. * Adding a New Row to a Table (continued) Because you can insert a new row that contains values for each column, the column list is not required in the INSERT clause. However, if you do not use the column list, the values must be listed according to the default order of the columns in the table. SQL> DESCRIBE dept Name Null? Type ------------------------------- -------- ------------ DEPTNO NOT NULL NUMBER(2) DNAME VARCHAR2(14) LOC VARCHAR2(13) For clarity, use the column list in the INSERT clause. Enclose character and date values within single quotation marks; do not enclose numeric values within single quotation marks. * Methods for Inserting Null Values Be sure that the targeted column allows null values by verifying the Null? status from the SQL*Plus DESCRIBE command. The Oracle Server automatically enforces all datatypes, data ranges, and data integrity constraints. Any column that is not listed explicitly obtains a null value in the new row. Class Management Note Common errors that can occur during user input: Mandatory value missing for a NOT NULL column Duplicate value violates uniqueness constraint Foreign key constraint violated CHECK constraint violated Datatype mismatch Value too wide to fit in column * Updating Rows You can modify existing rows by using the UPDATE statement. In the above syntax: table is the name of the table. column is the name of the column in the table to populate. value is the corresponding value or subquery for the column. condition identifies the rows to be updated and is composed of column names expressions, constants, subqueries, and comparison operators. Confirm the update operation by querying the table to display the updated rows. For more information, see Oracle Server SQL Reference, Release 8.0, “UPDATE.” Note: In general, use the primary key to identify a single row. Using other columns may unexpectedly cause several rows to be updated. For example, identifying a single row in the EMP table by name is dangerous because more than one employee may have the same name. Class Management Note Demo: l9sel.sql, l9upd.sql Purpose: To illustrate displaying the initial state of data, and performing updates and viewing results. * Updating Rows (continued) The UPDATE statement modifies specific row(s), if the WHERE clause is specified. The example above transfers employee 7782 (Clark) to department 20. If you omit the WHERE clause, all the rows in the table are modified. Note: The EMPLOYEE table has the same data as the EMP table. SQL> SELECT ename, deptno 2 FROM employee; ENAME DEPTNO ---------- --------- KING 20 BLAKE 20 CLARK 20 JONES 20 MARTIN 20 ALLEN 20 TURNER 20 ... 14 rows selected. * Deleting Rows (continued) You can delete specific row(s) by specifying the WHERE clause in the DELETE statement. The example above deletes the DEVELOPMENT department from the DEPARTMENT table. You can confirm the delete operation by displaying the deleted rows by using the SELECT statement. Example Remove all employees who started after January 1, 1997. If you omit the WHERE clause, all rows in the table will be deleted. The second example on the slide deletes all the rows from the DEPARTMENT table because no WHERE clause had been specified. Note: The DEPARTMENT table has the same data as the DEPT table. SQL> SELECT * 2 FROM department 3 WHERE dname = 'DEVELOPMENT'; no rows selected. SQL> DELETE FROM emp 2 WHERE hiredate > TO_DATE('01.01.97', 'DD.MM.YY'); 1 row deleted. * Basic SELECT Statement In its simplest form, a SELECT statement must include the following: A SELECT clause, which specifies the columns to be displayed A FROM clause, which specifies the table containing the columns listed in the SELECT clause In the syntax: SELECT is a list of one or more columns. DISTINCT suppresses duplicates. * selects all columns. column selects the named column. alias gives selected columns different headings. FROM table specifies the table containing the columns. Note: Throughout this course, the words: keyword, clause, and statement would be used. A keyword refers to an individual SQL element. For example, SELECT and FROM are keywords. A clause is a part of an SQL statement. For example, SELECT empno, ename, ... is a clause. A statement is a combination of two or more clauses. For example, SELECT * FROM emp is a SQL statement. * Selecting All Columns, All Rows You can display all columns of data in a table by following the SELECT keyword with an asterisk (*). In the example on the slide, the department table contains three columns: DEPTNO, DNAME, and LOC. The table contains four rows, one for each department. You can also display all columns in the table by listing all the columns after the SELECT keyword. For example, the following SQL statement, like the example on the slide, displays all columns and all rows of the DEPT table: Class Management Note Let the students know that details of all the tables are given in Appendix B. SQL> SELECT deptno, dname, loc 2 FROM dept; * Column Aliases (continued) The first example displays the name and the monthly salary of all the employees. Notice that the optional AS keyword has been used before the column alias name. The result of the query would be the same whether the AS keyword is used or not. Also notice that the SQL statement has the column aliases, name and salary in lowercase, whereas the result of the query displays the column headings in uppercase. As mentioned in the last slide, column headings appear in uppercase by default. The second example displays the name and annual salary of all the employees. Because Annual Salary contains spaces, it has been enclosed in double quotation marks. Notice that the column heading in the output is exactly the same as the column alias. Class Management Note Point out the optional AS keyword in the first example and the double quotation marks in the second example. Also show that the aliases always appear in uppercase, unless enclosed within double quotation marks. * Duplicate Rows (continued) To eliminate duplicate rows in the result, include the DISTINCT keyword in the SELECT clause immediately after the SELECT keyword. In the example above, the EMP table actually contains fourteen rows but there are only three unique department numbers in the table. You can specify multiple columns after the DISTINCT qualifier. The DISTINCT qualifier affects all the selected columns, and the result represents a distinct combination of the columns. DEPTNO JOB ------ --------- 10 CLERK 10 MANAGER 10 PRESIDENT 20 ANALYST ... 9 rows selected. SQL> SELECT DISTINCT deptno, job 2 FROM emp; * Using the WHERE clause In the example, the SELECT statement retrieves the name, job title, and the department number of all employees whose job title is CLERK. Note that the job title CLERK has been specified in uppercase to ensure that the match is made with the job column in the EMP table. Character strings are case sensitive. Class Management Note Snippet: Processing a Query * Comparison Operators Comparison operators are used in conditions that compare one expression to another. They are used in the WHERE clause in the following format: Syntax … WHERE expr operator value Examples … WHERE hiredate='01-JAN-95' … WHERE sal>=1500 … WHERE ename='SMITH' Class Management Note Remind students that the expr cannot be an alias. * * The BETWEEN Operator You can display rows based on a range of values using the BETWEEN operator. The range that you specify contains a lower range and an upper range. The SELECT statement above returns rows from the EMP table for any employee whose salary is between $1000 and $1500. Values specified with the BETWEEN operator are inclusive. You must specify the lower limit first. Class Management Note Emphasize that the values specified with the BETWEEN operator in the example are inclusive. Point out that Turner who earns $1500 (higher limit) is included in the output. Demo: l2betw.sql Purpose: To illustrate using the BETWEEN operator. * The IN Operator To test for values in a specified list, use the IN operator. The above example displays employee number, name, salary, and manager’s employee number of all the employees whose manager’s employee number is 7902, 7566, or 7788. The IN operator can be used with any datatype. The following example returns a row from the EMP table for any employee whose name is included in the list of names in the WHERE clause. SQL> SELECT empno, ename, mgr, deptno 2 FROM emp 3 WHERE ename IN ('FORD' , 'ALLEN'); If characters or dates are used in the list, they must be enclosed in single quotation marks (''). Class Management Note Demo: l2in.sql Purpose: To illustrate using the IN operator. * The LIKE Operator You may not always know the exact value to search for. You can select rows that match a character pattern by using the LIKE operator. The character pattern matching operation is referred to as a wildcard search. Two symbols can be used to construct the search string. The SELECT statement above returns the employee name from the EMP table for any employee whose name begins with an “S.” Note the uppercase “S.” Names beginning with an “s” will not be returned. The LIKE operator can be used as a shortcut for some BETWEEN comparisons. The following example displays names and hiredates of all employees who joined between January 1981 and December 1981. SQL> SELECT ename, hiredate 2 FROM emp 3 WHERE hiredate LIKE '%81'; * The IS NULL Operator The IS NULL operator tests for values that are null. A null value means the value is unavailable, unassigned, unknown, or inapplicable. Therefore, you cannot test with (=) because a null value cannot be equal or unequal to any value. The example above retrieves the name and manager of all employees who do not have a manager. For example, to display name, job title, and commission for all employees who are not entitled to get a commission, use the following SQL statement: ENAME JOB COMM -------- ----------- ------ KING PRESIDENT BLAKE MANAGER CLARK MANAGER ... * Logical Operators A logical operator combines the result of two component conditions to produce a single result based on them or to invert the result of a single condition. Three logical operators are available in SQL: AND OR NOT All the examples so far have specified only one condition in the WHERE clause. You can use several conditions in one WHERE clause using the AND and OR operators. * The NOT Operator The example above displays name and job title of all the employees whose job title is not CLERK, MANAGER, or ANALYST. NOT Truth Table The following table shows the result of applying the NOT operator to a condition: Note: The NOT operator can also be used with other SQL operators such as BETWEEN, LIKE, and NULL. ... WHERE NOT job IN ('CLERK', 'ANALYST') ... WHERE sal NOT BETWEEN 1000 AND 1500 ... WHERE ename NOT LIKE '%A%' ... WHERE comm IS NOT NULL * Default Ordering of Data The default sort order is ascending: Numeric values are displayed with the lowest values first¾for example, 1–999. Date values are displayed with the earliest value first¾for example, 01-JAN-92 before 01-JAN-95. Character values are displayed in alphabetical order¾for example, A first and Z last. Null values are displayed last for ascending sequences and first for descending sequences. Reversing the Default Order To reverse the order in which rows are displayed, specify the keyword DESC after the column name in the ORDER BY clause. The example above sorts the result by the most recently hired employee. * Defining Joins When data from more than one table in the database is required, a join condition is used. Rows in one table can be joined to rows in another table according to common values existing in corresponding columns, that is usually, primary and foreign key columns. To display data from two or more related tables, write a simple join condition in the WHERE clause. In the syntax: table.column denotes the table and column from which data is retrieved. table1.column1 = is the condition that joins (or relates) the tables together. table2.column2 Guidelines When writing a SELECT statement that joins tables, precede the column name with the table name for clarity and to enhance database access. If the same column name appears in more than one table, the column name must be prefixed with the table name. To join n tables together, you need a minimum of (n-1) join conditions. Therefore, to join four tables, a minimum of three joins are required. This rule may not apply if your table has a concatenated primary key, in which case more than one column is required to uniquely identify each row. For more information, see Oracle Server SQL Reference Manual, Release 8.0, “SELECT.” * * Group Functions Unlike single-row functions, group functions operate on sets of rows to give one result per group. These sets may be the whole table or the table split into groups. * * Guidelines for Using Group Functions DISTINCT makes the function consider only nonduplicate values; ALL makes it consider every value including duplicates. The default is ALL and therefore does not need to be specified. The datatypes for the arguments may be CHAR, VARCHAR2, NUMBER, or DATE where expr is listed. All group functions except COUNT(*) ignore null values. To substitute a value for null values, use the NVL function. Class Management Note Stress the use of DISTINCT and group functions ignoring null values. ALL is the default and is very rarely specified. * Group Functions You can use AVG, SUM, MIN, and MAX functions against columns that can store numeric data. The example above displays the average, highest, lowest, and sum of monthly salaries for all salesmen. * Group Functions (continued) You can use MAX and MIN functions for any datatype. The example above displays the most junior and most senior employee. The example below displays the employee name that is first and the employee name that is the last in an alphabetized list of all employees. Note: AVG, SUM, VARIANCE, and STDDEV functions can be used only with numeric datatypes. SQL> SELECT MIN(ename), MAX(ename) 2 FROM emp; MIN(ENAME) MAX(ENAME) ---------- ---------- ADAMS WARD * The COUNT Function The COUNT function has two formats: COUNT(*) COUNT(expr) COUNT(*) returns the number of rows in a table, including duplicate rows and rows containing null values. In contrast, COUNT(expr) returns the number of nonnull rows in the column identified by expr. The example above displays the number of employees in department 30. Class Management Note Demo: l5count1.sql, l5count2.sql Purpose: To illustrate using the COUNT(*) and COUNT(expr) functions. * SQL> SELECT COUNT(deptno) 2 FROM emp; COUNT(DEPTNO) ------------- 14 COUNT(DISTINCT(DEPTNO)) ----------------------- 3 * Groups of Data Until now, all group functions have treated the table as one large group of information. At times, you need to divide the table of information into smaller groups. This can be done by using the GROUP BY clause. * The GROUP BY Clause You can use the GROUP BY clause to divide the rows in a table into groups. You can then use the group functions to return summary information for each group. In the syntax: group_by_expression specifies columns whose values determine the basis for grouping rows. Guidelines If you include a group function in a SELECT clause, you cannot select individual results as well unless the individual column appears in the GROUP BY clause. You will receive an error message if you fail to include the column list. Using a WHERE clause, you can preexclude rows before dividing them into groups. You must include the columns in the GROUP BY clause. You cannot use the column alias in the GROUP BY clause. By default, rows are sorted by ascending order of the columns included in the GROUP BY list. You can override this by using the ORDER BY clause. * The GROUP BY Clause (continued) The GROUP BY column does not have to be in the SELECT clause. For example, the above SELECT statement displays the average salaries for each department without displaying the respective department numbers. However, without the department numbers, the results do not look meaningful. You can use the group function in the ORDER BY clause. Class Management Note Demonstrate the query with and without the DEPTNO in the SELECT statement. DEPTNO AVG(SAL) ---------- ------------ 30 1566.6667 20 2175 10 2916.6667 * Groups Within Groups (continued) You can return summary results for groups and subgroups by listing more than one GROUP BY column. You can determine the default sort order of the results by the order of the columns in the GROUP BY clause. Here is how the SELECT statement above, containing a GROUP BY clause, is evaluated: The SELECT clause specifies the column to be retrieved: Department number in the EMP table Job title in the EMP table The sum of all the salaries in the group you specified in the GROUP BY clause The FROM clause specifies the tables that the database must access: the EMP table. The GROUP BY clause specifies how you must group the rows: First, the rows are grouped by department number. Second, within the department number groups, the rows are grouped by job title. So the SUM function is being applied to the salary column for all job titles within each department number group. * Subqueries A subquery is a SELECT statement that is embedded in a clause of another SELECT statement. You can build powerful statements out of simple ones by using subqueries. They can be very useful when you need to select rows from a table with a condition that depends on the data in the table itself. You can place the subquery in a number of SQL clauses: WHERE clause HAVING clause FROM clause In the syntax: operator includes a comparison operator such as >, =, or IN Note: Comparison operators fall into two classes: single-row operators (>, =, >=, <, <>, <=) and multiple-row operators (IN, ANY, ALL). The subquery is often referred to as a nested SELECT, sub-SELECT, or inner SELECT statement. The subquery generally executes first, and its output is used to complete the query condition for the main or outer query. Class Management Note Additionally, subqueries can be placed in the CREATE VIEW statement, CREATE TABLE statement, UPDATE clause, INTO clause of an INSERT statement, and SET clause of an UPDATE statement. * Using a Subquery In the slide, the inner query determines the salary of employee 7566. The outer query takes the result of the inner query and uses this result to display all the employees who earn more than this amount. Class Management Note Execute the subquery (inner query) on its own first to show the value that the subquery returns. Then execute the outer query using the result returned by the inner query. Finally, execute the entire query (containing the subquery) and show that the result is the same. * Guidelines for Using Subqueries A subquery must be enclosed in parentheses. A subquery must appear on the right side of the comparison operator. Subqueries cannot contain an ORDER BY clause. You can have only one ORDER BY clause for a SELECT statement, and if specified it must be the last clause in the main SELECT statement. Two classes of comparison operators are used in subqueries: single-row operators and multiple-row operators. Class Management Note A subquery can execute multiple times in correlated subqueries, which are not included in this course. Students may ask how many subqueries can be written. The Oracle Server imposes no limit on the number of subqueries. The limit is related to the buffer size that the query uses.