Alberto Simões - Dept Informática - Univ. Minho 1 Bases de Dados (usando Microsoft Access) Alberto...

38
Alberto Simões - Dept Informática - Univ. M inho 1 Bases de Dados (usando Microsoft Access) Alberto Manuel Simões ([email protected] ho.pt)

Transcript of Alberto Simões - Dept Informática - Univ. Minho 1 Bases de Dados (usando Microsoft Access) Alberto...

Page 1: Alberto Simões - Dept Informática - Univ. Minho 1 Bases de Dados (usando Microsoft Access) Alberto Manuel Simões (albie@alfarrabio.di.uminho.pt)

Alberto Simões - Dept Informática - Univ. Minho1

Bases de Dados(usando Microsoft Access)

Alberto Manuel Simões([email protected])

Page 2: Alberto Simões - Dept Informática - Univ. Minho 1 Bases de Dados (usando Microsoft Access) Alberto Manuel Simões (albie@alfarrabio.di.uminho.pt)

Alberto Simões - Dept Informática - Univ. Minho2

Motivação

Qualquer colecção deve estar catalogada; Qualquer catálogo deve permitir pesquisas; Um catálogo não é mais que uma colecção

de registos; Podemos ver uma base de dados como

sendo um catálogo informatizado e com métodos optimizados de pesquisa e armazenamento.

Page 3: Alberto Simões - Dept Informática - Univ. Minho 1 Bases de Dados (usando Microsoft Access) Alberto Manuel Simões (albie@alfarrabio.di.uminho.pt)

Alberto Simões - Dept Informática - Univ. Minho3

Noção de Base de Dados

Qualquer conjunto de registos pode ser visto como uma base de dados;

Um conjunto de registos com a mesma estrutura é denominado por tabela:

Turma Número Nome Rua Localidade

A 1 António Martins Sousa Pires Barcelos

A 2 Maria Irene Joana d'Arc Barcelos

B 1 João Francisco Pires Viegas Pousa

C 2 Manuel Saraiva Almirante Coutinho Barcelos

Page 4: Alberto Simões - Dept Informática - Univ. Minho 1 Bases de Dados (usando Microsoft Access) Alberto Manuel Simões (albie@alfarrabio.di.uminho.pt)

Alberto Simões - Dept Informática - Univ. Minho4

Noção de Base de Dados (2)

A uma linha da tabela chama-se registo;

A cada elemento do registo chama-se campo ou atributo;

Chama-se chave a um campo (ou conjunto de campos) que nunca se repete em toda a tabela;

Da tabela anterior, que chave poderíamos escolher?

Page 5: Alberto Simões - Dept Informática - Univ. Minho 1 Bases de Dados (usando Microsoft Access) Alberto Manuel Simões (albie@alfarrabio.di.uminho.pt)

Alberto Simões - Dept Informática - Univ. Minho5

Tipos de dados

Cada campo de uma tabela tem um tipo de dados definido:– Número;– Texto;– Booleano;– Data;– Moeda

Que tipos de dados associar a cada um do campos da tabela anterior?

Page 6: Alberto Simões - Dept Informática - Univ. Minho 1 Bases de Dados (usando Microsoft Access) Alberto Manuel Simões (albie@alfarrabio.di.uminho.pt)

Alberto Simões - Dept Informática - Univ. Minho6

Divisão de Tabelas

Vamos construir uma base de dados para livros:– Título;– ISBN;– Ano da edição;– Editora;– Colecção;– Autores

Quantos autores é que um livro tem?Teoricamente, não existe limite para o número de autores.

Page 7: Alberto Simões - Dept Informática - Univ. Minho 1 Bases de Dados (usando Microsoft Access) Alberto Manuel Simões (albie@alfarrabio.di.uminho.pt)

Alberto Simões - Dept Informática - Univ. Minho7

Divisão de Tabelas (2)

Soluções:– criar um campo texto, onde se introduziria todos

os nomes dos autores;– criar um número de campos elevado para

armazenar os autores: Ao definir um número de autores elevado para cada livro,

a tabela iria ficar com muitos campos em branco; Qual o número de campos a definir? Ou se define um

número excessivamente exagerado, ou pode sempre ocorrer que venha a aparecer um livro com mais autores que campos disponíveis.

Page 8: Alberto Simões - Dept Informática - Univ. Minho 1 Bases de Dados (usando Microsoft Access) Alberto Manuel Simões (albie@alfarrabio.di.uminho.pt)

Alberto Simões - Dept Informática - Univ. Minho8

Divisão de Tabelas (3)

A solução para este tipo de casos consiste em dividir a informação em duas tabelas:– informação de cada livro;– autor por livro;

Titulo ISBN Ano Edição Editora Colecção

Crimes Perfeitos 01-234567 1973 Suspense ABC do Crime

Manual do Access 03-123456 2001 Porto Editora Informática

ISBN Nome Autor

01-234567 John Gardner

03-123456 Ana Sofia

03-123456 Pedro Raposo

Page 9: Alberto Simões - Dept Informática - Univ. Minho 1 Bases de Dados (usando Microsoft Access) Alberto Manuel Simões (albie@alfarrabio.di.uminho.pt)

Alberto Simões - Dept Informática - Univ. Minho9

Chaves Estrangeiras

O campo ISBN estabelece a ligação entre as tabelas Livros e Autores. Este campo, na tabela Autores, diz-se que é uma chave estrangeira.

Note-se que não existe obrigatoriedade de utilizar o mesmo nome para ambos os campos ao definir uma ligação entre tabelas.

Na tabela de autores, que chave poderíamos escolher?

Page 10: Alberto Simões - Dept Informática - Univ. Minho 1 Bases de Dados (usando Microsoft Access) Alberto Manuel Simões (albie@alfarrabio.di.uminho.pt)

Alberto Simões - Dept Informática - Univ. Minho10

Divisão de Tabelas (4)

Considerando que se pretende armazenar informação sobre os autores:

código Livro Nome Autor Ano Nascimento Nacionalidade

01-234567 John Gardner 1944 EUA

03-123456 Ana Sofia 1970 Portugal

03-123456 Pedro Raposo 1971 Portugal

Mas, John Gardner escreveu uma vasta lista de obras.Vamos repetir toda esta informação para cada um dos livros?

Page 11: Alberto Simões - Dept Informática - Univ. Minho 1 Bases de Dados (usando Microsoft Access) Alberto Manuel Simões (albie@alfarrabio.di.uminho.pt)

Alberto Simões - Dept Informática - Univ. Minho11

Dependências Funcionais

A solução convencional para este problema consiste em identificar as dependências entre campos:– o campo Nacionalidade depende do campo

Nome Autor– o campo Ano Nascimento depende do campo

Nome Autor Ou seja, se soubermos o valor do campo

Nome Autor podemos saber o valor dos campos Ano Nascimento e Nacionalidade.

Page 12: Alberto Simões - Dept Informática - Univ. Minho 1 Bases de Dados (usando Microsoft Access) Alberto Manuel Simões (albie@alfarrabio.di.uminho.pt)

Alberto Simões - Dept Informática - Univ. Minho12

Divisão de Tabelas (5)

Sempre que se verificar a existência de campos numa tabela que não dependam da chave primária, a tabela deve ser dividida;

ISBN Nome Autor

01-234567 John Gardner

03-123456 Ana Sofia

03-123456 Pedro Raposo

Nome Autor Ano Nascimento Nacionalidade

John Gardner 1944 EUA

Ana Sofia 1970 Portugal

Pedro Raposo 1971 Portugal

Page 13: Alberto Simões - Dept Informática - Univ. Minho 1 Bases de Dados (usando Microsoft Access) Alberto Manuel Simões (albie@alfarrabio.di.uminho.pt)

Alberto Simões - Dept Informática - Univ. Minho13

Resultado Normalizado

ISBN Nome Autor

01-234567 John Gardner

03-123456 Ana Sofia

03-123456 Pedro Raposo

Nome Autor Ano Nascimento Nacionalidade

John Gardner 1944 EUA

Ana Sofia 1970 Portugal

Pedro Raposo 1971 Portugal

Titulo ISBN Ano Edição Editora Colecção

Crimes Perfeitos 01-234567 1973 Suspense ABC do Crime

Manual do Access 03-123456 2001 Porto Editora Informática

Em que ano nasceram os autores do Manuel de Access?

Page 14: Alberto Simões - Dept Informática - Univ. Minho 1 Bases de Dados (usando Microsoft Access) Alberto Manuel Simões (albie@alfarrabio.di.uminho.pt)

Alberto Simões - Dept Informática - Univ. Minho14

Exercício 1

Criar as tabelas necessárias para acomodar os dados de uma factura;

E todos os dados da empresa?

Factura N.: 1425433

Data: 04-05-2002

Cliente: António Carlos Silva e Sá 

Produto Descrição Qt. Preço Unit. Total

XX743K Pregos 100 € 1,00 € 100,00

YZ3MN Porcas 150 € 1,00 € 150,00

XP992O Parafusos 170 € 2,00 € 340,00

YZ3MN Porcas 140 € 1,00 € 140,00

Total € 730,00

Page 15: Alberto Simões - Dept Informática - Univ. Minho 1 Bases de Dados (usando Microsoft Access) Alberto Manuel Simões (albie@alfarrabio.di.uminho.pt)

Alberto Simões - Dept Informática - Univ. Minho15

Resolução 1.1

Cada factura contém:– Um número da factura;– Uma data em que foi emitida;– Um cliente que efectuou a compra;– Várias linhas de produtos

Código do produto, descrição, quantidade, preço unitário e valor total;

– Um valor total das compras

Page 16: Alberto Simões - Dept Informática - Univ. Minho 1 Bases de Dados (usando Microsoft Access) Alberto Manuel Simões (albie@alfarrabio.di.uminho.pt)

Alberto Simões - Dept Informática - Univ. Minho16

Resolução 1.2

Uma vez que não podemos saber quantos produtos vão ser comprados, consideremos apenas os dados que aparecem uma só vez.

Nº Factura Data Cliente Total1425433 04-05-2002 António Carlos Silva e Sá  € 730.001425434 04-05-2002 Ana Maria Teixeira Cunha € 900.001425435 04-05-2002 José Miguel Lopes Araújo € 400.00

Page 17: Alberto Simões - Dept Informática - Univ. Minho 1 Bases de Dados (usando Microsoft Access) Alberto Manuel Simões (albie@alfarrabio.di.uminho.pt)

Alberto Simões - Dept Informática - Univ. Minho17

Resolução 1.3

Criemos uma nova tabela para os produtos:

Mas, quem é que efectuou estas compras?

Produto Designação Qt Preço Unitário TotalXX743K Pregos 100 € 1.00 € 100.00YZ3MN Porcas 150 € 1.00 € 150.00XP992O Parafusos 170 € 2.00 € 340.00YZ3MN Porcas 140 € 1.00 € 140.00

Page 18: Alberto Simões - Dept Informática - Univ. Minho 1 Bases de Dados (usando Microsoft Access) Alberto Manuel Simões (albie@alfarrabio.di.uminho.pt)

Alberto Simões - Dept Informática - Univ. Minho18

Resolução 1.4

Para relacionar as compras com o cliente, temos de adicionar uma chave estrangeira a esta tabela:

Factura Produto Designação Qt Preço Un. Total1425433 XX743K Pregos 100 € 1.00 € 100.001425433 YZ3MN Porcas 150 € 1.00 € 150.001425433 XP992O Parafusos 170 € 2.00 € 340.001425433 YZ3MN Porcas 140 € 1.00 € 140.00

Page 19: Alberto Simões - Dept Informática - Univ. Minho 1 Bases de Dados (usando Microsoft Access) Alberto Manuel Simões (albie@alfarrabio.di.uminho.pt)

Alberto Simões - Dept Informática - Univ. Minho19

Resolução 1.5

O preço de cada produto, e respectiva descrição são dependências funcionais do código do produto;

Devemos dividir a tabela em:– Detalhe de cada linha da factura;– Informação sobre cada produto;

Page 20: Alberto Simões - Dept Informática - Univ. Minho 1 Bases de Dados (usando Microsoft Access) Alberto Manuel Simões (albie@alfarrabio.di.uminho.pt)

Alberto Simões - Dept Informática - Univ. Minho20

Resolução 1.6

Factura Produto Qt Total1425433 XX743K 100 € 100.001425433 YZ3MN 150 € 150.001425433 XP992O 170 € 340.001425433 YZ3MN 140 € 140.00

Produto Designação Preço Un.XX743K Pregos € 1.00YZ3MN Porcas € 1.00XP992O Parafusos € 2.00

Page 21: Alberto Simões - Dept Informática - Univ. Minho 1 Bases de Dados (usando Microsoft Access) Alberto Manuel Simões (albie@alfarrabio.di.uminho.pt)

Alberto Simões - Dept Informática - Univ. Minho21

Resolução 1.7

Para melhorar o sistema de facturação poderíamos ainda:– Atribuir um código a cada cliente;– Criar uma tabela de clientes, com a sua

informação, como a morada, telefone, número de contribuinte;

– Cada factura relacionava-se com o cliente apenas pelo seu código

Page 22: Alberto Simões - Dept Informática - Univ. Minho 1 Bases de Dados (usando Microsoft Access) Alberto Manuel Simões (albie@alfarrabio.di.uminho.pt)

Alberto Simões - Dept Informática - Univ. Minho22

Exercício 2

Usando o exemplo da factura, vamos criar as seguintes tabelas em Access:

FacturasNúmero number

Data date/timeCliente text (200)

Total currency

ProdutosCódigo text (10)

Designação text (200)Preço Unitário currency

Factura/ProdutoFactura numberProduto text (10)

Quantidade numberTotal currency

Page 23: Alberto Simões - Dept Informática - Univ. Minho 1 Bases de Dados (usando Microsoft Access) Alberto Manuel Simões (albie@alfarrabio.di.uminho.pt)

Alberto Simões - Dept Informática - Univ. Minho23

Relacionamentos

Os relacionamentos entre tabelas podem ser de tipos diferentes:– 1 – n– 1 – 1– m – n

Estes valores correspondem ao número de elementos de uma tabela a que podem corresponder a elementos de outra tabela;

Page 24: Alberto Simões - Dept Informática - Univ. Minho 1 Bases de Dados (usando Microsoft Access) Alberto Manuel Simões (albie@alfarrabio.di.uminho.pt)

Alberto Simões - Dept Informática - Univ. Minho24

Relacionamentos (1-n)

Uma turma tem n alunos– Neste caso, a tabela de relacionamento associa a

cada aluno apenas uma turma;– Ou seja, um aluno não pode pertencer a duas

turmas;– Neste caso, o relacionamento é feito na tabela

alunos, em que se adiciona a chave estrangeira relativa à turma (chave da tabela de turmas).

Page 25: Alberto Simões - Dept Informática - Univ. Minho 1 Bases de Dados (usando Microsoft Access) Alberto Manuel Simões (albie@alfarrabio.di.uminho.pt)

Alberto Simões - Dept Informática - Univ. Minho25

Relacionamentos (1-1) Supondo que temos uma tabela de

professores e uma outra de departamentos; Um professor director de um departamento,

não o pode ser de um outro; Cada departamento tem apenas um director. Nestes casos, pouco frequentes, o

relacionamento pode ser feito em qualquer uma das tabelas;

Neste caso em particular, seria mais sensato colocar na tabela de departamentos.

Page 26: Alberto Simões - Dept Informática - Univ. Minho 1 Bases de Dados (usando Microsoft Access) Alberto Manuel Simões (albie@alfarrabio.di.uminho.pt)

Alberto Simões - Dept Informática - Univ. Minho26

Relacionamentos (m-n)

São os mais frequentes; Um produto pode aparecer em mais do que

uma factura; Uma factura pode conter mais do que um

produto; Neste caso, constrói-se uma tabela auxiliar

que efectua o relacionamento.

Page 27: Alberto Simões - Dept Informática - Univ. Minho 1 Bases de Dados (usando Microsoft Access) Alberto Manuel Simões (albie@alfarrabio.di.uminho.pt)

Alberto Simões - Dept Informática - Univ. Minho27

Integridade referencial

Chama-se integridade referencial ao processo de garantir que todos os dados de campos relacionados existem em ambas as tabelas;

Por exemplo, existir uma factura com um código de produto que não existe na tabela de produtos;

Uma factura passada a um cliente que não existe na tabela de clientes;

Page 28: Alberto Simões - Dept Informática - Univ. Minho 1 Bases de Dados (usando Microsoft Access) Alberto Manuel Simões (albie@alfarrabio.di.uminho.pt)

Alberto Simões - Dept Informática - Univ. Minho28

Exercício 3

Utilizando as tabelas construídas no exercício 2, efectuar os devidos relacionamentos no Microsoft Access.

Verificar o funcionamento do Microsoft Access em relação à integridade referencial;

Page 29: Alberto Simões - Dept Informática - Univ. Minho 1 Bases de Dados (usando Microsoft Access) Alberto Manuel Simões (albie@alfarrabio.di.uminho.pt)

Alberto Simões - Dept Informática - Univ. Minho29

SQLQuery Language

Alberto Manuel Simões([email protected])

Page 30: Alberto Simões - Dept Informática - Univ. Minho 1 Bases de Dados (usando Microsoft Access) Alberto Manuel Simões (albie@alfarrabio.di.uminho.pt)

Alberto Simões - Dept Informática - Univ. Minho30

Motivação

As bases de dados servem para se poder aceder de forma eficiente aos seus dados;

O uso de uma interface gráfica para a pesquisa nem sempre é eficiente;

Então, desenvolveu-se uma linguagem específica para este tipo de consultas;

Page 31: Alberto Simões - Dept Informática - Univ. Minho 1 Bases de Dados (usando Microsoft Access) Alberto Manuel Simões (albie@alfarrabio.di.uminho.pt)

Alberto Simões - Dept Informática - Univ. Minho31

Noções

Chamamos querie a uma pergunta à base de dados;

Todas as respostas a queries são tabelas; A estas tabelas também chamamos de

views, porque consistem em vistas sobre porções da informação da base de dados;

As views são tabelas virtuais, ou seja, não são guardadas na base de dados.

Page 32: Alberto Simões - Dept Informática - Univ. Minho 1 Bases de Dados (usando Microsoft Access) Alberto Manuel Simões (albie@alfarrabio.di.uminho.pt)

Alberto Simões - Dept Informática - Univ. Minho32

Factura Produto Qt Total1425433 XX743K 100 € 100.001425433 YZ3MN 150 € 150.001425433 XP992O 170 € 340.001425433 YZ3MN 140 € 140.00

Produto Designação Preço Un.XX743K Pregos € 1.00YZ3MN Porcas € 1.00XP992O Parafusos € 2.00

Nº Factura Data Cliente Total1425433 04-05-2002 António Carlos Silva e Sá  € 730.001425434 04-05-2002 Ana Maria Teixeira Cunha € 900.00

1425435 04-05-2002 José Miguel Lopes Araújo € 400.00

Consideremos as seguintes tabelas:

• Facturas

• Produtos

• Facturas / Produtos

Os resultados dos próximos exemplos são retirados desta base de dados.

Page 33: Alberto Simões - Dept Informática - Univ. Minho 1 Bases de Dados (usando Microsoft Access) Alberto Manuel Simões (albie@alfarrabio.di.uminho.pt)

Alberto Simões - Dept Informática - Univ. Minho33

Operações de Selecção(apenas com uma tabela)

O comando SELECT permite seleccionar determinadas colunas de uma tabela:SELECT <campos> FROM <tabela> ;

Por exemplo, podemos seleccionar os nomes dos produtos com:SELECT DesignaçãoFROM Produtos;

DesignaçãoPregosPorcas

Parafusos

Page 34: Alberto Simões - Dept Informática - Univ. Minho 1 Bases de Dados (usando Microsoft Access) Alberto Manuel Simões (albie@alfarrabio.di.uminho.pt)

Alberto Simões - Dept Informática - Univ. Minho34

Operações de Selecção(apenas com uma tabela - 2)

Podemos pedir mais do que um campo; Por exemplo, o código e a designação do

produto:SELECT Produto, Designação FROM Produtos;

Produto DesignaçãoXX743K PregosYZ3MN PorcasXP992O Parafusos

Page 35: Alberto Simões - Dept Informática - Univ. Minho 1 Bases de Dados (usando Microsoft Access) Alberto Manuel Simões (albie@alfarrabio.di.uminho.pt)

Alberto Simões - Dept Informática - Univ. Minho35

Operações de Selecção(apenas com uma tabela - 3)

Para seleccionar todos os campo, podemos usar um atalho (wildcard):SELECT * FROM Produtos;

Produto Designação Preço Un.XX743K Pregos € 1.00YZ3MN Porcas € 1.00XP992O Parafusos € 2.00

Page 36: Alberto Simões - Dept Informática - Univ. Minho 1 Bases de Dados (usando Microsoft Access) Alberto Manuel Simões (albie@alfarrabio.di.uminho.pt)

Alberto Simões - Dept Informática - Univ. Minho36

Operações de Selecção(explicitando condições na selecção)

É possível especificar condições para refinamento da selecção;

Uma linha só será incluída no resultado se a condição for verificada para essa linha;

As condições são testadas nas linhas da tabela original, i.e. podemos definir condições sobre colunas que fazem parte da tabela original mesmo que essas colunas não apareçam no resultado.

Page 37: Alberto Simões - Dept Informática - Univ. Minho 1 Bases de Dados (usando Microsoft Access) Alberto Manuel Simões (albie@alfarrabio.di.uminho.pt)

Alberto Simões - Dept Informática - Univ. Minho37

Operações de Selecção(explicitando condições na selecção 2)

Neste caso, usa-se a sintaxe:SELECT <campos> FROM <tabela> WHERE <condição>;

Seleccionar produtos que custem menos de € 2.00:SELECT DescriçãoFROM ProdutosWHERE PreçoUn<2;

DesignaçãoPregosPorcas

Page 38: Alberto Simões - Dept Informática - Univ. Minho 1 Bases de Dados (usando Microsoft Access) Alberto Manuel Simões (albie@alfarrabio.di.uminho.pt)

Alberto Simões - Dept Informática - Univ. Minho38

Operações de Selecção(explicitando condições na selecção 3)

Podemos escrever condições mais complicadas…

SELECT Disciplinas.nomeFROM DisciplinasWHERE ano = 1 AND semestre = 0;