Banco de Dados para Web Profa. Dra. Ligia Flávia Antunes Batista http://paginapessoal.utfpr.edu.br/ligia Apresentação Graduação UEL – Ciência da Computação Mestrado Informática UFPR Área de concentração: Inteligência Computacional Doutorado Ciências Cartográficas – UNESP SIG, Cartografia Digital e Análise espacial “Modelagem espaço-temporal do crescimento de macrófitas submersas no reservatório de Taquaruçu, rio Paranapanema” Ementa Modelagem Modelo relacional Aspectos de Projeto de Banco de Dados Linguagem SQL Comandos básicos (DML, DDL) Subconsultas, agregação, triggers, índices, visões, Transações, autorização Segurança, performance, administração 3 Ferramentas Mysql Community Edition Server versão 5.5 http://www.mysql.com/downloads/mysql/ Mysql Workbench http://www.mysql.com/downloads/workbench/ Ambiente integrado para: Projeto e modelagem; Consultas SQL; Administração. 4 Referências http://dev.mysql.com/doc/ 5 Aulas 12 / maio Projeto de banco de dados, Introdução a SQL Trabalho: projetos 19 / maio Consultas avançadas (sub-consulta, agregação, visões) Trabalho: carga de dados e consultas 26 / maio Triggers, índices, transações, autorização Segurança, performance, administração 6 Turma Heterogeneidade Mesclar princípios básicos com tópicos avançados Conhecê-los: GoogleForms http://paginapessoal.utfpr.edu.br/ligia/disciplinas/pos-we 7 Andamento Participação, questões, sejam básicas ou avançadas 8 SGBD Sistema Gerenciador de Banco de Dados Ou DBMS Database Manager System 9 SGBD (ou DBMS) Oferece Armazenamento e acesso … … eficiente, confiável, conveniente, e seguro... … a grande quantidade de dados persistentes 10 SGBD Massivo: terabytes Persistente: não volátil Seguro: controle de usuários e níveis de acesso Multiusuário: controle de concorrência, compartilhamento Conveniente: independência de dados e programa Eficiente: milhares de consultas ou atualizações por segundo Confiável: 99.9999 % 11 Mysql e Web (Fonte: Oracle Corporation) 12 Mysql e outras corporações (Fonte: Oracle Corporation) 13 Mysql 45 mil downloads por dia 66% usam Windows para desenvolvimento 48% usam Windows para produção Versão Community e Enterprise http://dev.mysql.com/downloads/mysql/5.1.html 14 Modelagem Projeto de banco de dados Modelo relacional 15 Projeto de BD Fases Especificação das necessidades do usuário (levantamento de requisitos) Esquema conceitual (visão detalhada da empresa) Remoção de redundâncias e eliminação de conflitos Revisão do esquema em função das necessidades funcionais, ou seja, tipos de operações que serão realizadas nos dados (atualização, pesquisa, relatórios) 16 Projeto de BD Esquema ou projeto lógico: modelo conceitual será mapeado para o modelo de implementação de dados do SGBD que será usado Projeto físico: estrutura interna de armazenamento (tipos de dados) 17 Projeto de BD Geralmente há muitos projetos possíveis Alguns são melhores que outros Como escolher? Evitar redundância Pode gerar anomalias de atualização e remoção 18 Persistência Vários modelos de armazenamento Modelo relacional Modelo orientado a objeto XML ... 19 Modelo relacional Um BD relacional é composto de tabelas ou relações Tabela: conjunto de linhas (tuplas) Linha: série de campos (atributos) Coluna: conjunto de campos com o mesmo nome 20 Exemplo 21 Exemplo 22 Modelo conceitual (Modelo entidade-relacionamento) 23 Modelo físico 24 Conceitos chave Modelo de dados Conjunto de registros (linhas) Esquema e dados Análogo a tipos e variáveis Data Definition Language (DDL) Permitem gerenciar o esquema Data Manipulation Language (DML) Consulta e modificação de dados 25 Modelo relacional As linhas não estão ordenadas (não é possível referenciar por posição) Chave primária: 1 ou mais colunas cujos valores distinguem uma linha das demais Sugestão: não seja um dado, apenas um valor de controle Chave estrangeira: 1 ou mais colunas que são chaves primárias em uma outra tabela 26 Modelo relacional Depto CodigoDepto (PK) NomeDepto 1 Compras 2 Engenharia 3 Vendas Empregado CodigoEmp (PK) Nome CodigoDepto (FK) CatFuncional 1 Souza 1 2 Santos 2 C5 3 Silva 2 C5 4 Soares 1 C2 27 Relacionamentos Cardinalidades 1:1 1:n n:n Tipos identificador não identificador 28 1:1 Um-para-um: uma entidade em A está associada no máximo a uma entidade em B e uma entidade em B está associada no máximo a uma entidade em A Obs.: Chave estrangeira em uma das entidades. 29 1:n FK na direção muitos Um-para-muitos: uma entidade em A está associada a qualquer número de entidades em B, enquanto uma entidade em B está associada no máximo a uma entidade em A 30 n:n Muitos-para-muitos: Uma entidade em A está associada a qualquer número de entidades em B, e uma entidade em B está associada a qualquer número de entidades em A. Obs.: Requer tabela extra para representá-lo. 31 Workbench 1:1 1:n n:n 32 Tipos de dados Texto CHAR – Conjunto de caracteres com tamanho fixo VARCHAR – Conjunto de caracteres com tamanho variável TEXT Numérico INT - INTEGER FLOAT - -3.402823466E+38 a 3.402823466E+38 DECIMAL[(M[,D])] – M é o total de dígitos e D o número de casas decimais 33 Variações para inteiros 34 Tipos de dados Data e hora DATETIME - 'YYYY-MM-DD HH:MM:SS': de '100001-01 00:00:00' to '9999-12-31 23:59:59' TIMESTAMP: de '1970-01-01 00:00:01' UTC to '2038-01-19 03:14:07' UTC (Coordinated Universal Time) DATE - 'YYYY-MM-DD' Muitos outros http://dev.mysql.com/doc/refman/5.1/en/data-type-o 35 Workbench Front-end Ferramenta gráfica 36 Mysql Workbench Modelagem Engenharia reversa Documentação Sincronização de esquema Administração Start/stop server Gerenciamento de usuários Backup http://wb.mysql.com/ 37 Exemplo 1: Tabelas empregado e departamento 38 Chave estrangeira Uma chave estrangeira pode referenciar a chave primária da própria tabela (Autorelacionamento) CodigoEmp Nome CodigoDepto CodGerente 1 Souza 1 2 Santos 2 4 3 Silva 2 4 4 Soares 1 1 39 Exemplo estado regiao cod_regiao cod_estado nome cod_regiao (FK) nome materia congressista coligacao cod_materia cod_con cod_coligacao nome_col sigla_col partido cod_partido nome_partido sigla_partido cod_coligacao (FK) descricao data_votacao resultado tipo qtde_favor qtde_contra qtde_abstencoes qtde_ausentes nome data_ult_eleicao num_vezes_eleito cod_estado (FK) cod_partido (FK) votacao cod_con (FK) cod_materia (FK) voto_dado 40 Exercícios 1. Construa um diagrama para um hospital com um conjunto de pacientes e um conjunto de médicos. Registros de diversos exames realizados são associados a cada paciente. 2. Construa um diagrama para uma companhia de seguros de automóveis com um conjunto de clientes, onde cada um possui um certo número de carros. Cada carro tem um número de acidentes associados a ele. 41 Normalização Diretrizes gerais 42 Diretrizes de projeto Usar o tipo de dado apropriado O tipo de dado errado pode levar à necessidade de processamento adicional para conversão – string para um valor numérico antes de realizar cálculos Usar tamanho apropriado Valores máximos muito altos são inadequados quando os valores a serem armazenados são muito menores 43 Diretrizes de projeto Uso do not null Uma coluna que está especificada como NULL mas nunca conterá um valor nulo pode causar problemas de integridade, além de adicionar processamentos desnecessários 44 Normalização do esquema O que é Normalização? Introduzida por E.F. Codd A modificação de um esquema para que esteja em conformidade com regras (formas normais) Assegurar que toda coluna não chave esteja relacionada à chave Redução de redundância 45 Benefícios da normalização Reduz espaço de armazenamento Menos redundância significa menos dados Buscas melhores e mais rápidas Menos dados para “varrer” Buscas mais fáceis em dados que poderiam estar misturados Integridade de dados melhorada Quando o dado está apenas em um lugar, a atualização também é única Ajuda refinar um projeto 46 As formas normais Primeira Forma Normal (1NF) Segunda forma normal (2FN) Terceira forma normal (3FN) Existem outras formas normais (Elmasri, Silberschatz) 47 1FN Requer uma chave primária Requer que todos os dados sejam atômicos (indivisíveis) Sem dados multivalorados Remoção de redundâncias verticais 48 2FN Todos os campos devem estar relacionados a toda a chave, em caso de chaves compostas 49 3FN Requer que todos os campos dependam diretamente da chave primária e não de outros campos não chave 50 Exemplo Tabela não tem chave primária Nomes não são atômicos Toda informação em uma única tabela Mais de um campo para telefone e e-mail Company, department, city, state, zip são verticalmente redundantes 51 1FN Tabela tem PK Nomes são atômicos Telefones e e-mails não são mais horizontamente redundantes Company, department, city, state, zip não são mais verticalmente redundantes 52 2FN 53 3FN 54 “OVER-normalization” 55 “Desnormalizar” Fazer normalização e depois monitorar as consultas que estiverem lentas (comando EXPLAIN) Desnormalização pode ser necessária em certas consultas (junções e ordenações) Integridade dos dados pode ser mantida com triggers 56 Como desnormalizar Unir relacionamentos 1:n: casos em que uma única coluna seria adicionada à tabela do n para remover a necessidade da junção Tabela Snapshot: criar uma tabela que armazena um instantâneo dos dados que precisam ser consultados 57 Atualizações Recomenda-se atualizar o esquema via diagrama e então sincronizar com o banco de dados Importante testar alterações em um ambiente de desenvolvimento Usar a ferramenta de sincronização 58 Exercício Com base no que foi descrito, é possível melhorar seus projetos, do hospital e da seguradora? 59 SQL DDL DML 60 DDL Criando tabelas com SQL Create Table Estudante( ID integer, nome varchar(100), coeficiente float) Create Table Universidade (nome varchar(100), estado char(2), classificacao integer) 61 Criação de tabela create table nome_tabela (nome_coluna tipo_dados, nome_coluna2 tipo_dados, nome_coluna3 tipo_dados, chaves); Exemplo: CREATE TABLE empregado( id INT NOT NULL, nome VARCHAR(45), data_nascimento DATE, PRIMARY KEY (id)); 62 CREATE TABLE http://dev.mysql.com/doc/refman/5.5/en/sql-syntax-data-definition.html 63 Com workbench 64 Apagar tabela DROP table tbl_name; Não é possível desfazer DROP table employees; 65 Mysql – linha de comando mysql> mysql -uroot -psenha mysql> show databases mysql> show tables mysql> use mysql mysql> select user, host, password from user; 66 Mysql Onde ficam os dados Padrão: C:/Documents and Settings/All Users/Application Data/MySQL/MySQL Server 5.1/Data/ Linux: /var/lib/mysql Pode-se obter esta informação com: mysql> SHOW VARIABLES like 'data%'; 67 DML DML - Data Manipulation Language SQL used PARA manipular os dados Add INSERT a ROW Update UPDATE 1-Many columns in ROW(s) Delete DELETE 1 to many Rows SELECT: consultar 68 Inserção de dados Insert into tbl_name (colname,..) values (val1, val2); INSERT INTO employees (emp_id, first_name, last_name) VALUES (1, 'John', 'Smith'); INSERT INTO employees (emp_id, first_name, last_name) VALUES (2, 'Susan', 'Taylor'); INSERT INTO employees (emp_id, first_name, last_name) VALUES (3, 'Jessie', 'Jones'); 69 Inserção de dados OR – MySQL SPECIFIC INSERT INTO employees (emp_id, first_name, last_name) VALUES (1, 'John', 'Smith'), (2, 'Susan', 'Taylor'), (3, 'Jessie', 'Jones'); 70 Inserção de dados 71 Colunas DATE O formato de um valor DATE é 'YYYY-MM-DD' De acordo com o padrão SQL, nenhum outro formato é permitido. Você deve usar este formato em expressões UPDATE e na cláusula WHERE de instruções SELECT. Exemplo: mysql> SELECT * FROM nome_tabela WHERE date >= '1997-05-05'; http://dev.mysql.com/doc/refman/4.1/pt/using-date.h 72 Constantes para DATE String: 'YYYY-MM-DD' ou 'YY-MM-DD' Qualquer caractere de pontuação pode ser usado como delimitador. Exemplos: '2012-12-31', '2012/12/31', '2012^12^31', '2012@12@31' String sem delimitadores 'YYYYMMDD' ou 'YYMMDD' desde que a string faça sentido como data. Exemplo: '20070523' e '070523' são interpretadas como '2007-05-23', mas '071332' é inválido 73 Constantes para DATE Como número YYYYMMDD ou YYMMDD desde que o número faça sentido como data. Exemplo:19830905 e 830905 são interpretados como '1983-09-05'. http://dev.mysql.com/doc/refman/5.5/en/date-and-tim 74 Funções para datas STR_TO_DATE(str,format) Recebe string e retorna data Exemplos: mysql> SELECT STR_TO_DATE('01,5,2013','%d,%m,%Y'); Resultado -> '2013-05-01' mysql> SELECT STR_TO_DATE('May 1, 2013','%M %d,%Y'); Resultado -> '2013-05-01' http://dev.mysql.com/doc/refman/5.5/en/date-and-time-function 75 Funções para datas DATE_FORMAT(date,format) Formata o valor da data de acordo com a string de formato mysql> SELECT DATE_FORMAT('2009-10-04 22:23:00', '%W %M %Y'); -> 'Sunday October 2009' mysql> SELECT DATE_FORMAT('2007-10-04 22:23:00', '%H:%i:%s'); -> '22:23:00' http://dev.mysql.com/doc/refman/5.5/en/date-and-time-fu 76 Formatos 77 Mais funções CURRENT_DATE(), CURRENT_DATE, CURDATE() NOW(): data e hora atual LAST_INSERT_ID(): autoincrement USER() VERSION(): versão do MySQL LOWER(): para minúsculas UPPER(): para maiúsculas FORMAT(): casas decimais 78 Atualização de dados UPDATE tbl_name SET col_name1={expr1} [, col_name2={expr2}] … [WHERE where_condition] UPDATE employees SET first_name = 'Ana Maria' where id = 100; 79 Atualização com Workbench 80 Consultas Para selecionar todas as colunas * SELECT * FROM employees; Para especificar apenas algumas colunas SELECT first_name, last_name FROM employees; 81 SELECT Para limitar o número de linhas do resultado > SELECT * FROM employees LIMIT 10; Para filtrar nomes > 'M' > SELECT * FROM `myexample`.`employees` WHERE last_name > 'M'; 82 SELECT AND para combinar vários filtros (last names > 'M' and < 'ST') SELECT * FROM `myexample`.`employees` WHERE last_name > 'M' AND last_name > 'ST' 83 SELECT OR SELECT * FROM employees WHERE last_name < 'M' OR last_name > 'ST' Substring SELECT * FROM employees WHERE last_name like '%s%' OR first_name like 'J%'; 84 Outros operadores IS NOT NULL IS NULL DIV: divisão inteira <> ou != : diferente % ou MOD: módulo <=, >= http://dev.mysql.com/doc/refman/5.5/en/non-typed-o 85 SELECT e funções Select now(); Select user(), version(); Select count(last_name) from employees; Max(), min(), avg(), sum() Select COUNT(last_name) from employees Where CHAR_LENGTH(last_name) > 5; 86 Junções 87 Junções SELECT employees.*, dept.* from employees, dept WHERE employees.dept_id = dept.dept_id; 88 Exercícios consultas Criar no workbench o projeto do congresso, apresentando neste material Salvar modelo do diagrama e scripts sql de criação do esquema Inserir dados em todas as tabelas Realizar as seguintes consultas: 1) Buscar descrição das matérias votadas no dia 01-05-2011 2) Buscar nome dos congressistas do partido PV 3) Buscar nome da coligação de sigla MMM 89 Exercícios consultas 4) Buscar voto dado pelo congressista João na matéria com a descrição ABCD 5) Buscar nome e data da última eleição dos congressistas do PR 6) Buscar nome dos congressistas da coligação XYZ que tenham sido eleitos mais de 2x 7) Buscar nome e número de vezes em que foi eleito os congressistas da coligação XXX que são da região nordeste 8) Alterar nome da coligação de código 1 para “Para frente e avante” 90 Exercício projeto 1 A loja ABCXYZ comercializa produtos de limpeza. Os produtos são catalogados em categorias. Cada categoria tem um código, um nome e o número da prateleira em que os produtos da categoria localizamse na loja. Cada produto pertence a apenas uma categoria. São armazenados dados sobre os produtos vendidos (código, descrição e preço). Também armazena-se os dados do cliente que efetuou a compra (CPF, nome, endereço, telefone), os dados da compra realizada por cada cliente (número da nota fiscal, data, valor total da nota), bem como cada produto de uma compra, com suas respectivas quantidades e o valor do item (preço unitário do 91 produto multiplicado pela quantidade comprada). Exercício projeto 2 Uma delegacia de polícia precisa de um sistema computadorizado para controlar seus dados. Este sistema deverá catalogar os criminosos, as vítimas e as armas utilizadas para praticar os delitos. Além de armazenar dados pessoais dos criminosos, vítimas e armas, o banco de dados também deve permitir saber quais crimes determinado criminoso cometeu, que crimes determinada vítima sofreu e quais armas foram utilizadas para atacar cada uma das vítimas em cada crime. Estas informações possibilitarão a emissão de relatórios e estatísticas de acordo com as necessidades das autoridades judiciais. Observe que em um crime podem ser utilizadas várias armas para atacar várias vítimas. Um crime pode envolver várias vítimas e vários criminosos. 92 Exercício projeto 3 O sistema refere-se ao controle de campeonatos de futebol. Cada campeonato tem um nome, uma data de início e uma data de término. Participam dos campeonatos várias equipes. Cada equipe possui um nome, nome de seu técnico, nome de seus jogadores, indicando se é titular ou reserva e cor da camisa dos uniformes número 1 e 2. Deve-se relacionar com cada equipe, as informações sobre a que país pertence. Cada país possui nome, continente, população, tamanho em km quadrados, renda per capita e condição (país desenvolvido, em desenvolvimento ou subdesenvolvido). Devem ser guardadas informações sobre as partidas realizadas. Sobre cada partida deve-se guardar as equipes participantes, o placar, o nome do juiz principal, a 93 localização do campo (cidade) e o nome do campo. Trabalho – aula 1 (35% da nota da disciplina) Elaborar os diagramas do projeto de banco de dados com o workbench (exercícios 1, 2 e 3) (entregar imagem e arquivo .mwb) Entregar scripts DDL de criação das tabelas Entregar scripts DDL de inserção de dados Prazo para entrega: 09 de junho 94