You are on page 1of 70

Curso Secundrio Tecnolgico de Informtica Estrutura Organizao e Tratamento de Dados 12 Ano Ano Lectivo 1996/97

Bases de Dados

Bases de Dados e Sistemas de Informao

NDICE
1. BASES DE DADOS E SISTEMAS DE INFORMAO..........................................................................................4 1.1 BDS E SGBDS.................................................................................................................................................4 1.2 ARQUITECTURA DE UMA BASE DE DADOS..................................................................................................................5 1.3 ARQUITECTURA DE UM SISTEMA DE GESTO DE BASES DE DADOS.................................................................................6 2. O MODELO ENTIDADE-ASSOCIAO ................................................................................................................7 2.1 ENTIDADES........................................................................................................................................................10 2.2 ASSOCIAES.....................................................................................................................................................10 2.2.1 Graus de um associao.................................................................................................................................10 2.3 ATRIBUTOS E VALORES........................................................................................................................................11 2.4 DOMNIOS..........................................................................................................................................................12 2.5 ATRIBUTOS .......................................................................................................................................................13 2.5.1 Atributos Elementares.....................................................................................................................................13 2.5.2 Atributos Compostos.......................................................................................................................................13 2.5.3 Atributos conjuntos de valores.......................................................................................................................13 2.5.4 Atributos Identificadores................................................................................................................................15 2.6 OCORRNCIA DE UMA ENTIDADE.............................................................................................................................15 2.7 ASSOCIAO SEM ATRIBUTOS E ASSOCIAO COM ATRIBUTOS.......................................................................................16 3. O MODELO RELACIONAL DE BASES DE DADOS ..........................................................................................17 3.1 PARALELO ENTRE O MODELO RELACIONAL E O SGBD................................................................................................17 3.2 CHAVES PRIMRIA, CANDIDATA E SECUNDRIA..........................................................................................................18 3.3 INTEGRIDADE REFERENCIAL....................................................................................................................................19 3.4 INTEGRIDADE DE ENTIDADE...................................................................................................................................19 4. DERIVAO DAS TABELAS RELACIONAIS A PARTIR DO MODELO ENTIDADEASSOCIAO..................................................................................................................................................................20 4.1 ASSOCIAES DO TIPO UM-PARA-UM (1:1)...............................................................................................................20 4.1.1 Associao unria um-para-um......................................................................................................................20 4.1.2 Associao binria um-para-um.....................................................................................................................22 4.2 ASSOCIAES DO TIPO UM-PARA-VRIOS (1:N)..........................................................................................................25 4.3 ASSOCIAES DO TIPO VRIOS-PARA-VRIOS (N:M)....................................................................................................27 4.4 QUADRO RESUMO ..............................................................................................................................................30 4.5 EXERCCIOS.......................................................................................................................................................31 5. NORMALIZAO DE TABELAS...........................................................................................................................33 5.1 PRIMERIA FORMA NORMAL (1FN).........................................................................................................................33 5.2 SEGUNDA FORMA NORMAL (2FN).........................................................................................................................35 5.2.1 Dependncia Funcional Trivial ou Simples e Dependncia Funcional Elementar......................................35 5.2.2 Condies para que uma tabela esteja na 2FN.............................................................................................36 5.3. TERCEIRA FORMA NORMAL (3FN).......................................................................................................................37 6. OPERAES SOBRE TABELAS.............................................................................................................................39 6.1 SELECO OU RESTRIO.....................................................................................................................................39 6.2 PROJECO........................................................................................................................................................41 APENAS DOIS REGISTOS QUE OBEDECEM S CONDIES COLOCADAS PELA OPERAO DE RESTRIO. POR SEU TURNO A PROJECO RESTRINGE AS COLUNAS AO CAMPO NOME...........43 6.3 PRODUTO CARTESIANO.........................................................................................................................................44 6.4 UNIO..............................................................................................................................................................45 6.5 DIFERENA........................................................................................................................................................46 6.6 DIVISO............................................................................................................................................................47 NA TABELA A, S AS LINHAS EM QUE O ATRIBUTO X CONTM OS VALORES A E H, QUE POSSUEM O VALOR B NO ATRIBUTO Y, QUE O NICO VALOR QUE A TABELA B POSSUI . .....................................................................................................................47 6.7 INTERCEPO ....................................................................................................................................................48 6.8 JUNO (JOIN)...................................................................................................................................................48 7. A LINGUAGEM SQL.................................................................................................................................................51 7.1 LINGUAGEM DE DEFINIO DOS DADOS....................................................................................................................51

Prof. Jos C. Silva

Bases de Dados

Bases de Dados e Sistemas de Informao

7.2 LINGUAGEM DE MANIPULAO DOS DADOS...............................................................................................................51 7. 3 LINGUAGEM DE CONTROLO DOS DADOS...................................................................................................................51 7.4 COMANDO SELECT..........................................................................................................................................53 lista_campos.............................................................................................................................................................53 DISTINCT.................................................................................................................................................................53 DISTINCTROW........................................................................................................................................................53 TOP n [PERCENT]..................................................................................................................................................54 Devolve um certo nmero de registos que caibam no topo ou em baixo de um intervalo indicado na clusula ORDER BY...............................................................................................................................................................54 Suponhamos que queremos o conjunto dos 5 registos da tabela LEITORES, dos leitores mais velhos, que satisfaam a condio de morar em Faro. ..........................................................................................................54 nome_tabelas alias..................................................................................................................................................55 7.4.2 Expresses e Funes de agregao.............................................................................................................55 7.4.3 Clusula WHERE............................................................................................................................................57 Exerccios Propostos I.............................................................................................................................................61 7.4.4 Clusula GROUP BY......................................................................................................................................63 7.4.5 Clusula HAVING...........................................................................................................................................64 7.4.6 Clusula ORDER BY......................................................................................................................................65 EXERCCIOS PROPOSTOS II................................................................................................................................66 EXERCCIOS PROPOSTOS II................................................................................................................................68 GLOSSRIO....................................................................................................................................................................70

1 - Bases de Dados e sistemas de informao 2 - O modelo Entidade-Associao 3 - O Modelo Relacional de Base de Dados 4 - Derivao de tabelas relacionais a partir do modelo entidade-associao 5 - Operaes sobre tabelas 6 - Normalizao de tabelas 7 - Criao de uma base de dados em Access 8 - Execuo de Querys em Access

Prof. Jos C. Silva

Bases de Dados

Bases de Dados e Sistemas de Informao

1. BASES DE DADOS E SISTEMAS DE INFORMAO


1.1 BDs e SGBDs Base de Dados (BD) - um sistema cuja finalidade registar, actualizar, manter e disponibilizar a informao relevante para a actividade de uma organizao. Um sistema de base de dados composto por duas partes fundamentais: a estutura lgica e fsica em que a informao se encontra organizada; o sistema gestor da base de dados (SGBD). O sistema gestor de base de dados gere toda a informao contida na base de dados e constitu a interface entre a informao e os utilizadores, quer sejam utilizadores finais quer sejam programadores.

SGBD
Base de Dados

Utilizadores Fig. 1 - O sistema gestor da base de dados SGBD.

Prof. Jos C. Silva

Bases de Dados

Bases de Dados e Sistemas de Informao

1.2 Arquitectura de uma Base de Dados

real

que

pode pode

ser ser
REAL INFORMATIZVEL

informatizvel,

descrito utilizando um modelo conceptual, podendo ter vrios modelos externos dependendo dos utilizadores, mas apenas posssu um modelo interno onde est situada a BD fsica.

MODELO CONCEPTUAL

MODELOS EXTERNOS

MODELO INTERNO MODELOS EXTERNOS

MODELOS EXTERNOS

A arquitectura de uma base de dados est dividida em trs nveis: Nvel externo - so as
BD Fsica Fig. 2 - Arquitectura de uma Base de Dados (BD).

vises individuais dos vrios utilizadores. Nvel conceptual - compreende um esquema conceptual que acenta num modelo de dados que foi definido. Nvel interno - onde est o esquema de armazenamento dos dados da BD, a BD fsica.
VISO I VISO I

. . .

VISO I

ESQ UEM A CO NC EPT UAL

ES Q UEM A DE ARM AZENAM ENT O

Fig. 2 Nveis de arquitectura de uma Base de Dados.

Prof. Jos C. Silva

Bases de Dados

Bases de Dados e Sistemas de Informao

1.3 Arquitectura de um Sistema de Gesto de Bases de Dados No sistema de bases de dados Access, so identificveis os seguintes elementos: A base de dados propriamente dita, constiuda por um conjunto de de objectos, tais como tabelas (tables),consultas (queries), formulrios(forms), relatrios (reports),e mdulos (modules). A base de dados armazenada num ficheiro .mdb. A engine da base de dados, constituda por um conjunto de programas responsveis pela execuo de todas as operaes de acesso base de dados. Actua como um gestor de dados(data manager). O interface grfico, que disponibiliza o acesso dos utilizadores criao de tabelas, definio de consultas, criao de relatrios e formulriosde apresentao de dados

Prof. Jos C. Silva

Bases de Dados

O modelo Entidade-Associao

2. O MODELO ENTIDADE-ASSOCIAO
O modelo entidade-associao procura criar uma simulao da realidade. Esta vista como um conjunto de entidades, interagindo umas com as outras, atravs de um conjunto de associaes ou relacionamentos de vrios tipos. Por exemplo, numa ESCOLA podem definir-se as entidades PROFESSORES, ALUNOS, DISCIPLINAS, SALAS DE AULA, etc. Cada entidade representa um conjunto de elementos: a entidade PROFESSORES representa um conjunto dos professores, a entidade ALUNOS um conjunto de alunos, e assim por diante. A vida na Escola , em grande parte, a consequncia de associaes entre essas entidades. , por isso, preciso analisar essas associaes e represent-las atravs de um modelo. Vejamos alguns exemplos, aplicados a este caso:

ALUNOS

PROFESSORES

ALUNOS

matricular

DISCIPLINAS

Os ALUNOS esto associados com as DISCIPLINAS. Cada aluno pode estar matriculado em vrias disciplinas e cada disciplina frequentada por vrios alunos. Trata-se de uma associao de vrios -para-vrios, tambm designada de associao de m-para-n (m:n), uma vez que cada elemento da entidade ALUNOS pode estar associado com vrios elementos da entidade DISCIPLINAS (uma aluno matriculado a vrias disciplinas) e, por sua vez, cada elemento da entidade DISCIPLINAS pode estar associado com vrios elementos da entidade ALUNOS (uma disciplina frequentada por vrios alunos). A partir deste facto, possvel, conceptualmente, estabelecer uma associao entre as entidades ALUNOS e DISCIPLINAS. O nome dessa associao poderia ser naturalmente MATRICULAR.

Prof. Jos C. Silva

Bases de Dados

O modelo Entidade-Associao

Graficamente, as entidades so representadas por rectngulos contendo, no seu interior, o nome atribudo entdidade. as associaes entre entidades so representadas atravs de linhas, com losangos a representar as associaes. Num PARLAMENTO, podem definir-se as entidades DEPUTADOS e GRUPOS PARLAMENTARES, por exemplo. Vejamos uma possvel associao entre essas duas entidades .

N
DEPUTADOS
PERTENCER

1
GRUPOS PARLAMENTARES

Os deputados podem estar integrados em grupos parlamentares. Temos assim uma associao entre a entidade DEPUTADOS e a entidade GRUPOS PARLAMENTARES. O nome a dar a essa associao pode ser, por exemplo, PERTENCER. Os nomes a dar s associaes no so muito relevantes. O que verdadeiramente importa, que se compreeenda o contedo e o tipo dessa asssociao. Neste caso, estamos perante uma associao um-para-vrios ou 1-para-n (1:n) entre a entidade GRUPOS PARLAMENTARES e a entidade DEPUTADOS, uma vez que um grupo parlamentar pode ter n deputados, mas um deputado pertencer apenas a um grupo parlamentar Imagine-se agora o caso de uma empresa que decidiu criar um Fundo de Penses e estuda a forma de registar numa base de dados a associao entre os empregados e o Fundo. Podem admitir-se no modelo duas entidades: a entidade EMPREGADOS (conjunto dos empregados da empresa) e a entidade ASSOCIADOS (conjunto dos associados do Fundo de Penses). Evidentemente, estas duas entidades podem ser distintas, pois nada nos permite concluir do enunciadp da questo que todos os empregados sejam associados e que todos os associados sejam empregados. Basta admitir que a participao no Fundo de Penses livre e que, portanto, alguns empregados possam no participar. Por outro lado, o Fundo pode ser aberto participao de familiares dos empregados e, nesse caso, pode haver associados que no sejam empregados da empresa.. Estas vrias hipteses so regras da organizao (na terminologia das bases de dados, vulgarmente designadas por business rules) e devem ser reflectidas no modelo. Vamos analisar cada uma dessas hipteses. Exemplo 1: Regra: Todos os empregados participam no Fundo de Penses e s permitida a participao de empregados.

Prof. Jos C. Silva

Bases de Dados

O modelo Entidade-Associao

A
R

Entidade Obrigatria

Entidade Obrigatria

A associao entre EMPREGADOS e ASSOCIADOS uma associao de um-paraum, visto que cada elemento da entidade EMPREGADOS estar associado com um s elemento da entidade ASSOCIADOS e, do mesmo modo, cada elemento da entidade ASSOCIADOS estar relacionado com apenas um elemento da entidade EMPREGADOS.

Empregados

Associados

Entidade Entidade Obrigatria Obrigatria Mas a regra impe que todos os empregados sejam associados e que todos os associados sejam empregados. Em termos do modelo, todos os elementos da entidade EMPREGADOS e todos os elementos da entidade ASSOCIADOS participam na associao. Est-se assim perante um caso em que ambas as entidades so obrigatrias. Uma entidade obrigatria numa associao quando todos os elementos dessa entidade tiverem obrigatoriamente de participar na associao. Graficamente, uma entidade obrigatria representada com um trao vertical, colocado no lado do rectngulo do qual estabelece a associao. Exemplo 2: Regra: Todos os empregados so obrigatoriamente associados, mas o Fundo aberto participao de no empregados. Continuamos perante uma associao de um-para-um, mas neste caso apenas a entidade EMPREGADOS abrigatria. obrigatria porque, de acordo com a regra estabelecida todos os empregados participam no Fundo. Mas a entidade ASSOCIADOS deixa de ser obrigatria uma vez que alguns elementos dessa entidade podem no ser empregados da empresa. Exemplo 3: Regra: A participao no Fundo livre para os enmpregados e o Fundo aberto participao de no empregados. Nem todos os empregados sero associados e haver associados que no so empregados. Continuamos a ter uma associao um-para-um, mas neste caso nenhuma das entidades obrigatria. Prof. Jos C. Silva 9

Bases de Dados

O modelo Entidade-Associao

Quando uma entidade no obrigatria, pode haver elementos ou ocorrncias dessa entidade quer no partcipam na associao, isto , que no esto associados com nenhum elemento ou ocorrncia da outra entidade. 2.1 Entidades O termo entidade pode designar um conjunto de objectos do mesmo tipo, acerca dos quais se pretende recolher e registar informao. Por exemplo: pessoas, firmas, produtos, facturas,. livros, etc. Uma entidade representada no modelo entidade-associao atravs de um rectngulo com o seu nome inscrito, conforme podemos ver no exemplo seguinte. 2.2 Associaes As associaes representam os relacionamentos existentes entre as vrias entidades. Uma associao pode ser classificada como : - UNRIA - associa uma entidade com ela prpria; - BINRIA - associa duas entidades; - TERNRIA - associa trs entdidades; - COMPLEXA - associa entre si duas ou mais entidades.

B ALUNO ALUNO
2.2.1 Graus de um associao

A Binria

A Ternria

Unria

a) ASSOCIAO 1:1 (de 1 para 1)

A cada ocorrncia da entidade "A" est associada apenas uma ou nenhuma ocorrncia de 1 entidade "B" e vice-versa. Vejamos o seguinte diagrama entidade-associao: 1 1 A B 1 1 Professor leccionar Disciplina

Prof. Jos C. Silva

10

Bases de Dados

O modelo Entidade-Associao

O professor pode no mximo dar uma disciplina e uma disciplina pode no mximo ser dada por um professor. Pode haver professores sem leccionar disciplinas e pode haver disciplinas que no esto a ser leccionadas por nenhum professor.

b) ASSOCIAO 1:N (de 1 para N)

1 N 1 A cada ocorrncia da entidade "A" esto associadas N ocorrncias da entidade "B". A cada A B ocorrncia da entidade B est associada uma ou nenhuma ocorrncia da entidade A. Vejamos o seguinte diagrama entidade-associao.

Departamento afectar Empregado Um departamento tem vrios ou nenhum empregados e um empregado s pode trabalhar num ou nenhum departamento.

c) ASSOCIAO M:N (de M para N)

M N A cada ocorrncia da entidade "A" esto associadas N ocorrncias da entidade "B". A cada 1 A B ocorrncia de "B" esto associadas M ocorrncias de "A". Consideremos o seguinte diagrama

Um indivduo fala vrios idiomas. Um idioma falado por vrios indivduos. M N Individuo 2.3 Atributos e Valores falar Idiomas

As entidades e as associaes representam coisas, seres, conceitos e acontecimentos do mundo real qua so geradores de informao. Essa informao resulta da observao e registo dos seus atributos observveis: O nome, a altura, o estado civil e a data de nascimento constituem atributos que podem caracterizar uma pessoa. Prof. Jos C. Silva 11

Bases de Dados

O modelo Entidade-Associao

A marca, a cor e a cilindrada so exemplos de atributos de um automvel. O ttulo, o nmero de pginas, o ano de publicao, e o editor so atributos que podem caracterizar um livro. O numero, o nome, e a numero de contribuinte so atributos de um cliente. A identificao dos atributos das vrias entidades e associaes constitui uma das fases mais importantes na construo de qualquer sistema de informao. Por exemplo considere-se a entidade ALUNOS, no sistema de informao de uma escola. Que tipo de informao relativo a cada aluno interessa escola registar na base de dados? Como exemplo poderemos considerar os seguintes: Nome Ano Turma Nmero Morada Cdigo Postal Localidade Data de Nascimento Encarregado de Educao Trata-se de uma lista de atributos que so comuns a todos os alunos. Um atributo o nome de uma caracterstica observvel em todos os elementos de uma entidade. Cada atributo assume, para cada aluno um determinado valor. Como exemplo, poderamos considerar que para determinado aluno os valores assumidos por esses atributos seriam os seguintes: Nmero Nome Ano Turma Morada Cdigo Postal Localidade Data de Nascimento Encarregado de Educao 25 Telmo Silva 12 K Rua das Flores, 34 8500 Portimo 18/12/1977 Domitlia Silva

2.4 Domnios Ao conjunto de todos os valores elementares de um atributo d-se o nome de domnio, e s sero considerados vlidos, os valores que pertenam ao domnio definido.

Prof. Jos C. Silva

12

Bases de Dados

O modelo Entidade-Associao

Por exemplo para o atributo Nmero de aluno, os valores considerados vlidos pertenem ao conjunto dos nmeros inteiros no negativos menores que 35.

ATRIBUTO DOMNIO
Nmero Todos os nmeros inteiros no negativos menores que 35. Nome Conjunto dos caracteres do alfabeto e o smbolo - Ano Um de trs nmeros: 10, 11 ou 12. (Ensino Secundrio) Turma Conjunto das letras do alfabeto. Morada Conjunto de todos os caracteres de texto. Cdigo Postal Todos os nmeros inteiros no negativos entre 1000 e 9999. Localidade Conjunto de todos os caracteres de texto. Data de Nascimento Conjunto de todas as datas num formato estabelecido. Encarregado de Conjunto de todos os caracteres de texto. Educao 2.5 Atributos 2.5.1 Atributos Elementares Cada atributo pode assumir valores de um domnio, e deve representar a mais pequena parcela no contexto de um sistema de informao, tais atributos tm o nome de atributos elementares. Exemplos de atributos elementares podero ser a cdigo postal da morada do aluno. Este atributo indivisvel, se o fizessemos estaramos a perder informao. 2.5.2 Atributos Compostos O caso de um atributo composto o nome do aluno, poderiamos dividi-lo em primero nome, ltimo nome e outros nomes. 2.5.3 Atributos conjuntos de valores Existem casos em que um atributo formado por um conjunto de valores e quando tal acontece necessrio repensar a definio do atributo. Reconsideremos o caso da entidade aluno de uma escola, poderiamos apontar como atributo as disciplinas frequentadas onde teriamos de colocar todas as disciplinas frequentadas pelo aluno. O exemplo anterior entra em conflito com a prpria definio de domnio de um atributo o qual recorde-se se definia como o conjunto de valores elementares. Como o campo disciplinas frequentadas no contm valores elementares, mas sim um conjunto de valores, ser mais correcto definir a entidade disciplina e considerar a relao que existe com a entidade aluno.

Prof. Jos C. Silva

13

Bases de Dados

O modelo Entidade-Associao

EXERCCIOS
1. Desenhar os seguintes diagramas Entidade-Associao (DEAs): a) Um departamento emprega vrias pessoas, e uma pessoa trabalha para um mximo de um departamento.

b) Um director dirige no mximo um departamento. Um departamento tem no mximo um director.

c) Um autor escreve vrios livros. Um livro pode ser escrito por vrios autores.

d) Uma equipa composta por vrios jogadores. Um jogador joga apenas numa equipa.

e) Um professor lecciona no mximo uma disciplina. Uma disciplina leccionada apenas por um professor.

f) Um cliente realiza vrias encomendas. Uma encomenda diz respeito apenas a um cliente.

g) Um assinante obrigatoriamente um cliente, mas um cliente pode no ser um assinante.

h) Cada actor pode participar em diversos filmes realizado por vrios realizadores. Cada realizador pode realizar vrios filmes em que participam vrios actores.

Prof. Jos C. Silva

14

Bases de Dados

O modelo Entidade-Associao

2.5.4 Atributos Identificadores Um atributo diz-se identificador de uma identidade se a poder identificar de maneira nica e sem ambiguidades. Considerando o caso da entidade salas, poderiamos chegar ao seguinte conjunto de atributos: SALAS (Nmero de sala, piso) O nico atributo que permite identificar de maneira nica a sala o seu nmero, uma vez que no existiro salas com o mesmo nmero. Um atributo identificador aparece sempre a sublinhado, como acima se indica. Um atributo identificador no admite valores repetidos, para que esse atributo possa referir de maneira nica o elemento a que diz respeito.

2.6 Ocorrncia de uma entidade Os valores assumidos por uma entidade recebe o nome de ocorrncia. Observemos o caso abaixo.

ARMAZM

Armazenar

PRODUTO

Armazm A1 A2 A3

Armazena

Produto P1 P2 P3 P4 P5

Ocorrncia de: Armazm: 3 Produto: 5

Tal como a figura indica existem trs ocorrncias da entidade Armazm e cinco da entidade Produto. Existem trs armazms: A1, A2 e A3 e existem cinco produtos: P1, P2, P3, P4 e P5.

Prof. Jos C. Silva

15

Bases de Dados

O modelo Entidade-Associao

2.7 Associao sem atributos e associao com atributos Uma associao com atributos aquela em que a prpria associao pode conter atributos no caso abaixo a associao representada pelo verbo fornecer, isto o fornecimento pode conter atributos, tal como a data do fornecimento.

Funcionrio

Afectar

Departamento

Associao SEM atributos

Fornecedor

Fornecer

Produto

Associao COM atributos

Prof. Jos C. Silva

16

Bases de Dados

O Modelo Relacional de Bases de Dados

3. O MODELO RELACIONAL DE BASES DE DADOS


Tal como o modelo hierrquico ou o modelo em rede, tambm o modelo relacional um modelo que se aplica s bases de dados. O modelo relacional de base de dados implementado informaticamente atravs de sistemas de gesto de bases de dados conehcidos como SGBDs. O SGBD que iremos trabalhar o Microsoft Access, o qual est preparado para trabalhar sob o sistema operativo Windows. 3.1 Paralelo entre o modelo relacional e o SGBD Traando um paralelo entre a teoria de base de dados e o modelo relacional, diriamos que para uma determinada entidade como a entidade ALUNO teremos uma tabela que nos permite registar os dados respeitantes a essa entidade. Tal como vimos atrs, podem existir vrias ocorrncias de uma entidade pelo que convm registar toda esta informao de uma forma organizada. E o Access permite-nos faz-lo de forma simples. A uma entidade normalmente ir corresponder uma TABELA. Como sabemos uma tabela, para alm do nome, formada por uma conjunto finito de linhas e colunas. Nas colunas aparecero os vrios atributos da entidade ALUNOS e nas linhas as vrias ocorrncias dessa entidade. Mas para sermos mais precisos, diremos que nas colunas aparecem os CAMPOS da tabela ALUNOS e nas linhas os vrios REGISTOS dessa entidade.

MODELO RELACIONAL
ENTIDADE: Alunos

SGBD - ACCESS
TABELA: Alunos

ALUNOS

ATRIBUTOS da Entidade Alunos Nome

CAMPOS da Tabela Alunos Nome Ano Turma Nmero

Ano Prof. Jos C. Silva 17

Bases de Dados Turma Nmero

O Modelo Relacional de Bases de Dados

Como podemos constatar no exemplo anterior, entidade ALUNOS do Modelo Relacional ir corresponder uma Tabela no SGBD, e os atributos da entidade correspondero s colunas dessa Tabela.

Modelo Relacional
OCORRNCIAS da Entidade Alunos Nome: Ana Ano: 12 Turma: G Nmero: 1 Nome: Telmo Ano: 11 Turma: K Nmero: 23 Nome: Silvia Ano: 10 Turma: J Nmero: 12 Nome: Joo Ano: 11 Turma: K Nmero: 20

ACCESS
REGISTOS da Tabela Alunos Nome Ana Silvia Telmo Joo Ano 12 10 11 11 Turma G J K K Nmero 1 12 23 20

Existem quatro Ocorrncias da Entidade Alunos que iro corresponder a quatro Registos na Tabela Alunos. 3.2 Chaves primria, candidata e secundria Na seco sobre atributos identificadores (2.5.4) afirmou-se que um atributo diz-se identificador se pode identificar de maneira nica e sem ambiguidades uma entidade. Assim, um atributo que possua as caractersticas de identificador j uma chave candidata a chave primria. Como podem existir vrias chaves candidatas fundamental pensar naquela - chave primria - que identificar a tabela de maneira nica e inequvoca nas relaes com as outras tabelas da base de dados. A chave primria pode ser constituda por um nico campo ou por uma conjuno de vrios campos. Uma tabela pode possuir um campo que seja a chave primria de outra tabela, diremos que estamos em presena de uma chave secundria, por vezes chamada de externa ou estrangeira. Consideremos o caso da seguinte relao:
M ALUNOS matricular N DISCIPLINAS

Prof. Jos C. Silva

18

Bases de Dados

O Modelo Relacional de Bases de Dados

Tomando em conta que existe um nmero nico que identifica cada aluno da escola, e no existem alunos com o mesmo nmero, teremos as seguintes tabelas: ALUNOS (Nmero aluno, Nome, Turma, Ano, Morada, Telefone, Data nascimento) DISCIPLINAS (CodDisciplina, Nome, Ano, CodGrupo) MATRCULAS (Nmero aluno, CodDisciplina, Ano Lectivo, Data matrcula) Neste a chave primria da tabela ALUNOS ser o campo Nmero de aluno, da tabela DISCIPLINAS ser o campo CodDisciplina e da tabela MATRCULAS a chave primria composta pelos campos Nmero de Aluno e CodDisciplina. Aparece sublinhado com um trao nico. Por sua vez, na tabela MATRCULAS temos duas chaves secundrias, que o campo Nmero de aluno e o campo CodDisciplina, uma vez que so as chaves primrias da tabela ALUNOS e da DISCIPLINAS, respectivamente. De notar que a chave primria aparece sublinhado com um trao nico (___)e a chave secundria aparece sublinhado a tracejado. (- - - -) 3.3 Integridade referencial Este uma regra que define que um valor de uma chave externa tem de existir na tabela a que esse valor faz referncia. Por outras palavras, no exemplo anterior, no poderiamos inserir valores nos campos Nmero Aluno e CodDisciplina da tabela de MATRICULAS se no existissem os correspondentes registos nas tabelas ALUNOS e DISCIPLINAS. No poderiamos por exemplo matricular o aluno n 2001 na disciplina 10334, se ainda no tivessemos os dados dos aluno 2001 na tabela ALUNOS e da disciplina com o cdigo 10334 na tabela de DISCIPLINAS. 3.4 Integridade de Entidade a regra que define que no devem existir no campo, ou no conjunto de campos, valores nulos. Este um princpio que o SGBD Access est preparado. Uma vez que defenimos um campo como chave numa tabela, quando estamos a fazer a entrada dos registos, o prprio programa no nos deixa passar para o prximo registo sem que o campo que chave primria seja preenchido.

Prof. Jos C. Silva

19

Bases de Dados Entidade-Associao

Derivao de Tabelas a partir do Modelo

4. DERIVAO DAS TABELAS RELACIONAIS A PARTIR DO MODELO ENTIDADE-ASSOCIAO


Uma vez definido o Modelo Entidade-Associao de um sistema de informao possvel extrar as tabelas relacionais dessa mesma base de dados. Para tal iremos analisar caso a caso, para sabermos que tabelas derivar e como estabelecer as suas chaves primrias. importante no esquecer o princpio definido no final do captulo anterior que recorde-se dizia, um campo, ou conjunto de campos, no deve ter conter valores nulos. O que por outras palavras significa que, numa tabela no devem aparecer registos em que algum ou alguns campos com valores nulos. 4.1 Associaes do tipo um-para-um (1:1) Considere-se as duas entidades A e B relacionadas atravs de uma associao do tipo umpara-um, em que a cada elemento de A corresponde no mximo um elemento de B, ou nenhum, e a cada elemento de B corresponde um ou nenhum elemento de A.

4.1.1 Associao unria um-para-um

JOGO

EQUIPAS EQUIPAS
o caso de temos vrias equipas que participam num torneio de futebol da escola. A relao que se estabelece unria uma vez que as equipas que se formam na escola so as que vo participar do torneio e uma relao 1:1 porque cada equipa joga cada vez apenas com uma nica equipa. entidade EQUIPAS ir corresponder a tabela com o mesmo nome e uma vez que a associao possui atributos ser criada uma segunda tabela com o nome de JOGO que registar no s as duas equipas intervenientes em cada jogo, mas tambm a data e hora da sua realizao e os resultados. Assim temos, EQUIPAS (CodEquipa, Nome, NumJogadores) JOGO (CodEquipa1, CodEquipa2, Data, Hora, Golos1,Golos2)

Prof. Jos C. Silva

20

Bases de Dados Derivao de Tabelas a partir do Modelo Entidade-Associao Na tabela JOGO temos uma chave primria composta pelos campos CodEquipa1 e CodEquipa2, Data, os quais registam os cdigos das duas equipas intervenientes em cada jogo, bem como a data da realizao do mesmo. Consideramos uma chave composta com trs campos, pois eventualmente as mesmas equipas podem voltar a defrontar-se no mesmo torneio, e a s a data ir distinguir os jogos. Vejamos um exemplo prtico. A Associao de Estudantes da Escola Secundria Joo de Deus est a realizar um torneio de futebol destinado a equipas da escola. Das quatro equipas apresentadas, vejamos que jogos se realizaram at ao momento: Tabela: EQUIPAS CodEquipa Nome 1 Os Bravos 2 Os InforTemveis 3 Os Fortes 4 Os Invensveis Tabela: JOGOS CodEquipa1 CodEquipa2 1 2 4 3 3 1 4 2

NumJogadores 12 13 11 11

Data 22-01-97 22-01-97 22-01-97 22-01-97

Hora 14:00 14:00 16:00 16:00

Golos1 1 3 2 1

Golos2 2 2 1 1

De notar que em ambas as tabelas no exitem valores nulos. Consideremos agora um segundo caso. Suponhamos que se realizaria numa determinada empresa um torneio de golfe entre os vrios funcionrios, assim teramos:

JOGAR FUNCIONRIO FUNCIONRIO

Neste caso a associao que se estabelece tambm unria, uma vez que os funcionrios so tambm jogadores. Olhando para este caso deriva as tabelas:

Prof. Jos C. Silva

21

Bases de Dados Entidade-Associao 4.1.2 Associao binria um-para-um

Derivao de Tabelas a partir do Modelo

O tipo de associaes um-para-um pode ser exaustivamente analisado considerando os seguintes casos: no existem entidades obrigatrias; uma das entidades obrigatria; ambas as entidades so obrigatrias. Caso 1: No existem Obrigatoriedades Consideremos a seguinte associao entre os INVESTIGADORES e os CASOS que investigam, em que no exitem obrigatoriedades.

1
INVESTIGADORES

1
CASOS

A B C D Nesta associao binria temos vrios INVESTIGADORES (A, B, C, D) e vrios casos em investigao (C1, C2, C3). Notemos que tal como a associao est definida existe um Investigador D que no tem nenhum caso atribuido. Poderiamos definir para j as tabelas INVESTIGADORES e CASOS da seguinte maneira: INVESTIGADORES (CodInv, Nome, Cargo, ...) CASOS (CodCaso, DataIncio, Descrio, ...) O problema que se coloca como registar as Investigaes j em curso. Ser que colocando a chave da tabela INVESTIGADORES na tabela CASOS resolveria o problema? Vejamos a tabela de CASOS como ficaria definida: CASOS (CodCaso, CodInv, DataIncio, Descrio, ...) De maneira nenhuma, uma vez que poderiam existir casos para os quais no existissem investigadores associados. Iramos obter certos registos em que o campo Codinv estaria nulo, o quw no deve acontecer. Ser que poderiamos colocar o CodCaso na tabela INVESTIGADORES ? O problema seria o mesmo! A soluo ser criar uma terceira tabela INVESTIGAO: INVESTIGADORES (CodInv, Nome, Cargo, ...) CASOS (CodCaso, DataEntrada, Descrio, ...) INVESTIGAO (CodInv, CodCaso, DataIncio, DataFim)

C1 C2 C3

Prof. Jos C. Silva

22

Bases de Dados Derivao de Tabelas a partir do Modelo Entidade-Associao Ao criar esta tabela INVESTIGAO garantimos apenas que figuram os casos para os quais apenas exista j um investigador a trabalhar. E desta maneira permite que existam Investigadores que no tenham caso atribudo de momento, e casos para os quais no existam Investigadores ainda associados. Vejamos com um exemplo: Tabela: INVESTIGADORES CodInv Nome 1 Bruno Santos 2 Anbal Cruz 3 Carlos Tiago 4 Filipe Justino Tabela: CASOS CodCaso DataEntrada 1 15-08-96 2 17-09-96 3 16-10-96 4 22-11-96 Tabela: INVESTIGAO CodInv CodCaso 1 1 2 2 3 2 4 3

Cargo Inspector Sub-Inspector Inspector Director

Descrio Trfico de Armas Homicdio Sequestro Roubo

A derivao do Modelo EntidadeAssociao diz, no caso de uma associao binria 1:1 sem obrigatoriedades, que temos de criar uma terceira tabela em que a chave primria composta pelas chaves das entidades envolvidas, podendo existir outros campos da nova tabela que tambm participem da chave primria. No entanto, temos que analisar caso a caso. DataIncio 16-09-96 17-09-96 16-10-96 24-11-96 DataFim 19-10-96 15-10-96 12-12-96 13-12-96 Assim, neste exemplo em particular, a chave primria da tabela INVESTIGAO ser composta pelos campos CodInv, CodCaso e DataIncio. A tabela assim definida possibilita a um investigador reabrir um caso j encerrado. Uma vez que a DataIncio da nova investigao ser diferente, no existiro repeties na chave primria da tabela INVESTIGAES.

Prof. Jos C. Silva

23

Bases de Dados Entidade-Associao

Derivao de Tabelas a partir do Modelo

Caso 2: Uma das entidades obrigatria Consideremos o seguinte caso de um Centro de Formao de professores de uma escola. Cada formador tem de ser um professor com experincia profissional, mas nem todos os professores que frequentam o centro so formadores.

1
PROFESSOR

1
FORMADOR

A associao estabelecida entre as entidades FORMADOR e o PROFESSOR, diz que a entidade FORMADOR uma entidade obrigatria. Uma vez que nem todos os professores so formadores, a associao entre professores e formadores pode ser assegurada atravs da incluso do identificador da entidade PROFESSOR na tabela correspondente entidade FORMANDOR. Assim, teremos as seguintes tabelas: PROFESSOR (CodProf, Nome, Habilitaes, ...) FORMADOR (CodForm, Nome, ... , CodProf )

Caso 3: Ambas as entidades so obrigatrias Todos os funcionrios do Estado participam no Fundo de Penses e s permitida a participao a funcionrios.

FUNCIONRIOS

ASSOCIADOS

Neste caso, uma vez que ambas entidades so obrigatrias, s existe a necessidade de criar uma nica tabela com os seguintes campos: FUNCIONRIOS (CodEmpr, Nome, ... , CodAssociado, Mensalidade, ... ) A tabela poderia ficar com o seguinte aspecto: Tabela: FUNCIONRIOS CodEmpr Nome 1 Carlos Castro 2 Samuel Vinha 3 Beatriz Bastos

CodAssociado 1245 2545 989

Mensalidade 20.000$00 15.000$00 25.000$00

...

...

...

...

Prof. Jos C. Silva

24

Bases de Dados Entidade-Associao

Derivao de Tabelas a partir do Modelo

4.2 Associaes do tipo um-para-vrios (1:n) Considere-se as duas entidades A e B atravs de uma determinada associao do tipo umpara-vrios (1:n), em que a cada elemento de A corresponde um ou mais elementos de B, mas a cada elemento de B corresponde apenas um elemento de A.

Neste tipo de associao podem acontecer quatro casos distintos: no existem entidades obrigatrias; a entidade do lado 1 entidade obrigatria; a entidade do lado n entidade obrigatria; ambas entidades so obrigatrias. Caso 1: No existem entidades obrigatrias Numa empresa existem vrias reas funcionais, em cada rea trabalham vrios funcionrios, mas cada funcionrio apenas pode pertencer a uma rea funcional.

REAS

FUNCIONRIOS

Neste caso existe a convenincia de criar uma terceira tabela com uma chave primria composta pelos identificadores das entidades REAS e FUNCIONRIOS, e eventualmente mais algum atributo se a associao os possuir. Assim, e para este caso, as tabelas seriam as seguintes: REAS (CodArea, Designao, ...) FUNCIONRIOS (CodFunc, Nome, ... ) REAS-FUNCIONRIOS (CodArea, CodFunc, DataAfectao) Caso 2: A entidade do lado 1 entidade obrigatria Uma rea s pode existir se tiver funcionrios, mas podem existir funcionrios que no pertenam a nenhuma rea especifica.

Prof. Jos C. Silva

25

Bases de Dados Entidade-Associao

Derivao de Tabelas a partir do Modelo

REAS

FUNCIONRIOS

Neste caso existe a convenincia de criar uma terceira tabela com uma chave primria composta pelos identificadores das entidades REAS e FUNCIONRIOS, e eventualmente mais algum atributo se a associao os possuir. Assim, e para este caso, as tabelas seriam as seguintes: REAS (CodArea, Designao, ...) FUNCIONRIOS (CodFunc, Nome, ... ) REAS-FUNCIONRIOS (CodArea, CodFunc, DataAfectao) Caso 3: A entidade do lado n entidade obrigatria Cada funcionrio pertence obrigatoriamente a uma rea, mas podem existir reas sem funcionrios.

REAS

FUNCIONRIOS

Neste caso basta inserir o identificador da entidade no obrigatria REAS na tabela da entidade obrigatria FUNCIONRIOS. Assim, e para este caso, as tabelas seriam as seguintes: REAS (CodArea, Designao, ...) FUNCIONRIOS (CodFunc, Nome, ... , CodArea) Caso 4: Ambas entidades so obrigatrias Uma rea s pode exitir se tiver funcionrios, e cada funcionrio tem de pertencer no mximo a uma rea.

REAS

FUNCIONRIOS

Prof. Jos C. Silva

26

Bases de Dados Derivao de Tabelas a partir do Modelo Entidade-Associao Neste caso existe a convenincia de criar uma terceira tabela com uma chave primria composta pelos identificadores das entidades REAS e FUNCIONRIOS, e eventualmente mais algum atributo se a associao os possuir. Assim, e para este caso, as tabelas seriam as seguintes: REAS (CodArea, Designao, ...) FUNCIONRIOS (CodFunc, Nome, ... ) REAS-FUNCIONRIOS (CodArea, CodFunc, DataAfectao) Na verdade, o conjunto de atributos CodArea e CodFunc seria insuficiente como chave primria da tabela REAS-FUNCIONRIOS pois, se o objectivo da tabela registar as movimentaes dos funcionrios pelas vrias reas, pode muito bem acontecer que existam funcionrios que tenham sado de uma rea e tivessem voltado a entrar. Uma vez que existe a possibilidade de repetio, temos de acrescentar chave primria tambm o campo DataAfectao. 4.3 Associaes do tipo vrios-para-vrios (n:m) Considere-se as duas entidades A e B atravs de uma determinada associao do tipo vriospara-vrios (n:m), em que a cada elemento de A corresponde um ou mais elementos de B, e a cada elemento de B corresponde um ou vrios elementos de A.

A B Este tipo de associao obriga sempre criao de uma tabela para representar a associao das entidades envolvidas.
Analisemos a associao entre as alunos e as disciplinas em que se encontram matriculados.

ALUNOS DISCIPLINAS Poderiamos dizer que cada aluno est matriculado a vrias disciplinas e em cada disciplina esto matriculados vrios alunos.

Como se trata de uma associao do tipo vrios-para-vrios, para alm das tabelas ALUNOS e DISCIPLINAS, existir uma terceira tabela para a associao entre entidades a que poderiamos chamar de MATRCULAS. As tabelas poderiam ser as que se apresentam:

ALUNOS (CodAluno, Nome, Morada, ...) DISCIPLINAS (CodDisc, Designao, Nvel, ... ) Prof. Jos C. Silva 27

Bases de Dados Derivao de Tabelas a partir do Modelo Entidade-Associao MATRCULAS (CodAluno, CodDisc, DataMatricula) Poderiamos concretizar com um exemplo: Tabela: ALUNOS CodAluno Nome 1214 Rui Matias 1250 Ana Cruz 1356 Carla Tito 1456 Hugo Costa Tabela: DISCIPLINAS CodDisc Designao Ing10 Ingls Port11 Portugus Mat12 Matemtica Fil10 Filosofia Tabela: MATRCULAS CodAluno CodDisc 1214 Ing10 1250 Ing10 1456 Fil10 1356 Mat12 Morada R: Flores, 4 Urb. Montinho R: Castro, 3 R: C - 1 F

Nvel 10 11 12 10

DataMatricula 11-07-96 11-07-96 12-07-96 12-07-96

Este o caso de uma relao binria, vejamos mais um exemplo sobre uma associao trenria do tipo vrios-paravrios (m:n). Suponhamos que pretendemos registar os filmes realizados por vrios realizadores em que participam vrios actores.

ACTORES

FILMES n FILMES

REALIZADORES

Se derivarmos as correspondentes tabelas iriamos obter: Prof. Jos C. Silva 28

Bases de Dados Derivao de Tabelas a partir do Modelo Entidade-Associao ACTORES(CodActor, Nome, ...) FILMES (CodFilme, Ttulo, ...) REALIZADORES(CodRealizador, NomeRealizador, ...) ACTORES-FILMES-REALIZADORES (CodActor, CodFilme, CodRealizador, ... )

Prof. Jos C. Silva

29

Bases de Dados Entidade-Associao

Derivao de Tabelas a partir do Modelo

4.4 Quadro Resumo No quadro abaixo A, B e C representam as tabelas correspondentes s entidades A, B e C respectivamente e R representa a associao entre entidades. AtrR, representa um atributo da associao R.

ASSOCIAES
um-para-um (1:1) Unria
2 tabelas A(CodA, ... ) R(CodA1, CodA2, ... )

um-para-vrios (1:n) Unria


1 tabela A(CodA1, ..., CodA2, ... )

vrios-para-vrios (m:n) Unria


2 tabelas A(CodA, ... ) R(CodA1, CodA2, ... )

Binria
sem

Binria tabelas
3 obrigatoriedades tabelas

Binria
3 tabelas A(CodA, ... ) B(CodB, ...) R(CodA, CodB, AtrR, ...)

obrigatoriedades sem

A(CodA, ... ) B(CodB, ...) R(CodA, CodB, AtrR, ...) _____________________________ entidade lado 1 entidade uma entidade obrigatria Trenria obrigatria 2 tabelas 3 tabelas Esta associao ser tratada se B entidade obrigatria como duas associaes A(CodA, ... ) binrias, pelo que existiro, B(CodB, ...) A(CodA, ... ) trs tabelas para as entiR(CodA, CodB, AtrR, ...) B(CodB, CodA, ...) dades mais duas para as associaes, ao todo cinco lado n Basta inserir o identificador da entidade tabelas. entidade no obrigatria na entidade obrigatria ____________________________ tabela da entidade obrigaMais do que trs tria. A(CodA, ... ) entidades B(CodB, CodA, ...) ambas so entidades Esta associao ser sempre obrigatrias ambas so entidades decomposta e tratada associ1 tabela obrigatrias ao a associao. 3 tabelas A(CodA, ..., CodB, ... ) A(CodA, ... ) B(CodB, ...) R(CodA, CodB, AtrR, ...) A(CodA, ... ) B(CodB, ...) R(CodA, CodB, AtrR, ...)

Prof. Jos C. Silva

30

Bases de Dados Entidade-Associao 4.5 Exerccios

Derivao de Tabelas a partir do Modelo

4.5.1 Desenhe o Diagrama Entidade-Associao e derive as tabelas relacionais. A) Relacione cliente bancrio com conta.

B) Relacione empregado com especialidade.

C) Uma escola tem vrios clubes (Fotografia, Informtica, Tnis de Mesa, ...), cada clube tem vrios alunos, mas um s orientador, cada aluno s pode pertencer a vrios clubes; cada clube s funciona numa mesma sala, mas como existem clubes a funcionar a dias diferentes, numa sala podem funcionar vrios clubes. Cada clube tem de ser obrigatoriamente orientado por um professor, e cada professor s orienta um nico clube.

Prof. Jos C. Silva

31

Bases de Dados Entidade-Associao

Derivao de Tabelas a partir do Modelo

D) Numa biblioteca existem vrios exemplares de um livro, cada exemplar pode ser requisitado pelos leitores; cada leitor pode requisitar vrios livros; no caso de no existir o livro, ou livros, pretendido(s) feita uma reserva.

E) Numa empresa, cada departamento tem no mximo um carro, cada carro est associado pelo menos um departamento. Este carro sempre utilizado por empregados autorizados desse departamento. Um empregado pode utilizar no mximo um carro. Um departamento pode ter vrios empregados mas um empregado tem que pelo menos que trabalhar para um departamento.

Prof. Jos C. Silva

32

Bases de Dados

Normalizao de tabelas

5. NORMALIZAO DE TABELAS
A normalizao um processo que consiste em estruturar as tabelas e atributos por forma a eliminar redundncias e evitar problemas com a insero, eliminao e actualizao dos dados. Podemos considerar trs formas normais, designadas por primeira forma normal (1FN), segunda forma normal (2FN) e terceira forma normal (3FN). Existe uma relao que se estabelece entre as trs formas normais, tal que, uma tabela pode estar na primeria forma normal (1FN), mas no obedecer aos requisitos para estar na segunda forma normal (2FN) ou na terceira forma normal (3FN); uma tabela pode estar na segunda forma normal (2FN), mas no estar na terceira forma normal (3FN). No entanto as tabelas que esto na 2FN esto tambm na 1FN; as tabelas que esto na terceira forma normal (3FN) esto tambm na 2FN e na 1FN. Na prtica, os procedimentos de normalizao consideram-se geralmente satisfatrios se as tabelas atingirem a terceira forma normal (3FN). No entanto exitem situaes em as tabelas mesmo estanto na terceira forma normal (3FN) no constituem o estado ideal, e para tal existem mais trs formas normais conhecidas por: forma normal de Boyce/Codd; quarta forma normal (4FN); quinta forma normal (5FN). No entanto estas ltimas formas normais no esto no mbito do programa para a disciplina, pelo que conideraremos apenas a 1FN, 2FN e 3FN. Existe uma hierarquia de formas normais que pode ser apresentada atravs de um conjunto de crculos concntricos.
Todos os atributos assumem apenas valores atmicos ou elementares, ie no podem ser tipo subconjunto.

1FN 2FN
Se estiver na 1FN e se todos os atributos que no pertencem chave primria dependem da totalidade da chave e no de nenhum dos seus elementos ou conjuntos isoladamente.

3FN
Se estiver na 2FN e se dos atributos que no pertencem chave forem inde-pendentes entre si.

2FN 1FN

5.1 Primeria Forma Normal (1FN)

Prof. Jos C. Silva

33

Bases de Dados

Normalizao de tabelas

Uma tabela encontra-se na primeria forma normal (1FN) se todos os seus atributos estejam definidos em domnios que contenham apenas valores atmicos, ie os domnios devem ser formados por valores elementares e no por conjuntos de valores. Alis esta uma condio para que uma tabela seja considerada como uma tabela do Modelo Relacional de Bases de Dados. Um atributo s pode admitir valores elementares e no conjuntos de valores. Vejamos o seguinte exemplo imaginemos uma tabela destinada a registar a informao sobre os alunos e as disciplinas em que estes esto matriculados. ALUNOS(CodAluno, Nome, Morada, Disciplinas, ...) Tabela: ALUNOS CodAluno Nome 1214 Rui Matias 1250 Ana Cruz 1356 Carla Tito 1456 Hugo Costa Morada R. Flores, 4 Urb. Montinho R. Castro, 3 R. C - 1 F Disciplinas Portugus, Matemtica, Fsica Latim, Portugus, Ingls Economia, Matemtica, Direito Portugus, Matemtica, Fsica

Esta tabela obedece primeira forma normal (1FN), uma vez que o atributo DISCIPLINAS admite conjuntos de valores. Consideremos a tabela com alguns dados como exemplo: Como podemos constatar, o atributo DISCIPLINAS apresenta o conjunto de disciplinas frequentadas por cada aluno. Poderamos repetir os valores na tabela para que o atributo DISCIPLINAS apenas contivesse um nico valor. Assim a tabela ficaria com a seguinte forma: Tabela: ALUNOS CodAluno Nome 1214 Rui Matias 1214 Rui Matias 1214 Rui Matias 1250 Ana Cruz 1250 Ana Cruz 1250 Ana Cruz 1356 Carla Tito 1356 Carla Tito 1356 Carla Tito 1456 Hugo Costa 1456 Hugo Costa 1456 Hugo Costa Morada R. Flores, 4 R. Flores, 4 R. Flores, 4 Urb. Montinho Urb. Montinho Urb. Montinho R. Castro, 3 R. Castro, 3 R. Castro, 3 R. C - 1 F R. C - 1 F R. C - 1 F Disciplina Portugus Matemtica Fsica Latim Portugus Ingls Economia Matemtica Direito Portugus Matemtica Fsica

A tabela ALUNOS agora est na 1FN, pois todos os atributos contm apenas valores elementares. Apresernta no entanto grande redundncia de informao, que se reflete na repetio dos identificadores dos nomes e moradas dos alunos. Prof. Jos C. Silva 34

Bases de Dados

Normalizao de tabelas

Para alm desse inconveniente, podem apontar-se ainda os seguintes: Problemas de actualizao - se a morada de um aluno for alterada, essa alterao tem de ser feita em vrias linhas da tabela, sob o risco de gerar incoerncias na Base de Dados, ie numa determinada linha o aluno poder aparecer uma morada e noutra linha outra; Problemas de insero com a tabela estruturada desta maneira torna-se impossvel registar um aluno que no esteja matriculado a nenhuma disciplina mas que se encontra a fazer apenas exames, sem o atributo DISCIPLINA fique com valor nulo no obedecendo regra de integridade de entidade; Problemas de eliminao - porque para anular a matrcula de um aluno implica ter de eliminar vrias linhas da tabela, e mesmo perder a informao do aluno, tal como NMERO, NOME e MORADA. Estes problemas acabam se criarmos uma tabela para registar os dados dos alunos, outra para registar os dados relativos a cada disciplina e uma outra para registar os dados da matricula de cada aluno em cada disciplina. Derivando as tabelas relacionais poderiamos obter: ALUNOS (CodAluno, Nome, Morada, ...) DISCIPLINAS (CodDisciplina, Designao, ... ) MATRCULAS (CodAluno, CodDisciplina, DataMatrcula) Esta decomposio de tabelas permite eliminar os problemas de actualizao, eliminao e insero de dados nas tabelas. 5.2 Segunda Forma Normal (2FN) Antes de vermos que condies uma tabela deve obedecer para estar na 2FN necessrio ver o conceito de dependncia funcional trivial ou simples e dependncia funcional elementar entre atributos. 5.2.1 Dependncia Funcional Trivial ou Simples e Dependncia Funcional Elementar Considerarmos que uma tabela A tem os atributos X, Y, Z e W tal que: A (x, y , z, w)

Se o atributo Z funcionalmente dependente do atributo X, para um determinado valor de X, o valor de Z sempre o mesmo. Pelo que X um atributo determinante e Z o atributo dependente. A este tipo de dependncia d-se o nome de dependncia elementar trivial ou simples. Vejamos a seguinte tabela: Prof. Jos C. Silva 35

Bases de Dados Tabela: A X Y 1 3 2 4 1 5 1 3 2 4 7 3

Normalizao de tabelas

Z 2 5 2 2 5 4

W 7 8 4 7 8 2

Podemos observar que sempre que o valor de X 1 o valor de Z 2 (1, 3 e 4 linhas); sempre que X 2 Z vale 5 (2 e 5 linhas). Como a cada valor de X est sempre associado o mesmo valor de Z, dizemos que existe uma dependncia funcional simples entre o atributo X e o atributo Z.

Tambm pode acontecer o caso em que temos na tabela A o atributo W dependa no de um mas de dois atributos X e Y. Observemos a tabela anterior para verificar que, sempre que existe uma ocorrncia de X e Y, com X igual a 1 e Y igual a 3 respectivamente, o valor de W sempre 7 (1 e 4 linhas). Da mesma maneira na 2 e 5 linhas, sempre que X e Y valem 2 e 4 respectivamente o valor de W sempre 8. Se neste segundo caso considerarmos que os atributos X e Y so chave primria e se o atributo W depender funcionalmente dos atributos X e Y como um conjunto e no depender de nenhum deles isoladamente, diz-se que o atributo W depende funcionalmente de X e Y como conjunto. A este tipo de dependncia d-se o nome de dependncia funcional elementar. 5.2.2 Condies para que uma tabela esteja na 2FN Consideremos uma tabela constituda por uma nica chave candidata que funciona como chave primria. Esta tabela estar na segunda forma normal (2FN) se: estiver na primeria forma normal (1FN); e se todos os atributos que no pertencem chave, dependem da chave atravs de uma dependncia funcional elementar (ie, dependem da totalidade da chave e no de um dos seus atributos ou subconjuntos isoladamente). Esta condio evidentemente s se aplica no caso da chave ser composta por mais de um atributo. Caso a chave seja constituda por um nico atributo a condio imposta que os restantes atributos dependam funcionalmente da chave. Retomemos o exemplo dos alunos e das disciplinas, e consideremos a seguinte tabela: ALUNOS (CodAluno, Nome, Morada, CodDisciplina, DesignaoDisciplina) A chave primria composta pelos atributos CodAluno e CodDisciplina. A condio para que esteja na 2FN que todos os atributos que no pertencem chave dependam da totalidade da chave, o que no o caso. Vejamos, os atributos Nome e Morada apenas depende do atributo CodAluno e o atributo DesignaoDisciplina apenas depende do Prof. Jos C. Silva 36

Bases de Dados

Normalizao de tabelas

atributo CodDisciplina, pelo que esta tabela no est normalizada, no obedece 2FN. Para tal teramos de decomp-la em trs tabelas: ALUNOS (CodAluno, Nome, Morada, ...) DISCIPLINAS (CodDisciplina, Designao, ... ) MATRCULAS (CodAluno, CodDisciplina, DataMatrcula) De notar que o atributo DataMatrcula depende da totalidade da chave primria da tabela MATRCULAS.

5.3. Terceira Forma Normal (3FN) Para que uma tabela esteja na 3FN necessrio que: esteja na 2FN; no haver atributos que no fazem parte da chave que sejam funcionalmente dependentes de qualquer combinao dos restantes. Para alm das condies exigidas para que a tabela esteja na 2FN, a terceira forma normal impe que cada atributo dependa apenas da chave e no de qualquer outro atributo ou conjunto de atributos. O objectivo eliminar aquilo que se chama de dependncias transitivas. Voltemos ao exemplo da tabela A com os atributos X, Y e Z, em que X a chave primria. Os atributos Y e Z dependem funcionalmente da chave X. Todavia verifica-se uma transitividade, o atributo Z tambm depende funcionalmente de Y. Uma vez que se verifica essa transitividade, o atributo Z no depende apenas da chave, depende tambm de outro atributo. No esto portanto reunidas as condies para que a tabela possa estar na 3FN, para tal era necessrio que os campos que no pertencem chave fossem mutuamente independentes. Consideremos a seguinte tabela: JOGO (CodJogo, Estdio, Nomerbitro, Categoriarbitro) Nesta tabela verifica-se que os atributos so funcionalmente dependentes da chave, mas existe uma transitividade, o atributo Categoriarbitro depende funcionalmente de Nomerbitro, ie os atributos Categoriarbitro e Nomerbitro no so independentes, pelo que a tabela no est na 3FN.

Esta situao acarreta problemas a nvel de insero, actualizao e eliminao de dados. Em termos de actualizao, a informao relativa aos rbitro ir aparecer repetida na tabela. E se o rbitro mudar de categoria, essa alterao dever ser feita em vrias ocorrncias desse Codrbitro. Se houver uma nica tabela relativa aos rbitros, essa actualizao seria feita apenas numa nica ocorrncia, uma nica vez.

Prof. Jos C. Silva

37

Bases de Dados

Normalizao de tabelas

Quanto ao problema da insero, significa que se existir um rbitro que no tenha ainda arbitrado nenhum jogo, mas estiver j associado a uma categoria, ele no poder ser registado nesta tabela. Quanto ao problema da eliminao, vejamos o caso em que existe um rbitro que tenha arbitrado um nico jogo, se eliminarmos essa ocorrncia ficaremos sem informo relativamente a esse rbitro. A normalizao transforma esta tabela no seguinte conjunto de tabelas, todas na 3FN: JOGO (CodJogo, Estdio) RBITRO (Codrbitro, Nome-rbitro, Categoria-rbitro) JOGO-RBITRO (CodJogo, Codrbitro) Se as tabelas de uma Base de Dados j estiverem nas trs formas normais consideradas 1FN, 2FN e 3FN, ento podemos considerar que esto normalizadas, salvo raras excepes em que ser necessrio verificar se esto normalizadas segundo a forma normal de Boyce Codd, a 4FN e a 5FN, mas como no esto no mbito do programa, consideraremos apenas as trs primeiras.

Prof. Jos C. Silva

38

Bases de Dados

Operaes sobre tabelas

6. OPERAES SOBRE TABELAS


Numa Base de Dados relacional, a informao est organizada sob a forma de tabelas que podem ser de dois tipos: tabelas base e tabelas virtuais. As tabelas base so aquelas que existem como estrutura de dados armazenadas num suporte fsico de Base de Dados. Por seu lado, as tabelas virtuais resultam de querys. Uma query o que em portugus se designa por consulta, e uma query uma consulta Base de Dados e consiste na execuo de uma ou mais operaes sobre tabelas de base ou sobre as tabelas virtuais que resultam de outras consultas. As operaes de consulta Base de Dados so normalmente feitas s tabelas base. As operaes fundamentais feitas sobre uma base de dados so: Seleco\Restrio Projeco Produto Cartesiano Unio Diferena Diviso Intercepo Juno (join)

6.1 Seleco ou Restrio Uma seleco uma operao aplicada sobre uma tabela da base de dados com a finalidade de extrair um subconjunto de registos que obedeam a uma ou mais condies. Uma condio pode envolver um ou mais campos de uma tabela e so definidas recorrendo a operadores relacionais =, <>, >, <, etc. TABELA ou QUERY Seleco QUERY

possvel executar uma operao de seleco a uma tabela de ALUNOS para obter todos os alunos que verifiquem a condio Idade>18. Neste caso, Idade seria um dos campos da tabela Prof. Jos C. Silva 39

Bases de Dados

Operaes sobre tabelas

ALUNOS e o resultado da consulta seriam todos os alunos com idade superior a 18 anos. Vejamos a tabela de ALUNOS e o resultado da query. Tabela: ALUNOS CodAluno Nome 1214 Rui Matias 1215 Rafael Matos 1216 Rui Santos 1250 Ana Cruz 1251 Anabela Carmo 1252 Antnia Costa 1356 Carla Tito

Idade 19 17 18 20 22 16 15

Uma consulta tabela no sentido de obter apenas os elementos relativos aos alunos com mais de 18 anos pode ser informalmente definida da seguinte maneira: SELECIONAR CodAluno, Nome, Idade DA TABELA ALUNOS ONDE Idade > 18 Se ao query fosse dado o nome ALUNOS COM MAIS DE 18 ANOS, o resultado apareceria como uma tabela virtual ou query com o aspecto que se segue: Query: ALUNOS COM MAIS DE 18 ANOS CodAluno Nome Idade 1214 Rui Matias 19 1250 Ana Cruz 20 1251 Anabela Carmo 22 Esta consulta traduz uma operao de seleco sobre a tabela ALUNOS e constitui um subconjunto de registos dessa tabela onde o campo Idade assume um valor superior a 18. Uma restrio pode envolver vrias condies, como se pode verificar atravs da consulta executada sobre a mesma tabela ALUNOS com o objectivo de obter os alunos com idades compreendidas entre os 17 e os 20 anos inclusiv. Informalmente poderiamos defini-la como: SELECCIONAR CodAluno, Nome, Idade DA TABELA ALUNOS ONDE idade>=17 e idade <=20

Query: ALUNOS ENTRE OS 17 E OS 20 ANOS CodAluno Nome Idade 1214 Rui Matias 19 1215 Rafael Matos 17 1216 Rui Santos 18 Prof. Jos C. Silva 1250 Ana Cruz 20

40

Bases de Dados

Operaes sobre tabelas

6.2 Projeco Uma projeco uma operao que selecciona um subconjunto de campos de uma tabela. TABELA ou QUERY QUERY

Projeco

Prof. Jos C. Silva

41

Bases de Dados

Operaes sobre tabelas

Vamos ilustrar a aplicao da operao de projeco sobre a tabela de ALUNOS definida do seguinte modo: ALUNOS (CodAluno, Nome, Morada, Localidade, Idade) Tabela: ALUNOS CodAluno Nome 1214 Rui Matias 1250 Ana Cruz 1356 Carla Tito 1456 Hugo Costa

Morada R: Flores, 4 Urb. Montinho R: Castro, 3 R: C - 1 F

Localidade Portimo Faro Faro Lisboa

Idade 19 17 18 20

Uma projeco da tabela ALUNOS pode ser expressa informalmente da seguinte maneira: SELECCIONAR Nome, Localidade, Idade DA TABELA ALUNOS Se a esta consulta dermos o nome de NOMES LOCALIDADE E IDADE o resultado seria: Query: NOMES LOCALIDADE E IDADES Nome Localidade Idades Rui Matias Portimo 19 Ana Cruz Faro 17 Carla Tito Faro 18 Hugo Costa Lisboa 20 Para ilustrar o facto de que as consultas podem ser obtidas atravs de operaes executadas sobre o resultado de outras consultas, ie querys a partir de outros querys, vamos criar um nova projeco sobre o query anterior definido por: SELECCIONAR Nome, Localidade DA QUERY NOMES LOCALIDADE E IDADES Se a nova query fosse designada por NOMES E LOCALIDADE , o resultado seria: Query: NOMES LOCALIDADE Nome Localidade Rui Matias Portimo Ana Cruz Faro Carla Tito Faro Hugo Costa Lisboa

Bases de Dados

Operaes sobre tabelas

De notar que o mesmo resultado se poderia obter executando a consulta sobre a tabela original de ALUNOS: SELECCIONAR Nome, Localidade DA TABELA ALUNOS A uma consulta ou query poder ser aplicada uma operao de seleco e de projeco simultaneamente. Para obter Nome de todos os alunos com idade superior a 16 anos e que residem em Faro bastava fazer SELECCIONAR Nome DA TABELA ALUNOS ONDE Idade > 16 e Localidade = Faro O resultado deste query NOMES ALUNOS DE FARO seria o seguinte: Query: NOMES ALUNOS DE FARO Nome Ana Cruz Carla Tito

Apenas dois registos que obedecem s condies colocadas pela operao de restrio. Por seu turno a projeco restringe as colunas ao campo Nome.

Bases de Dados 6.3 Produto Cartesiano

Operaes sobre tabelas

O produto cartesiano de duas tabelas A e B uma nova tabela formada por um conjunto de campos igual ao conjunto de campos de A acrescido dos campos de B. E ser formada por todas as combinaes de cada linha de A com cada linha de B. Para que a operao seja possvel no devem existir atributos comuns a ambas as tabelas. Se assim, fosse iria resultar numa tabela com atributos repetidos violando o princpio das tabelas relacionais. O nmero de campos da nova tabela ser igual soma dos campos das duas tabelas. TABELA A TABELA B

PRODUTO DE A POR B

O nmero de registos ser igual ao nmero de registos de A vezes o nmero de registos de B. Esta operao tem pouco interesse prtico, no entanto, importante como passo intermdio para da operao de juno (join).

Bases de Dados 6.4 Unio

Operaes sobre tabelas

Esta uma operao realizada entre duas tabelas. Para que essa operao seja possvel, necessrio que as duas tabelas tenham o mesmo cabealho, ie tenham os mesmos campos definidos nos mesmos domnios. As tabelas que possuam esses requisitos dizem-se compatveis para a operao de unio. TABELA A TABELA B

A UNIO COM B

A unio das duas tabelas A e B produz uma terceira C, constituida por todas as linhas que pertenam a A ou a B. Considere-se o seguinte exemplo de alunos de duas escolas registados em tabelas diferentes, mas com a mesma estrutura e que se quer unir numa nica. Tabela: ALUNOS ESCOLA 1 CodAluno Nome Idade 1214 Rui Matias 19 1215 Rafael Matos 17 1216 Rui Santos 18 Tabela: ALUNOS CodAluno Nome 1214 Rui Matias 1215 Rafael Matos 1216 Rui Santos 1250 Ana Cruz 1251 Anabela Carmo 1252 Antnia Costa 1356 Carla Tito Tabela: ALUNOS ESCOLA 2 CodAluno Nome Idade 1250 Ana Cruz 20 1251 Anabela Carmo 22 1252 Antnia Costa 16 1356 Carla Tito 15

Muito embora a unio tivesse sido demonstrada envolvendo apenas duas tabelas, ela pode ser aplicada a trs ou mais tabelas, desde que obedeam condio de ter os mesmos campos definidos nos mesmos domnios.

Idade 19 17 18 20 22 16 15

A tabela resultante da unio dos alunos das duas escolas seria:

Bases de Dados 6.5 Diferena

Operaes sobre tabelas

A diferena uma operao entre duas tabelas que devem possuir o mesmo campos definidos nos mesmos domnios. TABELA B TABELA B

DIFERENA ENTRE A E B

O resultado da diferena entre as tabelas A e B uma tabela C que contm as linhas que pertencem a A, mas que no pertencem a B.

6.6 Diviso A diviso uma operao que pode ser executada entre duas tabelas que possuam pelo menos um atributo em comum definido no mesmo domnio. TABELA A TABELA B

DIVISO DE A POR B

Considere-se a tabela A com os atributos xey e a tabela B constituda apenas pelo atributo y (definido no mesmo domnio do atributo y da tabela A). A tabela que resulta da diviso de A por B Uma tabela constituda apenas pelo atributo x e contendo os registos que na tabela A tm como valor no atributo y todos os y constantes na tabela B. Exemplificando, consideremos duas tabelas Tabela: A X a a d g h k Y b e e h b e Tabela: B Y b

Tabela: A dividida por B X a h

Na tabela A, s as linhas em que o atributo x contm os valores a e h, que possuem o valor b no atributo Y, que o nico valor que a tabela B possui.

6.7 Intercepo A intercepo uma operao entre duas tabelas que possuam o mesmo cabealho e os mesmos domnios para os seus atributos. Tabela A Tabela B

A INTERCEPO COM B

O resultado da intercepo das duas tabelas uma nova tabela com o mesmo cabealho e formada pelas linhas que so comuns a ambas as tabelas. Vejamos o seguinte caso: Tabela: ALUNOS ESCOLA 1 CodAluno Nome Idade 1214 Rui Matias 19 1215 Rafael Matos 17 1216 Rui Santos 18 Tabela: ALUNOS ESCOLA 2 CodAluno Nome Idade 1250 Ana Cruz 20 1251 Anabela Carmo 22 1214 Rui Matias 19 1356 Carla Tito 15

O resultado da Tabela: INTERCEPO ESCOLA 1 COM intercepo constitudo ESCOLA 2 pelo registo comum s duas CodAluno Nome Idade tabelas. 1214 Rui Matias 19

6.8 Juno (Join)

Esta operao pode ser definida informalmente como a juno dos elementos de duas tabelas com base comum. Tabela A Tabela B

JUNO ENTRE A E B

O seguinte exemplo ilustra o conceito de juno de duas tabelas. Considere-se as tabelas A e B Tabela: A X Y a b c d e F g h i j k l Z 1 2 1 2 3 1 Tabela: B U m o q s u V n p r t v Z 1 2 1 2 2 U m q o s u m q o s u m q V n r p t v n r p t v n r

Tabela: A dividida por B X Y Z a b 1 a b 1 c d 2 c d 2 c d 2 e f 1 e f 1 g h 2 g h 2 g h 2 k l 1 k l 1

Os resultados da tabela da juno de A com B, explica-se do seguinte modo: As duas tabelas tm um atributo comum Z. O primeiro registo da tabela A o campo Z tem o valor 1; por sua vez, na tabela B, o campo Z tem o valor 1 nas linhas 1 e 3.

Da que os dois primeiros registos da tabela de juno sejam a conjuno dos valores dos campos da primeira linha da tabela A com os valores dos campos das linhas 1 e 3 da tabela B. As restantes linhas explicam-se da mesma forma. O tipo de juno apresentado a juno natural (natural join), pois baseia-se na relao de igualdade entre os valores dos campos. Nada impede, porm, que a operao seja executada considerando outro operador, que no a igualdade, na comparao dos campos. De observar que a juno uma projeco da restrio de um produto. Basta que se obtenha primeiro o produto de duas tabelas, e depois se aplique uma restrio que seleccione apenas os registos em que se verifique igualdade nos valores dos campos em determinado campo ou campos. Se ao resultado dessa restrio for aplicada uma projeco que elimine um dos campos para evitar existirem dois campos com o mesma designao, o resultado ser o mesmo.

Bases de Dados

A linguagem SQL

7. A LINGUAGEM SQL
A maior parte dos sistemas de gesto de bases de dados so sistemas relacionais e muitos desses sistemas so tambm sistemas SQL, por suportarem instrues do SQL. O SQL significa Structured Query Language, derivou de uma outra linguagem SQUARE e l-se como SEQUEL, foi definida por D. D. Chamberlin dos Laboratrios de Pesquisa da IBM em S. Jos Califrnia. O primeiro prottipo da linguagem foi implementado sobre a designao de System R. Enumeros produtos usaram depois de 70 a interface do SQL, mas seria a ANSI (American National Standats Institute) e a ISO (International Standarts Organization) a ditar um dialecto para o SQL como a interface para os sistemas relacionais. Muitos dos sistemas gestores de bases de dados usam o SQL o caso do Informix, Oracle, Ingres, DB2, e o Microsoft Access. A linguaguem SQL possui comandos que podemos englobar em trs grandes categorias: DDL (Data Definition Language) Linguagem de definio de dados; DML (Data Manipulation Language) Linguagem de manipulao de dados; DCL (Data Control Language) Linguagem de control dos dados.

7.1 Linguagem de definio dos dados Os comandos que pertencem a esta categoria so utilizados para criar e alterar a base de dados, tabelas e ndices. CREATE - comando usado para criar uma nova base de dados, e para criar novas tabelas numa base de dados. DROP - um comando utilizado para eliminar tabelas e ndices. ALTER - usado para modificar uma tabela (criar, alterar ou eliminar campos). 7.2 Linguagem de manipulao dos dados Os comandos que pertencem a esta categoria permitem actualizar e extrair informao da base de dados. SELECT comando usado para executar pesquisas base de dados. INSERT permite introduzir nova informao na base de dados. UPDATE permite actualizar a informao contida em registos e campos. DELETE elimina registos das tabelas da base de dados.

7. 3 Linguagem de controlo dos dados

Bases de Dados

A linguagem SQL

Os comandos desta seco permitem o controlo sob a informao na base de dados, pela atribuio de permisses de acesso, gesto da segurana e mesmo a anulao das transaces efectuadas na base de dados. GRANT permite conceder permisses de acesso base de dados. REVOKE permite retirar as permisses de acesso base de dados. CONNECT concede permisses de acesso s tabelas existentes. DBA concede todos os privilgios de administrao da base de dados. RESOURCE concede permisses para aceder s tabelas existentes e criar novas tabelas. COMMIT permite que as transaces efectuadas sejam tornados permanentes. ROLLBACK permite que as transaces efectuadas sejam anuladas.

Bases de Dados

A linguagem SQL

7.4 Comando SELECT Tal como em portugus o comando SELECT quer dizer seleccionar, ie o comando SELECT permite efectuar pesquisas e sub-perquisas sobre a informao contida numa base de dados, mostrando o resultado sobre a forma de tabela virtual. O comando SELECT tem a seguinte sintaxe: SELECT [ DISTINCT | DISTINCTROW | TOP n [PERCENT] ] <lista_campos> FROM <nome_tabela> {<alias>}{, <nome_tabela> {<alias>}} [WHERE <critrio_pesquisa>] [GROUP BY lista_campos_a_agrupar ] [HAVING <critrio_para_agrupar>] [ORDER BY <nome_campo> [ASC|DESC] {,<nome_campo> [ASC|DESC]}] O comando SELECT tem de possuir obrigatoriamente as duas primeiras linhas, todas outras opes so indicadas entre parentesis rectos: SELECT lista_campos FROM lista_tabelas; lista_campos A lista_campos, uma lista de campos e/ou expresses separadas por vrgulas. Se quisermos seleccionar todas as colunas de uma tabela, basta indicarmos o smbolo *. Pelo que para seleccionar todas os campos da tabela alunos fariamos: SELECT * FROM alunos; Caso existam campos de mais do que uma tabela indicados nesta lista, cada campo ser precedido pelo nome da tabela, separado de um ponto SELECT aluno.nome, curso.designao FROM aluno, curso; DISTINCT A opo DISTINCT omitir registos que contm dados duplicados nos campos indicados. Suponhamos que queremos ver todos os ltimos nome dos autores, e apenas este campo, queremos sem dvida evitar repeties de valores desse campo. Ento faramos: SELECT DISTINCT ultnome FROM autores; Pelo que se tivermos vrios autores em que o ltimo nome Castro, a tabela virtual resultante apenas conter um registo com o nome Castro. Podem ser indicados mais do que um campo, pelo que na tabela virtual uma combinao desses campos. DISTINCTROW A oo DISTINCTROW omitir dados baseados em registos integralmente duplicados.

Bases de Dados

A linguagem SQL

Por exemplo poderiamos criar um query que far a juno (join) nas tabelas de Leitores e de Requisies pelo campo codleitor. A tabela de leitores no contm valores duplicados no campo codleitor, porque se trata de um campo chave, mas isso no acontece no caso da tabela de Requisies. Imaginemos que queremos fazer o join das duas tabelas baseadas no campo codleitor, ento faramos: SELECT DISTINCTROW nome FROM leitores INNER JOIN requisies ON leitores.codleitor = requisies.codleitor ORDER BY nome; Se omitirmos o DISTINCTROW, a tabela virtual resultante mostrar vrias linhas para cada leitor que tem mais do que uma requisio. TOP n [PERCENT] Devolve um certo nmero de registos que caibam no topo ou em baixo de um intervalo indicado na clusula ORDER BY. Suponhamos que queremos o conjunto dos 5 registos da tabela LEITORES, dos leitores mais velhos, que satisfaam a condio de morar em Faro. SELECT TOP 5, PrimNome, OutrosNomes, UltNome FROM Alunos WHERE localidade = Faro ORDER BY idade DESC; Se quisermos 10 % dos leitores, dos leitores mais velhos, que satisfaam a mesma condio, teramos: SELECT TOP 10 PERCENT, PrimNome, OutrosNomes, UltNome FROM Alunos WHERE localidade = Faro ORDER BY idade DESC;

Bases de Dados 7.4.1 Clusula FROM SELECT <lista_campos> FROM <nome_tabela> {<alias>}{, <nome_tabela> {<alias>}}

A linguagem SQL

A clusula FROM lista_tabelas, serve para indicar a lista de tabelas sobre as quais ser aplicada a pesquisa, devem ser separadas por vrgulas. nome_tabelas alias A lista_tabelas indica as tabelas que participam na pesquisa, e aparecem separadas por vrgulas. Poder-se- criar um alias da tabela, isto um outro nome pelo qual a tabela conhecida, permitindo que sejam feitas operaes sobre o mesmo campo, SELECT X.codaluno,Y.codaluno FROM alunos AS X, alunos AS Y ;

7.4.2 Expresses e Funes de agregao Uma expresso uma combinao de colunas ligadas por operadores aritmticos. Os operadores aritmticos so os seguintes: + * / adio subtrao multiplicao diviso

As funes de agregao do SQL so usadas nas expresses, consideremos as seguintes: Count (*) Sum (exp) Avg (exp) Max (exp) Min (exp) conta o nmero de registos seleccionados. soma os valores de um campo ou combinao de campos para cada registo. faz a mdia de todos os valores da expresso indicada. calcula o valor mximo da expresso indicada para todos os registos. calcula o valor mnimo da expresso indicada para todos os registos.

Bases de Dados

A linguagem SQL

Vejamos alguns exemplos de aplicao destas funes para o sistema da biblioteca que temos vindo a estudar: a) determinar o nmero de multas atribuidas aos leitores da nossa base de dados; SELECT Count(*) AS TotalMultas FROM multas; b) determinar qual a multa mais alta a mais baixa atribuda a um leitor; SELECT Max (valor) AS MaisAlta, Min (valor) AS MaisBaixa FROM multas; b) somar todas o valor de todas as multas j registadas; SELECT Sum(valor) FROM multas;

Bases de Dados

A linguagem SQL

7.4.3 Clusula WHERE Esta clasula estabelece o critrio que define que registos das tabelas indicadas na clusula WHERE so afectadas pelo SELECT e tem o seguinte formato: SELECT <lista_campos> FROM <lista_tabelas> WHERE <critrio_pesquisa> No critrio_pesquisa aparecem os operadores lgicos AND, OR e NOT. Existem trs tipos de critrios de pesquisa: I. Comparao; II. Ligao; III. Sub-interrogaes (subquerys).

I. Critrios de pesquisa por comparao a) Operador_relacional (=, <>, >, <=, >=, <) b) [NOT] BETWEEN expresso1 AND expresso2 A palavra BETWEEN significa entre (dois valores dados pelas duas expresses). c) [NOT] IN (lista_itens) A palavra IN significa contido em (na lista de itens indicada). d) [NOT] LIKE string A palavra LIKE significa igual a. Aplica-se a campos tipo text. A string um conjunto de caracteres. Podemos usar caracteres especiais na string que permitiro pesquisar com mais preciso a informao que pretendemos. * zero ou mais caracteres ? um s caracter [a-z] qualquer letra minscula [a0-2-] pesquisa o a, o 0, 1 e 2 e o smbolo [a-z,A-Z] qualquer caracter que seja uma letra \ o prximo caracter no tem um significado real \* encontrar o smbolo * \\ encontrar o smbolo \

Vejamos mais alguns exemplos do comando SELECT com a clusula WHERE.

Bases de Dados a) seleccionar o codleitor que tem multas de valor superior a 200. SELECT codleitor FROM multas WHERE valor > 200

A linguagem SQL

O comando SELECT indica quais os campos que devem figurar o resultado da query. Do ponto de vista das operaes relacionais, trata-se de uma projeco da tabela multas. A clusula FROM indica o nome da tabela. A clusula WHERE estabelece uma condio a que as linhas as tabela devem obedecer para figurarem na query. S sero seleccionadas as linhas onde o campo valor possua um valor maior que 200. Ao fazer uma seleco de linhas, o WHERE estar a fazer uma restrio sobre a tabela multas. b) seleccionar os leitores cujo telefone comece por 089. SELECT telefone FROM leitores WHERE telefone LIKE 089* c) seleccionar os leitores cujo nome comece por uma letra de R a Z (maisculas ou minsculas). SELECT nome FROM leitores WHERE nome LIKE [R-Z]* OR nome LIKE [r-z]* II. Critrios de pesquisa por Ligao fundamental que estejam definidos os relacionamentos entre as tabelas sobre as quais se deseja fazer um query envolvendo o comando SELECT com a clusula WHERE. A ligao feita entre um ou mais campos de uma tabela e um ou mais campos da outra tabela. Caso os campos que se deseja estabelecer a ligao sejam iguais, deve-se preceder o nome do campo com o nome da tabela a que diz respeito. O resultado um tabela virtual que satisfaz a condio indicada na clusula WHERE.

Bases de Dados

A linguagem SQL

Vejamos mais alguns exemplos do comando SELECT com a clusula WHERE. a) mostrar o ttulo dos livros requisitados pelo leitor numero 194. SELECT livros.titulo FROM requisitardevolver reqdev, livros WHERE livros.isbn = reqdev.isbn AND reqdev.codleitor = 194 b) mostrar o ttulo e a localizao de todos os livros cujo assunto seja generalidades. SELECT livros.titulo, livros.localizao FROM livros, assuntos, livrosassuntos livass WHERE livros.isbn = livass.isbn AND lisass.codassunto = assuntos.codassunto AND assuntos.nomeassunto LIKE generalidades Este comando ilustra uma operao de juno (join), a qual sabemos decomposta numa projeco de uma restrio de um produto. Se observarmos o comando atentamente verificamos que a clusula FROM define um produto entre as tabelas livros, assuntos e livrosassuntos. Os campos indicados logo depois do comando SELECT executam uma projeco, definindo os campos que iro figurar na tabela virtual resultante do query. A clusula WHERE estabelece a restrio, definindo as condies a que uma linha da tabela produto deve obedecer para que ser possa figurar no resultado da query.

III.

sub-interrogaes

que podemos fazer uma sub-query, ie, o critrio de pesquisa da clusula WHERE pode ser uma novo comando SELECT. Se fizermos uma sub-query o comando SELECT no poder conter a clusula ORDER BY, e apenas poder ter um campo na lista de campos. possvel usar uma das cinco opes: WHERE expresso operador_relacional [AL L |ANY|S O M E |[NO T ]I N|[NO T ] E XIS T ]

Bases de Dados

A linguagem SQL

Vejamos mais alguns exemplos do comando SELECT com a clusula WHERE: a) O nome dos leitores que ainda no devolveram os livros SELECT primnome, ultnome FROM leitor WHERE codreq = ANY (SELECT codreq FROM requisitardevolver WHERE datadev is NULL); No exemplo apresentado temos uma query dentro outra query (ie, uma query com subquery). Neste caso, a subquery determinar todos os codreq da tabela reqdev em que o campo datadev estar em branco. A query princpal mostrar o primeiro e o ltimo nome dos leitores cujo codleitor figure nos registos encontrados pela subquery. b) Todos os ISBN ilustrados cujo ttulo Os Lusadas SELECT isbn FROM livros WHERE ilustra = S AND isbn IN (SELECT isbn FROM livros WHERE titulo = Os Lusadas); No exemplo apresentado atrs, temos querys dentro de querys (ie, uma query com subquery). Como explicao do funcionamento da segunda query poderamos dizer que a subquery, indicada entre parentesis, ir determinar os isbn de todos os livros da tabela livros em que o ttulo seja Os Lusadas. Desses isbn encontrados, o comando ir mostrar apenas aqueles em que o campo ilustra tenha o valor S. Ie, na globalidade apenas sero mostrados os isbn dos livros com o titulo Os Lusadas e com ilustraes.

Bases de Dados Exerccios Propostos I

A linguagem SQL

Resolve os seguintes exerccios no Microsoft Access usando comandos SQL. Os exerccios devem ser resolvidos sobre a base de dados AlunosCursos.mdb 1. Projeco e Restrio sobre a tabela de ALUNO. Obter uma lista com os nomes e moradas dos alunos que moram em Faro.

2. Juno (Join) da tabela aluno com a tabela DISCIPLINA. Obter uma lista com os nomes dos alunos, a disciplina e a nota do 3 perodo de todos os alunos que no moram em Faro.

3. Funes Max e Min. Obter a idade do aluno mais velho, e a idade do aluno mais novo.

4. Funo Avg. Obter a mdia de idades dos alunos de Faro.

Bases de Dados

A linguagem SQL

5.

Obter o nome dos alunos matriculados disciplina de EOTD12.

6.

Obter a mdia das notas finais do aluno n 3 na disciplina de AI durante os trs anos.

Bases de Dados

A linguagem SQL

7.4.4 Clusula GROUP BY A clusula GROUP BY combina os registos com valores iguais de um campo num nico registo. Cria-se um valor para cada registo se incluirmos as funes de agregao do SQL, tal como o Sum ou o Count, no comando SELECT. SELECT <lista_campos> FROM <lista_tabelas> WHERE <critrio_pesquisa> [GROUP BY lista_campos_a_agrupar ] Na lista_campos_a_agrupar podem estar at 10 campos usados para agrupar os registos. A ordem dos campos determina os vrios nveis de agrupamento, desde o nvel mais alto at ao nvel mais baixo de agrupamento. Esta clusula opcional. Usamos o comando WHERE para excluir registos que no queremos agrupar, e usamos a clusula HAVING para filtrar os registos depois de agrupados. Um campo na lista_campos_a_agrupar de qualquer tabela indicada na opo FROM, mesmo que no seja includa logo aps o SELECT. O SGBD no pode agrupar campos do tipo de dados memo e OLE objects. Vejamos o seguinte exemplo do comando SELECT com a clusula GROUP BY. a) Contar o nmero de requisies de livros de cada leitor. SELECT codleitor, Count(isbn) AS Total_Requisies FROM RequisitarDevolver GROUP BY codleitor

Bases de Dados

A linguagem SQL

7.4.5 Clusula HAVING Especifica que registos agrupados sero mostrados pelo comando SELECT com a clusula GROUP BY. Depois do GROUP BY ter agrupado os registos, o HAVING mostrar os registos agrupados que satisfaam as condies da clusula HAVING. SELECT <lista_campos> FROM <lista_tabela> [WHERE <critrio_pesquisa>] [GROUP BY lista_campos_a_agrupar ] [HAVING <critrio_para_agrupar>] A clasula HAVING opcial. O critrio_para_agrupar uma expresso que determina que registos agrupados sero mostrados. O HAVING pode significar que tenham, depois dos registos terem sido agrupados pelo comando GROUP BY, o HAVING determinar que registos sero mostrados dentre os registos agrupados. Podemos inclur mais do que um campo na clusula ORDER BY. Os registos sero classificados primeiro pelo primeiro campo listado aps ORDER BY. Registos com nomes iguais neste primeiro campo, sero classificados pelo valor do segundo campo, e assim por diante. Vejamos o seguinte exemplo. a) Mostrar o total de requisies de cada leitor, para leitores com mais de 3 requisies. SELECT codleitor, count(isbn) AS TotalRequisies FROM requisitardevolver GROUP BY codleitor HAVING count(isbn) > 3; b) Mostrar a mdia de requisies de cada leitor com mdia superior ou igual a 20 requisies. SELECT codleitor, avg(isbn) AS MdiaRequisies FROM requisitardevolver GROUP BY codleitor HAVING avg(isbn) > = 20;

Bases de Dados 7.4.6 Clusula ORDER BY

A linguagem SQL

Classifica os dados exibidos por um campo ou campos em ordem ascendente ou descendente. SELECT <lista_campos> FROM <lista_tabelas> [WHERE <critrio_pesquisa>] [ORDER BY <nome_campo> [ASC|DESC] {,<nome_campo> [ASC|DESC]}] Por defeito a ordem de classificao ascendente de (A-Z,0-9). A palavra reservada ASC no final de cada campo que se queira classificar por odem ascendente. E a palavra reservda DESC utiliza-se depois de cada campo que se deseja classificar por ordem descendente. Vejamos alguns exemplos. a) Lista classificada por ordem crecente pelo ltimo nome dos leitores registados. Para leitores com nome igual ordena depois pelo primeiro nome. SELECT ultnome, primnome FROM leitor ORDER BY ultnome, primnome b) Lista classificada por ordem descendente pelo titulo dos livros registados. SELECT titulo FROM livros ORDER BY titulo DESC

Bases de Dados EXERCCIOS PROPOSTOS II

A linguagem SQL

Resolve os seguintes exerccios no Microsoft Access usando comandos SQL. Os exerccios devem ser resolvidos sobre a base de dados AlunosCursos.mdb 1. Nmero de matriculas de cada aluno.

2. Lista classificada por ordem crescente de todos os alunos registados.

3. Mdia do 3 perodo de cada aluno, para mdias superiores ou iguais a 14.

4. Lista classificada por ordem decrescente de todos os alunos registados.

Bases de Dados

A linguagem SQL

5. Seleccionar o nmero e o nome dos alunos que estejam matriculados apenas a uma disciplina.

6. Professores que s estejam a leccionar uma disciplina

7. Todas as disciplinas e respectivos professores do curso de Informtica. As colunas da tabela virtual deverem ser Cdigo, Disciplina e Professor. Em que cdigo corresponde ao cdigo da disciplina indicada como Disciplina e Professor corresponde ao nome do professor. Lista ordenada pela designao da disciplina.

Bases de Dados

A linguagem SQL

EXERCCIOS PROPOSTOS II Resolve os seguintes exerccios no Microsoft Access usando comandos SQL. Os exerccios devem ser resolvidos sobre a base de dados AlunosCursos.mdb 7. Nmero de matriculas de cada aluno. SELECT codaluno, Count(coddisciplina) AS TotalMatriculas FROM matricula GROUP BY codaluno;

8. Lista classificada por ordem crescente de todos os alunos registados. SELECT * FROM aluno ORDER BY nome ;

9. Mdia do 3 perodo de cada aluno, para mdias superiores ou iguais a 14. SELECT codaluno, Avg(nt3p) AS Media FROM matricula GROUP BY codaluno HAVING Avg(nt3p) >= 14;

10. Lista classificada por ordem decrescente de todos os alunos registados. SELECT * FROM aluno ORDER BY nome DESC;

Bases de Dados

A linguagem SQL

11. Seleccionar o nmero e o nome dos alunos que estejam matriculados apenas a uma disciplina.

SELECT codaluno, nome FROM aluno WHERE codaluno = ANY (SELECT matricula.codaluno FROM matricula,aluno WHERE aluno.codaluno=matricula.codaluno GROUP BY matricula.codaluno HAVING Count(*)=1);

12. Professores que s estejam a leccionar uma disciplina SELECT nome FROM professor WHERE codprofessor = ANY (SELECT discprof.codprofessor FROM disciplinaprofessor discprof, professor WHERE professor.codprofessor=discprof.codprofessor GROUP BY discprof.codprofessor HAVING Count(*)=1); 8. Todas as disciplinas e respectivos professores do curso de Informtica. As colunas da tabela virtual deverem ser Cdigo, Disciplina e Professor. Em que cdigo corresponde ao cdigo da disciplina indicada como Disciplina e Professor corresponde ao nome do professor. Lista ordenada pela designao da disciplina. SELECT disciplina.coddisciplina AS Cdigo, disciplina.designao AS Disciplinas, professor.nome AS Professor FROM disciplina,curso,professor, disciplinaprofessor AS discprof WHERE curso.nome="Informtica" AND discprof.codprofessor=professor.codprofessor ORDER BY disciplina.designao

Bases de Dados

A linguagem SQL

GLOSSRIO
atributo Base de Dados BD campo chave primria chave secundria chave estrangeira domnio entidade modelo Entidade-Associao modelo relacional obrigatoriedade ocorrncia registo relao SGBD - Sistema Gestor de Base de Dados ou do ingls DBMS Database Management System tabela valor -

You might also like