Organização e Acesso a Dados - Exercício Uma empresa pretende desenvolver uma base de dados que lhe permita manter controlo sobre as compra de produtos que faz aos fornecedores: • Uma compra tem um número e uma data, é feita a um único fornecedor, podendo incluir várias linhas, uma para cada produto e respectiva quantidade. • Um produto é caracterizado pela sua descrição, mas pode estar disponível em vários fornecedores com preços diferentes. • Um fornecedor é caracterizado pelo seu nome e morada e disponibiliza vários produtos. Desenhe o diagrama de entidades-relacionamentos Desenhe o esquema das tabelas, indicando todos os campos, chaves primárias e chaves externas Maio.2002 Sistemas de Informação - Administração Pública 1 Diagrama de Entidades Relacionamentos Preço Produtos n n Fornecedores 1 Descrição n Quantidade Nome Morada n n Compras Número Data Maio.2002 Sistemas de Informação - Administração Pública 2 Tabelas Produtos (CodP, Desc) Fornecedores (CodF, Nome, Mor, Quilo, Resp) ProdForn (CodP, CodF, Preco) NOTA: CodP é chave externa de Produtos, CodF é chave externa de Fornecedores Compras (CodC, CodF, Num, Data) NOTA: CodF é chave externa de Fornecedores Linhas (CodC, CodP, Quant) NOTA: CodC é chave externa de Compras, CodP é chave externa de Produtos Maio.2002 Sistemas de Informação - Administração Pública 3 System Query Language (SQL) A linguagem SQL constitui uma norma para: a criação e alteração da estrutura de bases de dados relacionais (componente designada por DDL – Data Definition Language) a consulta e actualização dos dados presentes numa base de dados relacional (DML – Data Manipulation Language) Todos os SGBD relacionais aceitam instruções SQL para definição e manipulação de dados, tornando-a assim numa linguagem universal. Maio.2002 Sistemas de Informação - Administração Pública 4 A instrução SELECT As operações de consulta à base de dados são feitas essencialmente usando a instrução SELECT. Esta selecciona linhas de uma ou mais tabelas, apresentado os seus resultados também sobre a forma de uma tabela. Sintaxe básica da instrução SELECT: SELECT lista_campos FROM lista_tabelas [WHERE condições] [ORDER BY condição_de_ordenação] [] Maio.2002 indica campos opcionais Sistemas de Informação - Administração Pública 5 A instrução SELECT A lista_de_campos indica quais as colunas que devem aparecer como resultado da query. O Símbolo * indica todos os campos. A lista_de_tabelas indica quais as tabelas a ser consultadas pela query. SELECT * FROM Produtos; SELECT Nome FROM Fornecedores; Maio.2002 Sistemas de Informação - Administração Pública 6 A instrução SELECT A cláusula WHERE permite restringir as linhas devolvidas pela instrução SELECT usando uma condição SELECT * FROM PRODUTOS WHERE CodP>2; SELECT Nome FROM Fornecedores WHERE Morada=“Lisboa”; A cláusula ORDER BY permite ordenar as linhas devolvidas pela instrução SELECT usando um campo da tabela. A palavra ASC indica ordem ascendente, enquanto DESC indica descendente. SELECT Nome FROM Fornecedores WHERE Morada=“Lisboa” ORDER BY Nome; SELECT Nome FROM Fornecedores WHERE Morada=“Lisboa” ORDER BY Nome DESC; Maio.2002 Sistemas de Informação - Administração Pública 7 A instrução SELECT É possível fazer queries que cruzam informação de várias tabelas, sendo aqui que resulta a mais valia desta instrução. Quais os produtos para os quais existe fornecedor? SELECT Descricao FROM produtos, ProdForn WHERE Produtos.CodP=ProdForn.CodP; Para evitar repetições do nome do produto pode-se usar a palavra DISTINCT SELECT DISTINCT Descricao FROM produtos, ProdForn WHERE Produtos.CodP=ProdForn.CodP; Maio.2002 Sistemas de Informação - Administração Pública 8 A instrução SELECT Liste todos os produtos, respectivos fornecedores e preços. SELECT Descricao, Nome, Preco FROM Produtos, Fornecedores, ProdForn WHERE Produtos.CodP=ProdForn.CodP And Fornecedores.CodF=ProdForn.CodF; Ordene por produtos e por preço. SELECT Descricao, Nome, Preco FROM Produtos, Fornecedores, ProdForn WHERE Produtos.CodP=ProdForn.CodP And Fornecedores.CodF=ProdForn.CodF ORDER BY Descricao, Preco; Maio.2002 Sistemas de Informação - Administração Pública 9 A instrução SELECT Liste todos os fornecedores aos quais já foram feitas compras SELECT DISTINCT Nome FROM Fornecedores, Compras WHERE Fornecedores.CodF=Compras.CodF; Liste todos os fornecedores aos quais já foram feitas compras, mostrando as datas e ordenando pelas mesmas SELECT Nome, Data FROM Fornecedores, Compras WHERE Fornecedores.CodF=Compras.CodF ORDER BY Data; Maio.2002 Sistemas de Informação - Administração Pública 10 A instrução SELECT Liste todos os produtos comprados a um determinado fornecedor, por exemplo, BIC. SELECT DISTINCT Descricao FROM Produtos, Fornecedores, Compras, Linhas WHERE Fornecedores.Nome="BIC" And Compras.CodF=Fornecedores.CodF And Linhas.CodC=Compras.CodC And Produtos.CodP=Linhas.CodP; Maio.2002 Sistemas de Informação - Administração Pública 11