Baixe o app para aproveitar ainda mais
Prévia do material em texto
Banco de Dados Aula 1 – 62,5 Dados representam fatos em sua forma primária. Por exemplo, o nome de um empregado, a quantidade de horas trabalhadas, por cada empregado, em uma semana, os números das peças mantidas em estoque ou dos seus pedidos de compras. Quando estes fatos são organizados ou arranjados de modo significativo, eles se tornam uma informação. Informação, portanto, é um conjunto de fatos organizados de tal forma que adquirem um valor adicional, além do valor do fato em si. Por exemplo, o total de vendas mensais pode ser mais adequado ao seu propósito, ou seja, pode conter mais valor, do que as vendas de cada vendedor individualmente. A transformação de dados em informação é um processo. Por exemplo, com os dados de peças mantidas em estoque, pedidos e vendedores podemos obter informações tão diferentes quanto: lista de peças que estão em falta no estoque, a média de venda por peça, os melhores e piores vendedores da companhia e, ainda, relacionar os piores e melhores vendedores com as horas trabalhadas por cada um deles. De forma simples, podemos entender um sistema de informação como um conjunto de processos que transforma dados em informação. Os dados relevantes para um determinado negócio se mantêm estáveis mesmo que o negócio em questão modifique radicalmente sua forma de operação, ou seja, os seus processos. Sendo assim, podemos afirmar que dados são mais estáveis do que processos e, portanto, representam a uma das partes mais valiosas e importantes de um sistema de informação. Banco de dados De acordo com (Navathe, 2005), podemos definir um banco de dados como um conjunto de dados que se relacionam. Porém, o significado do termo é mais restrito do que esta definição. Um banco de dados, necessariamente, possui as seguintes propriedades: Sistemas Gerenciadores de Bancos de Dados e Sistemas de Banco de Dados Um banco de dados é criado e mantido por um conjunto de aplicações desenvolvidas especialmente para esta tarefa denominado “Sistema Gerenciador de Banco de Dados” (SGBD). Um SGBD é uma coleção de programas que permite aos seus usuários criarem e manipularem bancos de dados. O conjunto formado por um banco de dados e estes programas que o manipulam é chamado de Sistema de Banco de Dados. Uma característica importante da abordagem de Banco de Dados é que o SGBD não mantém somente os dados, mas, também, a forma como os mesmos são armazenados, através de uma descrição completa dos dados armazenados. Estas informações são armazenadas no catálogo ou dicionário de dados do SGBD, que contém informações como a estrutura de cada arquivo, o tipo e o formato de armazenamento de cada tipo de dado, restrições, etc. As informações armazenadas neste catálogo são chamadas meta-dados. SGBD X Sistemas de Gerenciamento de Arquivos A melhor maneira de entender a natureza geral e as características dos bancos de dados de hoje é olhar para as características dos sistemas que antecederam o uso da tecnologia de banco de dados: os Sistemas de Gerenciamento de Arquivos. Tais características são: Evolução dos Bancos de Dados Nos primeiros sistemas de informação, dados e processos eram mantidos juntos em um mesmo arquivo, como no esquema a seguir. A partir da observação de que os dados são muito mais estáveis que os processos, em um sistema de informação, iniciaram-se a época de investimentos massivos no desenvolvimento de ferramentas voltados para seu tratamento eficiente. Gradativamente, dados e processos foram separados. Em um primeiro momento, estas ferramentas mantinham as funções básicas de criação e manipulação dos dados independentes das aplicações. Neste ambiente, dados, SGBD e os programas que o acessam ficam restritos a uma única máquina. O acesso se dá por meio de terminais burros, ou seja, terminais com funcionalidades restritas. Devido ao surgimento das redes de computadores e a possibilidade de conexão entre diversas máquinas com alto poder de processamento, o banco de dados pode ser deslocado para uma máquina específica, o servidor de arquivos. Programas e SGBD podem funcionar em uma ou várias das outras máquinas da rede. Bancos de dados Distribuídos Os bancos de dados crescem em volume de dados e as redes se tornam quase ilimitadas em tamanho. Para garantir a eficiência nestes ambientes, surge a necessidade de distribuição da própria base de dados. Surgem, então, os bancos de dados distribuídos. Estes bancos de dados representam, de forma bastante simplificada, a divisão do banco de dados por vários servidores de bancos de dados. Os bancos de dados saem do nível operacional da empresa e são agora preparados para atender níveis mais altos da pirâmide empresarial. Os datawarehouses, ou armazéns de dados, representam esta promoção dos bancos de dados. Eles contêm dados como nos bancos convencionais, só que preparados para atender as necessidades de informação dos níveis estratégicos da organização. Eles agora são empregados na tomada de decisão dentro das empresas, e não apenas na viabilização do funcionamento destas no dia a dia Novas arquiteturas de BD - Via WEB Finalmente, com o surgimento da Internet, a possibilidade de conexão entre estas bases de dados se torna praticamente ilimitada. Usuários de Bancos de Dados - Em um ambiente de bancos de dados, existem várias categorias de usuários. São elas: Os SGBDS E Suas Funcionalidades - Um SGBD é conjunto complexo de software que deve prover um conjunto básico de funcionalidades: +.. Benefícios do Uso de SGBDs Os ambientes de bancos de dados fornecem uma série de vantagens na sua adoção Potencial para o estabelecimento e cumprimento de padrões Flexibilidade de mudanças Redução no tempo de desenvolvimento de novas aplicações Disponibilidade de informação atualizada Economia de escala Bancos de dados NÃO são sempre a solução!!! Apesar das vantagens de utilização, a escolha por um ambiente de banco de dados tem um alto custo atrelado. A sua adoção deve, então, compensar ou ser compatível com este custo. Por que não usar banco de dados . Volume de dados pequeno, aplicações simples, bem definidas. . Mudanças não são esperadas. . Ambientes de sistemas que exijam resposta em tempo real. . Acessos múltiplos e concorrentes não são necessários. Aula 2 – 87,5 O projeto de um banco de dados envolve a produção de 3 modelos que definem uma arquitetura de 3 esquemas (conceitual, lógico e físico). Na fase inicial do processo, o mundo real ou mini-mundo deve ser entendido e seus objetos conceituais identificados. A este entendimento e identificação chamamos abstração de dados e o modelo produzido após esta fase chamamos modelo conceitual. Após a sua confecção e pela a aplicação de regras específicas, um modelo lógico é produzido. Este modelo está vinculado ao modelo de dados adotado pelo SGBD. Na etapa final, o modelo lógico dá origem ao modelo físico, efetivamente armazenado no banco de dados. Percepção do Mundo Real Toda realidade é, em princípio, bastante nebulosa e informal. Através da observação podemos extrair desta realidade fatos que nos levam a conhecê-la de uma forma mais organizada. Em um negócio, existem fatos que, observados e modelados, dizem algo a respeito do funcionamento deste negócio. Estes fatos estão ligados diretamente ao funcionamento da realidade, a qual temos interesse em compreender e manter. Para que possamos retratar estes fatos e que os mesmos possam nos levar a futuras decisões e ações, se faz necessário então registrá-los. Este registro é feito através da criação de um MODELO, isto é, algo que nos mostre como as informações estão relacionadas. Ao coletar e relacionar os fatos relevantes, devemos identificar os elementos geradores de informação, as leis que regem esta realidade, bem como as operações que incidemsobre os elementos básicos (dados). O que se quer criar é uma ABSTRAÇÃO da realidade, que seja capaz de registrar os acontecimentos da mesma, de modo que se possa implementar um sistema automatizado que atenda às reais necessidades de informação. Elementos da abstração Minimundo – Porção específica da realidade, captada pelo analista, objeto de observação detalhada. Caso a análise do minimundo torne-se muito complexa, o analista pode subdividi-lo em pontos menores, chamados de “visões”. Banco de Dados – Coleção de fatos registrados que refletem certos aspectos de interesse do mundo real. Cada mudança, em algum item do banco de dados, reflete uma mudança ocorrida na realidade. Modelo conceitual – Representa e/ou descreve a realidade do ambiente, constituindo uma visão global dos principais dados e relacionamentos (estruturas de informação), independente das restrições de implementação. Descreve as informações contidas em uma realidade, as quais irão estar armazenadas em um banco de dados Modelo Lógico – Descreve as estruturas que estarão contidas no banco de dados, sem considerar nenhuma característica específica de um sistema Gerenciador de Banco de Dados (SGBD), resultando em um esquema lógico de dados. Tem seu início a partir do modelo conceitual. Modelo físico – Descreve as estruturas físicas de armazenamento de dados, tais como: tamanho dos campos, índices, tipo de preenchimento destes campos, etc... Tem origem no modelo Lógico e detalha o estudo dos métodos de acesso ao SGBD. Modelagem Conceitual ENTIDADES Define-se Entidade como aquele objeto que existe no mundo real, com identificação distinta e com um significado próprio. São as “coisas” que existem no negócio, ou ainda, descrevem o negócio em si. A representação de uma entidade no MER é feita através de um retângulo, com o nome da entidade em seu interior. ATRIBUTOS Todo objeto para ser uma entidade possui propriedades que são descritas por atributos e valores. Estes atributos e valores, juntos, descrevem as instâncias de uma entidade. O que descreve CLIENTE? Cliente é descrito por um código de identificação, nome, endereço, telefone de contato, CGC ou CPF etc. A representação de uma entidade no MER é feita através de um losango com o nome do atributo em seu interior. Relacionamentos Um relacionamento é uma associação entre duas entidades cujo significado seja de interesse para a realidade analisada. Os relacionamentos estão intimamente ligados às ações realizadas pelos processos sobre os dados e representam os caminhos de navegação ou rotas de acesso do Modelo de Dados. Existem várias formas de se representar graficamente um relacionamento, por exemplo, Peter Chen utiliza um retângulo para desenhar uma associação entre entidades, outros autores a representam através de um traço unindo as entidades. Modelagem Conceitual - Modelo Entidade Relacionamento Agora que já conhecemos os objetos conceituais que compõem o modelo entidade relacionamento, podemos detalhá-los um pouco mais. Entidades podem ser tangíveis: Pessoas, Edifícios; Intangíveis, Setor, reserva de um voo; Entidade Fraca, não existe, se não estiver relacionada a outra, isto é, ela é logicamente dependente da outra. Por exemplo, um apartamento dentro de um edifício, um dependente em relação a um funcionário em uma empresa. Mais Sobre Atributos ... Exemplos Em um primeiro contato com o negócio de uma empresa, podemos não possuir o conhecimento necessário sobre o mesmo. Portanto, é fundamental que procuremos conhecer seus objetos principais. Ao descrevermos textualmente a realidade analisada, as entidades podem ser identificadas por similaridade com a análise sintática das linguagens naturais. Nesse caso, algumas regras podem ser aplicadas: o sujeito e o objeto da sentença são, provavelmente, entidades; os verbos podem sugerir relacionamentos, por exemplo: “Um país participa das Olimpíadas” - A frase sugere de imediato a garimpagem de PAÍS e OLIMPÍADAS como entidades e o verbo “PARTICIPA” como o relacionamento entre elas. Nos relacionamentos entre objetos de diferentes tipos, associamos instâncias de um objeto de um tipo a outras de outro tipo. O relacionamento entre PESSOA e VEÍCULO com a finalidade de expressar o conceito de propriedade. Assim, se desejamos ter, conceitualmente, representado um ambiente observado onde “João é proprietário de um jipe amarelo”, poderemos nos valer da seguinte estratégia: Identificar os objetos envolvidos – PESSOA, com a instância “João”. Veículo, com a instância “JIPE” Caracterizar os objetos PESSOA – Caracterizado por: nome, data de nascimento, sexo, CPF; VEÍCULO – Caracterizado por: marca, cor, ano de fabricação, número do chassi. Representar os objetos – PESSOA, VEÍCULO Identificar o relacionamento entre os objetos: PESSOA é proprietária de VEÍCULO Caracterizar o relacionamento entre os objetos: Nem toda PESSOA é proprietária de um VEÍCULO Um VEÍCULO pode pertencer a uma PESSOA ou não Algumas PESSOAS possuem mais de um VEÍCULO Se um VEÍCULO pertence a uma PESSOA, ele não pertence a mais ninguém PESSOA é proprietária de VEÍCULO Este processo pode ser utilizado para mapear qualquer relacionamento entre dois, ou mais tipos de objetos e, também, entre os mesmos objetos. Assim, se necessitamos expandir nosso modelo representando também as observações: Um VEÍCULO é de propriedade de uma PESSOA, mas pode ser utilizado por diversas PESSOAS para locomoção; Uma PESSOA utiliza um IMÓVEL para morar. Teríamos que repetir os passos de 1 a 6 para cada nova observação. Aula 3 – 50.0 Uma relação entre duas entidades pode ser descrita em termos da sua cardinalidade. Um para um = 1:1 - Um empregado pode ser atribuído a um carro. Um carro pertence a um empregado. Um para um = 1:N - Um cliente pode tomar emprestado vários DVDs de vídeo. Cada DVD só pode ser emprestado a um cliente (por vez). Um para um = N=N - Um estudante pode fazer várias disciplinas. Uma disciplina pode ser cursada por vários estudantes. A cardinalidade é determinada pelas “regras de negócio” criadas pela organização. São os usuários e a documentação da organização que determinam a cardinalidade existente entre entidades e seus atributos. CARDINALIDADE 1:1 - Cada instância de uma das entidades se relaciona com uma única instância da outra entidade do relacionamento. CARDINALIDADE 1:N - Cada instância da entidade que representa o lado 1 do relacionamento pode se relacionar com N instâncias da entidade que representa o lado N. Por outro lado, cada instância da entidade representante do lado N, relaciona com apenas 1 instância da entidade representante do lado 1. CARDINALIDADE N:M - Cada instância da entidade que representa o lado N do relacionamento pode se relacionar com M instâncias da entidade que representa o lado M. O mesmo acontece quando o relacionamento é analisado no sentido oposto. Escolhendo Nomes Para Os Relacionamentos Relações podem ser nomeadas por verbos ou palavras agregadas, como nos exemplos abaixo: AS RELAÇÕES PODEM TER LIMITES MÍNIMOS E MÁXIMOS Além do grau de cardinalidade máxima, já mencionado anteriormente, podemos identificar limites mínimos para as cardinalidades. Por exemplo: Um professor pode ensinar de 0 a 4 disciplinas (limite inferior é 0 e limite superior é 4); e um uma disciplina pode ser ministrada por 0 a 1 professor (limite inferior é 0 e o limite superior é 1) Relações Podem Ser Recursivas Ocorre quando uma entidade possui um relacionamento com ela mesma os relacionamentos recursivos podem também ter limites inferiores e superiores Exemplo: Uma organização possui uma entidade "Empregado"e que guardar a informação sobre quais empregados são casados entre si. Esse é um relacionamento recusrivo 1:1 onde a entidade "Empregado"se relaciona consigo mesmo Relacionamentos Recursivos 1:1 Pode ser visto como uma entidade que se relaciona com ela mesmo. Limites inferiores e superiores em um relacionamento 1:1 recursivo Atributos Em Relacionamentos Os atributos de relacionamento são possíveis quando o grau do relacionamento for N : M ( muitos para muitos). Modelagem Conceitual – Mer Estendido Os conceitos básicos do Modelo Entidade Relacionamento são suficientes para modelar grande parte dos bancos de dados. Entretanto, algumas extensões, introduzidas posteriormente ao seu surgimento, permitiram refinamentos bastante significativos. Estrutura de Generalização-Especialização “É-um” Entidades podem ter subtipos ou subclasses e pupertipos ou superclasses. Uma entidade supertipo é uma generalização de uma entidade subtipo especializada". Cada entidade subtipo herda os atributos de sua entidade supertipo. Cada entidade supertipo tem seus próprios atributos únicos. A relação entre um subtipo de entidades e seu par é referenciada por uma relação “É-um” Num diagrama ER um relacionamento “É-um” conecta uma entidade mais especializada a uma entidade generalizada [sem sentido] pode ser escrita como um triângulo invertido ou um losango com o label “É-um” Estrutura de Agregação “Faz_parte_de” Outra Representação ... Aula 4 – 50,0 Modelagem Lógica De Dados O Modelo Lógico de Dados Lógico descreve os componentes do Modelo Conceitual de Dados, aproximando-o do ambiente computacional, onde este será trabalhado. Existem vários modelos de dados: O Modelo Relacional No modelo relacional Relação – tabela bidimensional, composta de linhas e colunas de dados. Relação Recursiva – Relaciona o objeto a si mesmo Atributo – Coluna Grau de uma relação – Número de atributos Tupla – Cada linha da relação Domínio de um atributo - Conjunto ao qual pertence os valores de um atributo Valor nulo de um atributo de uma tupla – Atributo inaplicável ou com valor desconhecido Esquema de banco de dados relacional – Nome das relações seguidos pelos nomes dos atributos, com os atributos chaves sublinhadas e com as chaves estrangeiras identificadas. Modelagem Lógica - O Modelo Relacional Regras de Integridade Aula 5 – Normalização O processo de normalização de dados representa uma série de passos que se seguem no projeto de um banco de dados, que permitem um armazenamento consistente e o eficiente acesso aos dados de um banco de dados relacional. Esses passos reduzem a redundância de dados e, consequentemente, as chances de ocorrerem inconsistências. Características de um mau projeto Formas normais Uma relação está na primeira forma normal se todos os seus atributos são monovalorados e atômicos. Quando encontrarmos um atributo multivalorado, devemos criar um novo atributo que individualize a informação que está multivalorada: HISTÓRICO = {matricula-aluno, código-disciplina, notas} No caso acima, cada nota seria individualizada identificando a prova a qual aquela nota se refere: HISTÓRICO = {matricula-aluno, código-disciplina, número-prova, nota} Quando encontrarmos um atributo não atômico, devemos dividi-lo em outros atributos que sejam atômicos: PESSOA = {CPF, nome-completo} Vamos supor que, para a aplicação que utilizará esta relação, o atributo nome-completo não é atômico, a solução então será: PESSOA = {CPF, nome, sobrenome} Uma relação está na segunda forma normal quando duas condições são satisfeitas: A relação estiver na primeira forma normal; Todos os atributos primos dependerem funcionalmente de toda a chave primária. Observe a relação abaixo: HISTÓRICO = {matrícula-aluno, código-matéria, número-prova, nota, data-da-prova, nome-aluno, endereço-aluno, nome-matéria} Fazendo a análise da dependência funcional de cada atributo primo, chegamos às seguintes dependências funcionais: Matrícula-aluno, código-matéria, número-prova -> nota código-matéria, número-prova -> data-da-prova matrícula-aluno -> nome-aluno, endereço-aluno código-matéria -> nome-matéria Concluímos, então, que apenas o atributo primo nota depende totalmente de toda chave primária. Para que toda a relação seja passada para a segunda forma normal, devem-se criar novas relações, agrupando os atributos de acordo com suas dependências funcionais: HISTÓRICO = { matrícula-aluno, código-matéria, número-prova, nota} PROVA = { código-matéria, número-prova, data-da-prova} ALUNO = { matrícula-aluno, nome-aluno, endereço-aluno} MATERIA = { código-matéria, nome-matéria} O nome das novas relações deve ser escolhido de acordo com a chave. Uma relação está na terceira forma normal, quando duas condições forem satisfeitas: 1. A relação estiver na segunda forma normal. 2. Todos os atributos primos dependerem não transitivamente de toda a chave primária. Observe a relação abaixo: PEDIDO = {número-pedido, código-cliente, data-pedido, nome-cliente, codigo-cidade-cliente, nome-cidade-cliente} Fazendo a análise da dependência funcional de cada atributo primo, chegamos às seguintes dependências funcionais: . número-pedido -> código-cliente . número-pedido -> data-pedido . código-cliente -> nome-cliente . Código-cliente -> código -cidade-cliente . Código-cidade-cliente -> nome-cidade-cliente Concluímos então que apenas os atributos primos código-cliente e data-pedido dependem não transitivamente totalmente de toda chave primária. Observe que: . Número-pedido -> código-cliente -> nome-cliente . número-pedido -> código-cliente -> código -cidade-cliente . número-pedido -> código-cliente -> código -cidade-cliente -> nome-cidade-cliente Isto é dependência transitiva; devemos resolver inicialmente as dependências mais simples, criando uma nova relação onde código-cliente é a chave, o código-cliente continuará na relação PEDIDO como atributo primo, porém, os atributos que dependem dele devem ser transferidos para a nova relação: PEDIDO = {número-pedido, código-cliente, data-pedido} CLIENTE = {código-cliente, nome-cliente, código-cidade-cliente, nome-cidade-cliente} As dependências transitivas da relação PEDIDO foram eliminadas, porém ainda devemos analisar a nova relação CLIENTE: código-cliente -> código-cidade-cliente -> nome-cidade-cliente Observe que o nome-cidade-cliente continua com uma dependência transitiva, vamos resolvê-la da mesma maneira : PEDIDO = {número-pedido, código-cliente, data-pedido} CLIENTE = {código-cliente, nome-cliente, código-cidade-cliente} CIDADE = {código-cidade-cliente, nome-cidade-cliente} O nome das novas relações deve ser escolhido de acordo com a chave. Uma relação está na FNBC quando duas condições forem satisfeitas: 1. A relação estiver na terceira forma normal; 2. Todo atributo não chave depende funcionalmente diretamente da chave primária, ou seja, não há dependências entre atributos não chave AGÊNCIA = {ag_num, ativos, cidade} CLIENTE = {cpf-cli, nome_cli, rua, cidade } DEPÓSITO = {ag_nome, conta_num, cpf_cli, saldo} EMPRÉSTIMO = { ag_nome, emp_num, cpf_cli, quantia} Fazendo a análise da dependência funcional de cada atributo primo, chegamos às seguintes dependências funcionais: ag_num -> ativos, cidade cpf_cli -> nome_cli, rua, cidade conta_num -> saldo, ag_num emp_num -> quantia, ag_nome Assim, concluímos que cpf, cli não dependem de conta-num e emp-num. Solução: INFO_EMPRÉSTIMO = {ag_num, emp_num, quantia} CLIENTE_EMPRÉSTIMO = { cpf_cli, nome_cli, emp_num} INFO_CONTA = {ag_num, conta_num, saldo} CLIENTE_CONTA = { cpf_cli, conta_num} Regrageral da normalização Aula 6 – 50,0 Linguagens de definição de dados Existem diferentes meios pelos quais a estrutura do banco de dados é descrita para o SGBD, dependendo do SGBD que está sendo usado. A linguagem usada para descrever tal estrutura é chamada de DDL (Data Definition Language). A linguagem de definição de dados é usada pelo DBA na implementação do banco de dados. O arquivo de texto DDL fornece o nome das tabelas no banco de dados, nomeia e descreve as colunas destas tabelas, define índices e descreve outras estruturas, tais como restrições de segurança e outras limitações. Linguagens de manipulação de dados A DML é utilizada para se recuperar informações armazenadas no banco de dados. Possui quatro categorias: Álgebra Relacional - As relações podem ser manipuladas através de operadores relacionais. Embora não seja utilizada, frequentemente, devido à sua complexidade, ela ajuda a esclarecer a manipulação relacional e estabelece os fundamentos para o aprendizado da SQL. A Álgebra Relacional é um conjunto de operações usadas para manipular relações e é oriunda da Teoria dos Conjuntos da matemática. A Álgebra Relacional é fechada, o que significa que os resultados de uma ou mais operações relacionais são sempre uma relação. Cálculo Relacional - Derivado do ramo da matemática chamado “Cálculo de Predicados”. Linguagens orientadas à transformações - Constituem uma classe de linguagens que transformam dados de entrada expressos como relações, em resultados expressos, como uma única relação (SQUARE, SEQUEL e SQL). Consultas através de exemplos / formulários - Através de interface gráfica, o usuário é apresentado a uma materiazalização de uma ou mais entradas. O SGBD mapeia a materialização para a relação fundamental e constrói as consultas (provavelmente em SQL). Ex: Approach (Lotus), Access e SALSA for Desktop. Álgebra Relacional Adotaremos as tabelas a seguir para exemplificar cada um dos conceitos introduzidos a seguir: Operações da álgebra relacional Seleção Projeção União Interseção Diferença Produto ou produto cartesiano Junção Seleção Em sistemas gasosos temos dois tipos de trabalho: União, Interseção e Diferença Produto ou produto cartesiano Junção Aula 7 – 37,5 A primeira versão da linguagem SQL, chamada SEQUEL, surgiu na década de 70, os laboratórios da IBM (Califórnia), como uma interface para um sistema experimental de uma banco de dados relacional, chamado SISTEMA R. Entre 1976 e 1977, ela foi revisada e ampliada, tendo então o seu nome alterado para SQL. Um esforço conjunto da ANSI e da ISO chegou a versão padrão da SQL (ANSI, 1986) chamada SQL-86 ou SQL1. Uma versão revisada e expandida, chamada SQL2 ou SQL-92 foi desenvolvida em seguida. A próxima versão do padrão foi, originalmente, chamada SQL3, mas atualmente é conhecida por SQL-99. Neste curso, iremos tratar da última versão da SQL. Devido ao sucesso da nova forma de consulta e manipulação de dados dentro de um ambiente de banco de dados, sua utilização tornou-se cada vez maior. Atualmente, é a linguagem padrão dos SGBDs relacionais comerciais. Entre eles podemos citar: A linguagem SQL tem vários enfoques Linguagem interativa de consulta (query AdHoc): Através de comandos SQL os usuários podem montar consultas poderosas, sem a necessidade da criação de um programa, podendo utilizar ferramentas front-end para a montagem de relatórios. Linguagem de programação para acesso às bases de dados: Comandos SQL embutidos em programas de aplicação (escritos em C, C++, Java, Visual Basic etc.) Acessam os dados armazenados em uma base de dados relacional. Linguagem de administração de banco de dados: O responsável pela administração do banco de dados (DBA) pode utilizar comandos SQL para realizar tarefas relacionadas com a manutenção dos schemas do banco de dados. Linguagem de consulta em ambiente cliente/servidor: Os programas, sendo processados nos computadores dos clientes (front ends), usam comandos SQL para se comunicarem através de uma rede, com um SGBD sendo processado em uma máquina servidora (back end). Linguagem para bancos de dados distribuídos: A linguagem SQL é também a linguagem padrão para a manipulação de dados em uma base de dados distribuída. Linguagem de definição de dados (DDL): Permite ao usuário a definição da estrutura e organização dos dados armazenados e das relações existentes entre eles. Linguagem de manipulação de dados (DML): Permite a um usuário, ou a um programa de aplicação, a execução de operações de inclusão, remoção, seleção ou atualização de dados previamente armazenados na base de dados. Controle de acesso: Protege os dados de manipulações não autorizadas. Integridade dos dados: Auxilia no processo de definição da integridade dos dados, protegendo contra corrupções e inconsistências geradas por falhas do sistema de computação ou por erros nos programas de aplicação. Vantagens da Linguagem SQL Definição de Dados e Tipos de Dados A linguagem SQL utiliza os termos tabela, linha e coluna, em vez dos termos relação, tupla e atributo, respectivamente, para o modelo relacional formal. O principal comando SQL para a definição de dados é o CREATE, que pode ser usado para criar esquemas, tabelas (relações) e domínios. Assim como pode ser usado para a criação de outros construtores, como visões, asserções e gatilhos. As primeiras versões do SQL não incluíram os conceitos de um esquema de um banco de dados relacional; todas as tabelas eram consideradas parte do mesmo esquema. O conceito de esquema foi incorporado a partir da SQL2, de modo a agrupar as tabelas e outros construtores que pertencem à mesma aplicação de um banco de dados. Um esquema SQL é identificado por um nome de esquema e inclui uma identificação de autorização, que indica o usuário ou a conta ao qual o esquema pertence, bem como os descritores de cada elemento do esquema. Os elementos de esquema incluem tabela, restrições, visões, domínios e outros construtores (como concessão de autoridade) que descrevem o esquema. Um esquema é criado via comando CREATE SCHEMA, que pode incluir todos os elementos de definição do esquema. Alternativamente, o esquema pode ser definido por um nome e um identificador de autorização, e os elementos podem ser definidos depois. Por exemplo, o comando a seguir cria um esquema chamado EMPRESA, pertencente a um usuário cuja identificação é SILVA. CREATE SCHEMA EMPRESA AUTHORIZATHION SILVA Introdução Em geral, nem todos os usuários estão autorizados a criar esquemas e elementos de esquemas. O privilégio deve ser, explicitamente concedido (granted) para as contas de usuários relevantes, para o administrador do sistema ou para o DBA. Além do conceito de esquema, a SQL2 usa o conceito de catálogo, que é uma coleção de esquemas em um ambiente SQL que recebe um nome. Um ambiente SQL é uma instalação de um SGBD-Relacional padrão em um sistema de computador. Um catálogo sempre contém um esquema especial chamado INFORMATION_SCHEMA, que proporciona as informações sobre todos os esquemas do catálogo e todos os descritores de seus elementos. Introduziremos os comandos da linguagem a partir da construção de exemplos. As tabelas, a seguir, serão usadas nestes exemplos: Criação e Destruição de Tabelas O comando CREATE TABLE é usado para criar uma tabela. A sua forma geral é: CREATE TABLE <nome_tabela> (<descrição das colunas>, <descrição das chaves>); Aula 8 – 50,0 Mais operadores A cláusula WHERE pode filtrar as linhas de uma tabela através de outros operadores,além dos operadores relacionais e lógicos. Para a apresentação dos novos operadores e comandos, continuaremos a utilizar as tabelas descritas a seguir: Ordenando os Dados Selecionados SELECT <lista_de_colunas> FROM <nome_tabela> WHERE <condição_de_seleção> ORDER BY {<nome_coluna>|<num_col> [ASC|DESC]} Onde <nome_coluna> se refere coluna, segundo a qual as linhas serão ordenadas, e <num_col> se refere à posição relativa da coluna na <lista_de_colunas> projetadas, contada da esquerda para a direita, e não à posição na tabela original. As cláusulas ASC e DESC denotam ordenação ascendente e descendente, respectivamente. A forma ascendente de ordenação é assumida, caso nenhuma opção seja informada explicitamente. Agrupando a Informação Selecionada (GROUP BY) Consulta - mostrar em ordem alfabética a lista de vendedores e seus respectivos salários fixos. select nome_vendedor,sal_fixo from vendedor order by nome_vendedor; Ordenando os Dados Selecionados Resposta NOME_VENDEDOR SAL_FIXO ---------------------------------------- ---------- Ana Cristina 2100 Armando Pinto 2500 Cassia Andrade 900 Paulo Alberto 1500 Consulta - Listar os nomes, as cidades e os estados de todos os clientes, ordenados por estado e cidade de forma descendente. select nome_cliente, cidade, uf from cliente order by uf desc,cidade desc; Resposta NOME_CLIENTE CIDADE UF ------------------------------------------------------------------- Ind. Químicas Paulistas São Paulo SP Ford Caminhoes São Paulo SP Riocel Celulose Guaiba RS Elevadores Sur Guaiba RS CSN Volta Redonda RJ Supermercado Carrefour Rio De Janeiro RJ Supermercado Baratao Rio De Janeiro RJ Pegeout Resende RJ Supermercado Arariboia Niteroi RJ UFF Consulta -Mostrar a descrição e o valor unitário de todos os produtos que tenham unidade 'kg' em ordem ascendente de valor unitário. Resposta DESC_PRODUTO VAL_UNITARIO ------------------------------------------------- Parafuso 3.0X10.5 mm 2 Chapa de Aço 2,5 Cimento select desc_produto,val_unitario from produto where unid_produto = 'kg' order by 2; Realizando cálculos sobre a informação selecionada Podemos criar, dinamicamente, um campo que não pertença à tabela original através de operações executadas sobre os campos projetados. Consulta Exibir o novo salário fixo dos vendedores da faixa de comissão ‘C’, calculado com base no reajuste de 75% sobre o salário atual, acrescido de R$ 120,00 de bonificação. Ordene a relação resultante, pelo nome do vendedor. Resposta NOME_VENDEDOR NOVO_SALARIO ----------------------------------------------------- Cassia Andrade 1695 Maria Paula 1695 select nome_vendedor,((sal_fixo*1.75)+120) as novo_salario from vendedor where faixa_comissao='c' order by nome_vendedor; Máximos (MAX) e Mínimos (MIN) Totalizando Colunas (SUM)Resposta: SUM(QTD_PEDIDA) -------------------- 900 Consulta: Mostrar a quantidade total pedida para o produto cimento, de código 200. select SUM(qtd_pedida) from item_pedido where cd_produto=200; Calculando Médias (AVG) Resposta: AVG(SAL_FIXO) ----------------- 1580 Consulta Qual é a média dos salários fixos dos vendedores? select AVG(sal_fixo) from vendedor; Contando as Linhas (COUNT) Resposta: COUNT(*) ---------- 2 Consulta: Quantos vendedores ganham acima de R$ 2.000,00 de salário fixo? select COUNT(*) from vendedor where sal_fixo>2000; A Palavra-Chave DISTINCT Várias linhas de uma tabela podem conter os mesmos valores para as suas colunas (duplicidade), com exceção da chave primária. Quando desejarmos eliminar a duplicidade, podemos inserir a palavra-chave DISTINCT após a palavra-chave SELECT select DISTINCT cidade from cliente; Problema: Em que cidades, a nossa empresa possui clientes? Resposta: CIDADE -------------------- guaiba niteroi resende rio de janeiro sao paulo volta redonda Agrupando a Informação Selecionada (GROUP BY) Existem ocasiões em que desejamos aplicar uma função de agregação, não somente a um conjunto de tuplas mas, também, organizar a informação em determinadas categorias. Isso é possível, através do uso da cláusula GROUP BY. Problema: Listar o número de itens existente, em cada pedido. select no_pedido, count(*) as total_itens from item_pedido group by no_pedido; Inicialmente, as linhas são agrupadas através do (s) atributo (s) fornecido (s) na cláusula GROUP BY; neste caso, no_ped. Em um segundo passo, é aplicada a operação COUNT (*) para cada grupo de linhas que tenha o mesmo número de pedido. Após a operação de contagem de cada grupo, o resultado da consulta é apresentado. Normalmente, a cláusula GROUP BY é utilizada em conjunto com as operações COUNT e AVG. A Cláusula HAVING Às vezes, temos que definir condições e aplicá-las aos grupos, ao invés de fazê-lo cada linha, separadamente. Por exemplo, suponha que desejemos listar todos os pedidos que possuam mais de um item. Essa condição não se aplica a uma única linha separadamente, mas a cada grupo definido pela cláusula GROUP BY. Para exprimir tal consulta, usamos a cláusula HAVING. A condição da cláusula HAVING é aplicada após a formação dos grupos; logo, podemos usar funções de agregação na construção das condições da cláusula HAVING. Aula 9 – 75,0 Recuperando Dados de Várias Tabelas (JOINS) Sinônimos Consulta: Exiba a relação dos clientes localizados no Rio de Janeiro (ordenados alfabeticamente) que têm pedidos do produto Chapa de Aço com prazos de entrega superiores a 15 dias. Utilizando Consultas Aninhadas (Subqueries) Chamamos de consulta aninhada à consulta cujo o resultado é utilizado por outra consulta, de forma encadeada e contida no mesmo comando SQL. Aula 10 – 37,5 Inserir Registros usando um select Inserindo registro em uma tabela Modificando um Registro Excluindo Registros Transações A execução de um programa, que inclui operações de acesso a um banco de dados, é chamada de transação. Se essas operações não alteram os dados do banco de dados, a transação é chamada de read-only transaction. A partir de agora, trataremos das transações que executam operações de atualização no banco de dados. Logo, a palavra transação será usada para fazer referência a um programa que realiza operações que alteram registros de um banco de dados Visões Considerações sobre segurança podem exigir que determinados dados não estejam disponíveis para alguns usuários. Logo, não é desejável que o modelo lógico possa ser acessado indiscriminadamente. Com base em questões de segurança, podemos criar uma coleção de relações personalizadas que se ajustem melhor às necessidades dos usuários e que levem em conta asquestões de segurança. Tais relações são chamadas de visões. Uma visão, na terminologia SQL, é uma tabela que é derivada de outras tabelas. Essas outras tabelas podem ser tabelas-base (criadas através do comando CREATE TABLE) ou outras visões previamente definidas. Uma visão não está, necessariamente, fisicamente armazenada no banco de dados; ela pode existir apenas virtualmente, em contraste com as tabelas-base, cujas as tuplas se encontram fisicamente armazenadas no banco de dados. Índices Os SGBD’s utilizam índices para tornar mais eficiente a recuperação dos dados de um banco de dados. Um índice é uma estrutura de dados, onde são armazenados valores e ponteiros, organizados de forma ascendente ou descendente, que torna possível localizar rapidamente as linhas de uma tabela, nas quais o valor desejado está armazenado. Os índices são utilizados, internamente, pelo SGBD, ficando totalmente transparente ao usuário a sua utilização. Criando Índices Um índice é construído sobre uma ou mais colunas de uma determinada tabela. Em SQL, um índice é criado através do comando create index, cuja forma geral é: CREATE [UNIQUE] INDEX <nome_índice> ON <nome_tabela> (<lista_de_colunas>); A cláusula UNIQUE é opcional, e a sua inclusão assegura a não existência de valores duplicados no índice a ser criado. Eliminando Índices Podemos eliminar um índice através do comando drop index, cuja forma geral é: DROP INDEX <nome_índice>; Segurança A informação é vital para o sucesso de um negócio, mas quando ela é tratada de forma incorreta ou quando cai em mãos erradas, pode tornar-se um sério obstáculo para se atingir o sucesso. Visando garantir a segurança dos dados, os SGBD’s disponíveis no mercado fornecem uma série de facilidades para salvaguardar as informações por eles mantidas. Tais facilidades são implementadas, concedendo-se e retirando-se privilégios dos usuários sobre os dados mantidos por um SGBD.
Compartilhar