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 da banda Componentes da banda discografia notas chave primária ......... Nome do CD Data do CD gênero número de trilhas Nome da banda 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 Tabela “filmes” filme Campo Tipo Nulo Padrão id int(11) Não nome varchar(80) tipo 0 ano duracao tinyint(4) produtora diretor site varchar(160) genero roteirista sinopse varchar(255) cartaz fotos curiosidades varchar(200) cenas nota float lancamento date 0000-00-00 professor_resp classificacao justificativa varchar(120) origem varchar(40)
Resumo das propostas Tabelas “genero” e “tipo” Campo Tipo Nulo Padrão id int(11) Não nome varchar(30) observacoes varchar(255) Campo Tipo Nulo Padrão id int(11) Não nome varchar(30) obs varchar(255)
Resumo das propostas tabela “equipe” Campo Tipo Nulo Padrão id int(11) Não nome varchar(60) nacionalidade data_nascim date 0000-00-00 premios varchar(120) naturalidade mini_biografia varchar(255) home_page email sexo char(1)
Resumo das propostas tabela “funcao” Campo Tipo Nulo Padrão id int(11) Não nome varchar(60) obs varchar(255)
Resumo das propostas Tabelas de ligação “filme-atores Equipe-funcao Campo Tipo Nulo Padrão id_filme int(11) Não 0 id_atores Campo Tipo Nulo Padrão id_equipe int(11) Não 0 id_funcao
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 diretor de cena obs. para diretor 2 ator funcao 1 diretor de cena obs. para diretor 2 ator obs. para ator 3 roteirista obs. para roteirista 4 produtor obs. 5 diretor de arte 6 diretor de fotografia gênero drama observações para o gênero drama comédia observações para o gênero comédia aventura observações para o gênero aventura musical observações para o gênero musical tipo curta observações para o curta longa observações para o longa equipe funcao 1 2 3 4 filme atores
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` CREATE TABLE `filme` ( `nome` varchar(80) NOT NULL default '', `tipo` int(11) NOT NULL default '0', `ano` int(11) NOT NULL default '0', `duracao` tinyint(4) NOT NULL default '0', `produtora` int(11) NOT NULL default '0', `diretor` int(11) NOT NULL default '0', `site` varchar(160) NOT NULL default '', `genero` int(11) NOT NULL default '0', `roteirista` int(11) NOT NULL default '0', `sinopse` varchar(255) NOT NULL default '', `cartaz` int(11) NOT NULL default '0', `fotos` int(11) NOT NULL default '0', `curiosidades` varchar(200) NOT NULL default '', `cenas` int(11) NOT NULL default '0', `nota` float NOT NULL default '0', `lancamento` date NOT NULL default '0000-00-00', `professor_resp` int(11) NOT NULL default '0', `classificacao` tinyint(4) NOT NULL default '0', `justificativa` varchar(120) NOT NULL default '', `origem` varchar(40) NOT NULL default '', UNIQUE KEY `id` (`id`) -- Extraindo dados da tabela `filme` -- Estrutura da tabela `funcao` CREATE TABLE `funcao` ( `obs` varchar(255) NOT NULL default '', -- Extraindo dados da tabela `funcao` -- Estrutura da tabela `genero` CREATE TABLE `genero` ( `nome` varchar(30) NOT NULL default '', `observacoes` varchar(255) NOT NULL default '', -- Extraindo dados da tabela `genero` -- Estrutura da tabela `imagens` CREATE TABLE `imagens` ( `legenda` varchar(120) NOT NULL default '', `imagem` varchar(160) NOT NULL default '', `largura` int(11) NOT NULL default '0', `altura` int(11) NOT NULL default '0', `tamanho` int(11) NOT NULL default '0', `creditos` int(11) NOT NULL default '0', `formato` varchar(60) NOT NULL default '', -- Extraindo dados da tabela `imagens` -- Estrutura da tabela `tipo` CREATE TABLE `tipo` ( -- Extraindo dados da tabela `tipo`
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` <elti_filme> <!-- Tabela equipe --> <equipe> <id>1</id> <nome>nome 1</nome> <nacionalidade>nacionalidade 1</nacionalidade> <data_nascim>1990-05-05</data_nascim> <premios>nenhum</premios> <naturalidade>nacionalidade 1</naturalidade> <mini_biografia>mini biografia de .....</mini_biografia> <home_page>http://www.home_page1</home_page> <email>email@servidor.br1</email> <sexo>M</sexo> </equipe> <id>2</id> <nome>nome 2</nome> <nacionalidade>nacionalidade 2</nacionalidade> <data_nascim>1970-06-06</data_nascim> <premios>prêmio tal</premios> <naturalidade>porto alegre / RS</naturalidade> <mini_biografia>biografia 2</mini_biografia> <home_page>http://www.home_page2</home_page> <email>email@servidor.br2</email> <id>3</id> <nome>nome 3</nome> <nacionalidade>brasileira</nacionalidade> <data_nascim>1980-07-07</data_nascim> <naturalidade>naturalidade</naturalidade> <mini_biografia>biografia</mini_biografia> <home_page>http://www.nonononono</home_page> <sexo>F</sexo> <id>4</id> <nome>nome 4</nome> <home_page>http://www.servidor.tal</home_page> <email>email@servidor.xx</email> <!-- Tabela filme --> <!-- Tabela funcao --> <funcao> <nome>diretor de cena</nome> <obs>obs. para diretor</obs> </funcao> <nome>ator</nome> <obs>obs. para ator</obs> <nome>roteirista</nome> <obs>obs. para roteirista</obs> <nome>produtor</nome> <obs>obs.</obs> <id>5</id> <nome>diretor de arte</nome> <id>6</id> <nome>diretor de fotografia</nome> <!-- Tabela genero --> <genero> <nome>drama</nome> <observacoes>observações para o gênero drama</observacoes> </genero> <nome>comédia</nome> <observacoes>observações para o gênero comédia</observacoes> <nome>aventura</nome> <observacoes>observações para o gênero aventura</observacoes> <nome>musical</nome> <observacoes>observações para o gênero musical</observacoes> <!-- Tabela imagens --> <!-- Tabela tipo --> <tipo> <nome>curta</nome> <obs>observações para o curta</obs> </tipo> <nome>longa</nome> <obs>observações para o longa</obs> </elti_filme>