Desenvolvimento de Sistemas

12
DSIS4 Desenvolvimento de Sistemas [email protected] Aula 2 Mapeamento ER Modelo Relacional, Acesso ao MySQL utilizando Java 1. Mapeamento do Diagrama ER para o Modelo Relacional 1.1. Entidades Regulares Para cada conjunto de entidades criar uma relação (tabela). Para cada atributo simples incluir uma coluna na tabela. No caso de atributo composto, incluir somente os atributos simples que o compõem. FUNCIONARIO CPF primeiroNome nomeDoMeio sobreNome salario 1.2. Entidades Fracas Criar uma tabela para cada conjunto de entidades fracas. Incluir como chave estrangeira a chave primária da tabela de entidades dominantes. As entidades fracas têm chave primária composta de duas partes: o A chave primária da tabela de entidades dominantes o A chave parcial do conjunto de entidades fracas. FUNCIONARIO DEPENDENTE CPF nome salario CPFResponsavel nome dataNasc 1.3. Relacionamentos: Um para Um Devem ser identificadas duas tabelas, uma para cada conjunto de entidades que participa do relacionamento. Numa delas incluir como chave estrangeira a chave primária da outra. o Se o relacionamento for total num dos dois conjuntos de entidades, é melhor incluir a chave estrangeira no “lado total”. Incluir também colunas com os atributos do relacionamento.

description

Pdf sobre Desenvolvimento de Sistemas

Transcript of Desenvolvimento de Sistemas

DSIS4 Desenvolvimento de Sistemas [email protected] Aula 2 Mapeamento ER Modelo Relacional, Acesso ao MySQL utilizando Java 1.Mapeamento do Diagrama ER para o Modelo Relacional 1.1.Entidades Regulares Para cada conjunto de entidades criar uma relao (tabela). Para cada atributo simples incluir uma coluna na tabela. No caso de atributo composto, incluir somente os atributos simples que o compem. FUNCIONARIO CPFprimeiroNomenomeDoMeiosobreNomesalario 1.2.Entidades Fracas Criar uma tabela para cada conjunto de entidades fracas. Incluir como chave estrangeira a chave primria da tabela de entidades dominantes. As entidades fracas tm chave primria composta de duas partes: oA chave primria da tabela de entidades dominantes oA chave parcial do conjunto de entidades fracas. FUNCIONARIO DEPENDENTE CPFnome salario CPFResponsavelnomedataNasc 1.3.Relacionamentos: Um para Um Devem ser identificadas duas tabelas, uma para cada conjunto de entidades que participa do relacionamento. Numa delas incluir como chave estrangeira a chave primria da outra. oSe o relacionamento for total num dos dois conjuntos de entidades, melhor incluir a chave estrangeira no lado total. Incluir tambm colunas com os atributos do relacionamento. FUNCIONARIO DEPARTAMENTO CPFnomesalario codDeptodescricaoCPFGerentedataInicio 1.4.Relacionamentos: Muitos para Um Pode-se identificarduastabelas,umaparacadaconjuntode entidadesqueparticipamdo relacionamento. Incluir como chave estrangeira, na tabela do lado muitos (o lado N), a chave primria da tabela do lado um. Incluir tambm as colunas com os atributos do relacionamento. FUNCIONARIO DEPARTAMENTO CPFnomesalariocodDeptodataLocacao codDeptodescricao 1.5.Relacionamentos: Muitos para Muitos Pode-seidentificarduastabelas,umaparacadaconjuntodeentidadesqueparticipado relacionamento.Criarumanovatabelacontendo,comochavesestrangeiras,aschaves primrias dessas duas tabelas. oA combinao dessas chaves estrangeiras forma a chave primria da nova tabela. Incluir tambm as colunas com os atributos do relacionamento. FUNCIONARIO ALOCACAO PROJETO CPFnomesalario CPFcodProjeto horas codigodescricaodataIniciodataFim 1.6.Atributos Multivalorados Para cada atributo multivalorado criar uma tabela contendo: oComochave estrangeira,achave primriadatabelaquerepresentaoconjuntode entidades que tm o atributo multivalorado. oO valor do atributo. A chave primria da nova tabela a combinao da chave estrangeira e do valor do atributo. FUNCIONARIO FONE CPFnome salario CPFFuncionarionumeroFone 1.7.Relacionamentos de Grau maior que dois Criar uma nova tabela contendo, como chaves estrangeiras, as chaves primrias das tabelas que representam os conjuntos de entidades participantes. oNormalmenteacombinaodessaschaves estrangeiras formaachave primriada nova tabela. Masseacardinalidademximadeumadas entidadesparticipantesfor1, entoachave estrangeiraquereferencia essa entidade ficasendoachave primria da nova tabela. VENDAS codFornecedorcodCompradorcodProdutodataqtde 2.Join (Juno) Aoperaodejuno,representadaatravsde|X|,utilizadaparacombinartuplas(linhas) relacionadas de duas ou mais relaes (tabelas) em uma nica linha. Forma Geral: R |X|

S ,ondeReSsoastabelase|X|osmboloquerepresentajuno.Notequenecessrio especificar uma condio para a juno. Essa condio deve utilizar campos das tabelas que possuam o mesmo tipo. 2.1.Inner Join (Juno Interna) |X| Essa juno retorna todos os pares com correspondentes de linhas nas duas tabelas e descarta as linhas sem correspondentes em ambas as tabelas. 2.2.Outer Join (Juno Externa) usada quando queremos manter todas as linhas da tabela R, ou todas as linhas da tabela S, ou todas as linhas de ambas as tabelas, independentemente se elas tm ou no linhas correspondentes na outra tabela. Ela se subdivide em: 2.2.1.Left Outer Join (Juno Externa Esquerda)_|X| Oresultado dessaseleocontmtodososregistrosdatabelaesquerda (isto ,aprimeira tabela mencionada na consulta), mesmo quando no existirem registros correspondentes na tabela direita.Assim,elaretornatodososvaloresdatabelaesquerdaquepossuemvalores correspondentes na tabela da direita, ou Null quando no h correspondncia.

2.2.2.Right Outer Join (Juno Externa Direita) |X|_ Essa operao inversa anterior. Ela retorna sempre todos os registros da tabela direita (asegundatabelamencionadanaconsulta),mesmosenoexistirumregistrocorrespondentena tabela esquerda. Nesses casos, o valor Null retornado. 2.2.3.Full Outer Join (Juno Externa Total) _|X|_ Essa operao mostra todos os registros das tabelas esquerda e direita, mesmo que no possuam correspondncia na outra tabela. A tabela combinada possuir todos os registros de ambas as tabelas e apresentar valores nulos para os registros sem correspondncia. Exemplo: Dadas duas tabelas, chamadas Montadora e Veculo, vamos analisar os quatro tipos de juno. CodigoMontadora NomeMontadora CodigoModelo NomeModelo CodigoMontadora1 GM 10 Gol 52 Honda 20 Palio 43 Toyota 30 Corsa 14 Fiat 40 Civic 25 Volkswagen 50 Clio Null6 FordMontadora Veiculo Inner Join: Montadora |X|

Veiculo CodigoMontadora NomeMontadora CodigoModelo NomeModelo1 GM 30 Corsa2 Honda 40 Civic4 Fiat 20 Palio5 Volkswagen 10 Gol Left Outer Join Montadora _|X|

Veiculo CodigoMontadora NomeMontadora CodigoModelo NomeModelo1 GM 30 Corsa2 Honda 40 Civic3 Toyota Null Null4 Fiat 20 Palio5 Volkswagen 10 Gol6 Ford Null Null Right Outer Join Montadora |X|_

Veiculo CodigoMontadora NomeMontadora CodigoModelo NomeModelo5 Volkswagen 10 Gol4 Fiat 20 Palio1 GM 30 Corsa2 Honda 40 CivicNull Null 50 Clio Full Outer Join Montadora _|X|_

Veiculo CodigoMontadora NomeMontadora CodigoModelo NomeModelo1 GM 30 Corsa2 Honda 40 Civic3 Toyota Null Null4 Fiat 20 Palio5 Volkswagen 10 Gol6 Ford Null NullNull Null 50 Clio Veja o cdigo SQL para: Inner Join SELECT M.codMontadora, M.descricaoMontadora, V.codVeiculo, V.nomeVeiculo FROM Montadora M, Veiculo V WHERE M.codMontadora = V.codMontadora; SELECT M.codMontadora, M.descricaoMontadora, V.codVeiculo, V.nomeVeiculo FROM Montadora M INNER JOIN Veiculo V ON M.codMontadora = V.codMontadora; Left Outer Join SELECT M.codMontadora, M.descricaoMontadora, V.codVeiculo, V.nomeVeiculo FROM Montadora M LEFT OUTER JOIN Veiculo V ON M.codMontadora = V.codMontadora; Right Outer Join SELECT M.codMontadora, M.descricaoMontadora, V.codVeiculo, V.nomeVeiculo FROM Montadora M RIGHT OUTER JOIN Veiculo V ON M.codMontadora = V.codMontadora; 3.Exerccios 3.1.Dadas as tabelas abaixo, escreva o cdigo SQL para as questes de 1 a 5.CLIENTE CodClienteNroContaNomeDataNascEnderecoCidade 110020Ronaldo20/07/1980Rua Cinco 167So Paulo 2NullKlber13/04/1986Rua Mato 211Santos 310014Mrcia28/11/1982Av Par 2560Bauru 410028Joana13/04/1986Rua Gois 479So Paulo 5NullAlethia28/11/1982Av JK 2100Jundia CONTA NroContaAgenciaSaldo 10020SPCAP300 10075SPLIT7000 10014SPINT2100 10028SPCAP890 10077SPINT1070 a)Qual o nmero da conta da cliente Joana?b)Quais clientes moram na cidade de So Paulo? c)Quais clientes nasceram em 13/04/1986 e so da cidade de Santos? d)Qual o resultado de CLIENTE |X| CONTA?e)Qual o resultado de CLIENTE _|X| CONTA? 3.2.Dadas as tabelas: Mari nhei ro Barco codMari nhei ronomeavaliacaoi dade codBarcodescri caocor 22Dusti n745 101Interl akeazul 29Brutus133 102Interl akevermel ho 31Lubber 855 103Cli pperverde 32Andy825 104Mari nevermel ho 58Rusty1035 64Horati o735 Reserva 71Zorba1016 codMari nhei rocodBarcodata 74Horati o935 2210110/10/2013 85Art325 2210210/10/2013 95Bob363 2210308/10/2013 2210407/10/2013

3110210/11/2013

3110306/11/2013 3110412/11/2013

6410105/09/2013

6410205/09/2013 7410308/09/2013 a)Encontre os nomes dos marinheiros que reservaram o barco 103. b)Encontre os cdigos dos marinheiros que reservaram um barco vermelho. c)Encontre os nomes dos marinheiros que reservaram um barco vermelho. d)Encontre os nomes dos marinheiros que reservaram pelo menos um barco. 3.3.Dado o esquema relacional a seguir: Funcionario (CodFuncionario, Nome, Endereco, Sexo, Salario, Supervisor, Departamento) Departamento(CodDepto, Descricao, CodGerente) Projeto(CodProjeto, Descricao, Departamento) Alocacao(CodFuncionario, CodProjeto, QtdeHoras) Dependentes(CodFuncionario, NomeDependente, Sexo, DataNascimento, Parentesco) Escreva o cdigo SQL que: a) Selecione os funcionrios que trabalham no departamento 8. b) Selecione os funcionrios que ganham mais do que R$ 3.000, 00. c)Selecioneosfuncionriosqueganham maisdeR$2.000,00etrabalhamnodepartamento4,ou que ganham menos de R$500,00 e trabalham no departamento 5. d) Obtenha o nome e salrio dos funcionrios do departamento 5. 4.Acesso ao banco de dados OprimeiropassoparaestabelecerumaconexocomobancodedadosconheceraAPI (ApplicationProgrammingInterface)JDBC(JavaDatabaseConnectivity).JDBCumpadroda indstriaparaestabeleceraconexoentrealinguagemdeprogramaoJavaeumagrande quantidade de bases de dados. Por meio do JDBC, possvel realizar trs tarefas: Estabelecer uma conexo com o banco de dados; Enviar declaraes SQL; Processar os resultados; A API JDBC composta por dois pacotes:java.sql javax.sql OconjuntodeinterfacesJDBCquepermitemaexecuodeconsultas,persistnciade informaes,fechamentodeconexes,dentreoutros,ficamnopacotejava.sql.Asclassesque implementam essas interfaces faro a ponte entre o cdigo cliente (que utiliza a API JDBC) e o banco de dados. Esse conjunto de classes conhecido como driver. . Para obter o driver relacionado a um determinado banco de dados, verifique a pgina de download de drivers do SGBD. Exemplos: MySQL (http://dev.mysql.com/downloads/connector/j/) Oracle (http://www.oracle.com/technetwork/database/features/jdbc/index-091264.html) Para nosso caso, teremos um driver para o banco de dados MySQL. VejaaseguirospassosparacriarumaconexocomobancodedadosMySQLpormeioda linguagem Java: 1)CrieumnovoprojetonoNetBeans,especificandoacategoriacomoJavaeoprojetocomo Aplicativo Java. 2)InformecomonomedeprojetoAula02_ConexaoBD.Apsisso,crieaclasseConexaoBD. possvel criar a classe e j inclu-la no pacote br.edu.ifsp.aplicacaoteste. Veja: 3)Com o projeto criado, digite o cdigo abaixo na classe ConexaoBD: Observao: preciso que o banco de dados biblioteca exista. package br.edu.ifsp.aplicacaoteste; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class ConexaoBD { public static void main(String[] args) { Connection conexao; String url = "jdbc:mysql://localhost:3306/biblioteca"; String usuario = "root"; String senha = "root"; try { Class.forName("com.mysql.jdbc.Driver"); conexao = DriverManager.getConnection(url, usuario, senha); System.out.println("Conexo Efetuada!"); conexao.close(); } catch (SQLException e) { throw new RuntimeException(e); } catch (Exception e) { throw new RuntimeException(e); } } } 4)Clique em Executar. Observao: Ao tentar executar o projeto, ir ocorrer o seguinte erro: Exceptioninthread"main"java.lang.RuntimeException: java.lang.ClassNotFoundException: com.mysql.jdbc.Driver at br.edu.ifsparq.ConexaoBD.main(ConexaoBD.java:21) Isso significa que a aplicao no encontrou uma implementao do driver JDBC para estabelecer a conexo com o banco de dados. Parasolucionaresseproblema,cliquecomobotodireitonapastaBibliotecaeescolhaa opo Adicionar biblioteca... (o NetBeans j possui o driver; no necessrio efetuar o download). Apsisso,selecioneodriverparaoMySQL(MySQLJDBCDriver)ecliquenobotoAdicionar biblioteca. Observe que a biblioteca MySQl JDBC Driver foi adicionada ao projeto. Dica: Para incluir o driver mais atual, v athttp://www.mysql.com/downloads/connector/ e clique em Connector/J. Escolha a verso .zip e faa o download. Aps descompactar o arquivo em uma pastalocal, efetueomesmo procedimentoparaincluirabiblioteca.Anicadiferenaquevoc deve selecionar Adicionar JAR/pasta e especificar o arquivo jar que est dentro da pasta local. 4.1.Entenda o Cdigo Registrando o driver JDBC para o MySQL Na linha Class.forName("com.mysql.jdbc.Driver"); O mtodo forName() retorna o objetoassociado com a string com.mysql.jdbc.Driver, ou seja, o driver para o MySQL. A partir do JDBC 4.0 (Java SE 6.0), no mais necessrio especificar essa linha de maneiraexplcita.Quandoo mtodogetConnection() chamado,ele mesmoirtentar localizar um driver JDBC. Portanto, daqui para frente, no irei inclu-la nos cdigos fonte. Interface Connection Um objeto que implementa a interface Connection gerencia a conexo entre o programa Java e o banco de dados e permite a criao de instrues SQL que acessem o banco de dados. Na linha conexao = DriverManager.getConnection(url, usuario, senha); o programa inicializa o objeto conexao (do tipo Connection) com o resultado de uma chamada aomtodoestticogetConnection(),quepertenceclasseDriverManager(pacotejava.sql).O mtodo getConnection() recebe trs argumentos: uma string que especifica o url do banco de dados, o nome de usurio e sua senha. Ourlespecificaoprotocolodecomunicao(jdbc),indicaqueoprotocoloutilizaum subprotocolo especficoparaoMySQL(mysql), etambmcontma localizao do bancodedados (localhost:3306/biblioteca ). Veja: jdbc:mysql://localhost:3306/biblioteca Na linha conexao.close(); realizadoofechamentodaconexocomobancodedados.Valeenfatizarqueefetuaro fechamentodaconexodeextremaimportnciaparaaseguranadaaplicaoeliberaode recursos JDBC. 5.Efetuando uma consulta simples O cdigo fornecido a seguir permite a consulta e impresso de informaes da tabela Aluno. Pr-requisitos: a)Criao do banco de dados Escola. Utilize o MySQL Workbench para criar o novo banco de dados. b)Criao da tabela Aluno no banco de dados Escola. Observao: a tabela Curso criada somente para permitir que a tabela Aluno contenha a coluna codCurso como chave estrangeira. CREATE TABLE Curso( codCurso INT AUTO_INCREMENT, nomeCursoVARCHAR(30), deptoVARCHAR(30), PRIMARY KEY(codCurso) ); CREATE TABLE Aluno( codAlunoint auto_increment, nomeVARCHAR(40), cpf VARCHAR(11), foneVARCHAR(13), codCursoINT, PRIMARY KEY(codAluno), FOREIGN KEY (codCurso) REFERENCES Curso (codCurso) ); c)Insero de dados na tabela Aluno. INSERT INTO Curso (nomeCurso, depto) VALUES('Computao', 'Cincias Exatas'), ('Direito', 'Cincias Humanas'); INSERT INTO Aluno (nome, cpf, fone, codCurso) VALUES('Joozinho', '1234', '8118', 2), ('Carla', '4567', '8117', 1), ('Priscila', '8901', '9275', 1); Cdigo Java: package br.edu.ifsp.nomeaplicacao; import java.sql.*; public class ConexaoBD { public static void main(String[] args) { Connection con = null; Statement st = null; ResultSet rs = null; String url = "jdbc:mysql://localhost:3306/universidade"; String usuario = "root"; String senha = "root"; try { con = DriverManager.getConnection(url, usuario, senha); st = con.createStatement(); rs = st.executeQuery("select * from aluno;"); while (rs.next()) { int codigo = rs.Int("codAluno"); String nome = rs.getString("nome"); String cpf = rs.getString("cpf"); String fone = rs.getString("fone"); int codCurso = rs.Int("codCurso"); System.out.println("Cdigo Aluno: " + codigo + ", Nome: " + nome + ", CPF: " + cpf + ", Fone: " + fone + ", Cdigo Curso: " + codCurso); }} catch (SQLException e) { throw new RuntimeException(e); } finally { try { if (rs != null) { rs.close(); } if (st != null) { st.close(); } if (con != null) { con.close(); } } catch (SQLException e) { throw new RuntimeException(e); }} } } 5.1.Entenda o Cdigo Interface Statement O programa utiliza o objeto Statement para enviar instrues SQL ao banco de dados e obter os resultados produzidos por elas. O mtodo executeQuery() utilizado para executar a instruo SQL. Mtodo executeQuery() OmtodoexecuteQuery()utilizadoparasubmeterumaconsultaSQLqueselecionaas informaes sobre os alunos. Interface ResultSet AinterfaceResultSetfornecemtodospararecuperar emanipularosresultadosdasconsultas SQL.Existemmtodosespecficos (getString,getInt, etc)pararecuperarosvalores dascolunasde uma linha. possvel recuperar as informaes utilizando-se o nmero da coluna ou o alias (nome) dacoluna.Valeressaltarquearecuperaopormeiodondicemaiseficiente.Quandoum ResultSet criado, o cursor posicionado antes da primeira linha. O cursor movido para prxima linha atravs do mtodo next(). Esse mtodo retorna verdadeiro se o cursor estiver posicionado em uma linha e falso, caso o cursor esteja posicionado aps a ltima linha. 6.Exerccios 6.1.Escrevaumprogramaque permitaaconsulta deinformaesutilizando um menucomas seguintes opes: 1)Listar Cursos 2)Listar Alunos 3)Listar Departamentos Observao: As informaes do departamento devem ser armazenadas em uma nova tabela. 6.2.Escreva um programa que, baseando-se nas tabelas Marinheiro, Barco e Reserva, liste todas as reservas de barcos, contendo as seguintes colunas: Nome do Marinheiro Descrio do Barco Cor do Barco Desafio: Tente listar tambm a data da reserva. 6.3.Elabore um conjunto de tabelas para a seguinte situao:Luiz Felipe comprou um conjunto de casas em um condomnio. Agora ele quer criar um sistema que seja capaz de ajud-lo no controle do aluguel e avarias (problemas) das casas. Alm do nome, endereo (rua, nmero, cep,cidade) etelefonedocondomnio, elequerarmazenar o endereodacasa(rua,lote, nmero), o valor do aluguel e a data na qual ela foi alugada. Um cliente (nome, cpf, salario, datadenascimento)podealugarvriascasasaomesmotempo.Nocasodasavarias, existem trs tipos: eltrica, estrutural ou hidrulica. Deve existir um campo que contenha a descrio da avaria, a data na qual ela ocorreu e a data na qual foi solucionada.