Comunicação Digital – Elementos de TI Introdução a Banco de Dados com exercícios de aplicação: implementação e testes Prof.: Sandro Rigo Conceitos de Banco de dados Roteiro: • Revisão de conceitos básicos • Caso de estudo: filmes • Estrutura proposta em aula • Implemementação • Exercícios Revisão de conceitos básicos Dados: indicações de fatos que podem ser armazenados e tratados individualmente. Base de dados: conjunto de dados relacionados entre si com alguma lógica particular. Sistema Gerenciador de Banco de Dados (SGBD): aplicação integrada contendo funções necessárias para a criação, manutenção e gerência de bases de dados. Revisão de conceitos básicos cf. Matoso Revisão de conceitos básicos Componentes: Nome do CD Data do CD gênero número de trilhas Nome da banda ......... Nome do CD Data do CD gênero número de trilhas Nome da banda chave primária Nome da banda Componentes da banda discografia notas campo registro tabelas Chave estrangeira Conceitos Básicos de Bancos de Dados Campos (atributos): elementos unitários de um agrupamento de dados, representando atributos de entidade do mundo real Registro (tupla): conjunto único de campos, representando entidade do mundo real Tabela : organização de campos e de registros Chave: elemento (campo) usado na identificação de registros em tabelas, ou na geração de índices Chave-primária: utilizada na identificação de registros em uma tabela Chave-estrangeira: utilizada para indicação de relações entre tabelas Conceitos Básicos de Bancos de Dados Linguagem de consulta Permite: - a descrição de tabelas, com indicações de campos e tipo de dado para cada campo - a aplicação de operações de álgebra relacional, como seleção, projeção ou junção. Linguagem de consulta Caso de estudo: http://www.imdb.com Exercício: Tratar a modelagem de um conjunto de tabelas e de operações para uma base de dados de filmes produzidos por alunos de um curso de comunicação digital Resumo das propostas Campo Tabela “filmes” Tipo Nulo Padrão id int(11) Não nome varchar(80) Não tipo int(11) Não 0 ano int(11) Não 0 duracao tinyint(4) Não 0 produtora int(11) Não 0 diretor int(11) Não 0 site varchar(160) Não genero int(11) Não 0 roteirista int(11) Não 0 sinopse varchar(255) Não cartaz int(11) Não 0 fotos int(11) Não 0 curiosidades varchar(200) Não cenas int(11) Não 0 nota float Não 0 lancamento date Não 0000-00-00 professor_resp int(11) Não 0 classificacao tinyint(4) Não 0 justificativa varchar(120) Não origem varchar(40) Não Resumo das propostas Tabelas “genero” Campo Tipo Nulo id int(11) Não nome varchar(30) Não observacoes varchar(255) Não Padrão e Campo Tipo Nulo “tipo” id int(11) Não nome varchar(30) Não obs varchar(255) Não Padrão Resumo das propostas tabela “equipe” Campo Tipo Nulo id int(11) Não nome varchar(60) Não nacionalidade varchar(60) Não data_nascim date Não premios varchar(120) Não naturalidade varchar(60) Não mini_biografia varchar(255) Não home_page varchar(120) Não email varchar(120) Não sexo char(1) Não Padrão 0000-00-00 Resumo das propostas tabela “funcao” Campo Tipo Nulo id int(11) Não nome varchar(60) Não obs varchar(255) Não Padrão Resumo das propostas Tabelas de ligação “filme-atores Campo Tipo Nulo Padrão id_filme int(11) Não 0 id_atores int(11) Não 0 Campo Tipo Nulo Padrão Equipe-funcao id_equipe int(11) Não 0 id_funcao int(11) Não 0 Resumo das propostas Resumo das propostas Possibilidades: • consulta de filmes por nome • consulta de filmes por diretor/atores/.... • consulta de atores por filme • consulta de filmografia • acesso a cartaz/imagens/cenas • outras... Implementação • SGBD: MySql • interface web phpMyAdmin Implementação Etapa 1: criação da base de dados Implementação CREATE TABLE `filme` (`id` INT NOT NULL AUTO_INCREMENT , `nome` VARCHAR( 80 ) NOT NULL , `tipo` INT NOT NULL , `ano` INT NOT NULL , `duracao` TINYINT NOT NULL , `produtora` INT NOT NULL , `diretor` INT NOT NULL , `site` VARCHAR( 160 ) NOT NULL , `genero` INT NOT NULL , `roteirista` INT NOT NULL , `sinopse` VARCHAR( 255 ) NOT NULL , `cartaz` INT NOT NULL , `fotos` INT NOT NULL , `curiosidades` VARCHAR( 200 ) NOT NULL , `cenas` INT NOT NULL , `nota` FLOAT NOT NULL , `lancamento` DATE NOT NULL , `professor_resp` INT NOT NULL , `classificacao` TINYINT NOT NULL , `justificativa` VARCHAR( 120 ) NOT NULL , `origem` VARCHAR( 40 ) NOT NULL , UNIQUE (`id` )); Implementação Etapa 1: criação da base de dados Implementação Etapa 1: criação da base de dados Implementação CREATE TABLE `genero` (`id` INT NOT NULL AUTO_INCREMENT , `nome` VARCHAR( 30 ) NOT NULL , `observacoes` VARCHAR( 255 ) NOT NULL , PRIMARY KEY ( `id` ) ); CREATE TABLE `tipo` (`id` INT NOT NULL AUTO_INCREMENT , `nome` VARCHAR( 30 ) NOT NULL , `obs` VARCHAR( 255 ) NOT NULL , PRIMARY KEY ( `id` ) ); CREATE TABLE `funcao` (`id` INT NOT NULL AUTO_INCREMENT , `nome` VARCHAR( 60 ) NOT NULL , `obs` VARCHAR( 255 ) NOT NULL , PRIMARY KEY ( `id` ) ); Implementação Etapa 1: criação da base de dados Implementação CREATE TABLE `equipe` (`id` INT NOT NULL AUTO_INCREMENT , `nome` VARCHAR( 60 ) NOT NULL , `nacionalidade` VARCHAR( 60 ) NOT NULL , `data_nascim` DATE NOT NULL , `premios` VARCHAR( 120 ) NOT NULL , `naturalidade` VARCHAR( 60 ) NOT NULL , `mini_biografia` VARCHAR( 255 ) NOT NULL , `home_page` VARCHAR( 120 ) NOT NULL , `email` VARCHAR( 120 ) NOT NULL , `sexo` CHAR( 1 ) NOT NULL , PRIMARY KEY ( `id` ) ); Implementação Etapa 1: criação da base de dados Implementação Etapa 1: criação da base de dados Implementação Etapa 1: criação da base de dados Implementação Etapa 2: inserção de dados Implementação INSERT INTO `tipo` ( `id` , `nome` , `obs` ) VALUES ('', 'curta', 'observações para o curta' ), ('', 'longa', 'observações para o longa' ); Implementação Etapa 3: consulta de dados Implementação Etapa 3: consulta de dados Implementação Etapa 3: consulta de dados Implementação Etapa 4: edição de dados Implementação UPDATE `genero` SET `observacoes` = 'observações para o gênero comédia' WHERE `id` = '2' LIMIT 1 ; Implementação comando SQL: INSERT INTO `filme` ( `id` , `nome` , `tipo` , `ano` , `duracao` , `produtora` , `diretor` , `site` , `genero` , `roteirista` , `sinopse` , `cartaz` , `fotos` , `curiosidades` , `cenas` , `nota` , `lancamento` , `professor_resp` , `classificacao` , `justificativa` , `origem` ) VALUES ('', 'nome filme tres', '2', '2002', '120', '0', '4', 'site filme tres', '4', '2', 'sinopse', '0', '0', 'curiosidades', '0', '10', '2003-01-01', '0', '0', 'justificativa', 'brasileira' ), ('', 'nome filme quatro', '2', '2005', '110', '0', '1', 'site', '4', '1', 'sinopse', '0', '0', 'curiosidades', '0', '0', '2205-02-02', '0', '0', 'justificativa', 'brasileiro' ); Implementação ...mais consultas Implementação ...mais consultas Implementação ...mais consultas Implementação ...mais consultas Implementação funcao 1 2 3 4 5 6 diretor de cena ator roteirista produtor diretor de arte diretor de fotografia obs. para diretor obs. para ator obs. para roteirista obs. obs. obs. gênero 1 drama observações para o gênero drama 2 comédia observações para o gênero comédia 3 aventura observações para o gênero aventura 4 musical observações para o gênero musical tipo 1 curta observações para o curta 2 longa observações para o longa equipe funcao 1 1 2 3 3 2 4 2 4 1 1 2 1 3 filme atores 1 3 1 4 2 3 2 4 3 3 3 1 4 3 4 4 4 1 Implementação ...mais consultas Implementação SELECT e.nome, f.nome FROM equipe e, equipe_funcao ef, funcao f WHERE e.id = ef.id_equipe AND f.id = ef.id_funcao Implementação ...mais consultas Implementação SELECT e.nome, f.nome FROM equipe e, filme f, filme_atores fa WHERE e.id = fa.id_atores AND f.id = fa.id_filme AND e.nome like 'nome 4' Implementação ...mais consultas Implementação ...mais consultas Implementação ... Implementação Implementação -- phpMyAdmin SQL Dump -- version 2.6.1-rc1 -- http://www.phpmyadmin.net --- Servidor: localhost -- Tempo de Generação: Abr 14, 2005 at 03:01 PM -- Versão do Servidor: 3.23.58 -- Versão do PHP: 4.2.2 --- Banco de Dados: `elti_filme` --- ---------------------------------------------------------- Estrutura da tabela `equipe` -CREATE TABLE `equipe` ( `id` int(11) NOT NULL auto_increment, `nome` varchar(60) NOT NULL default '', `nacionalidade` varchar(60) NOT NULL default '', `data_nascim` date NOT NULL default '0000-00-00', `premios` varchar(120) NOT NULL default '', `naturalidade` varchar(60) NOT NULL default '', `mini_biografia` varchar(255) NOT NULL default '', `home_page` varchar(120) NOT NULL default '', `email` varchar(120) NOT NULL default '', `sexo` char(1) NOT NULL default '', PRIMARY KEY (`id`) ) TYPE=MyISAM AUTO_INCREMENT=1 ; --- Extraindo dados da tabela `equipe` -- -- ---------------------------------------------------------- Estrutura da tabela `filme` Implementação <?xml version="1.0" encoding="iso-8859-1" ?> <!-- phpMyAdmin XML Dump - version 2.6.1-rc1 - http://www.phpmyadmin.net - Servidor: localhost - Tempo de Generação: Abr 14, 2005 at 03:20 PM - Versão do Servidor: 3.23.58 - Versão do PHP: 4.2.2 --> <!-- Banco de Dados: `elti_filme`