Bases de Dados · 1.º ano (indicativo)
Como desenhar um diagrama ER passo a passo?
Resposta curta
Leia o enunciado e marque os substantivos como entidades e os verbos como associações. Acrescente atributos e um identificador a cada entidade, indique a cardinalidade de cada associação (1:1, 1:N ou N:M) e resolva as N:M com uma entidade intermédia. No fim, converta cada entidade em tabela.
Quando se aplica
O diagrama entidade-associação (ER) é o desenho conceptual feito antes de criar as tabelas. Serve para combinar com quem vai usar o sistema (escola, clínica, loja, biblioteca) o que se vai guardar e como os dados se relacionam. Um modelo bem pensado evita redesenhar tabelas quando a base de dados já tem dados.
Pré-requisitos
- Noção de tabela, linha e chave primária.
- Ler com atenção um enunciado e separar o essencial do acessório.
Os elementos do diagrama
| Elemento | O que representa | Exemplo |
|---|---|---|
| Entidade | coisa sobre a qual se guardam dados | ALUNO, TURMA |
| Atributo | propriedade da entidade | nome, data de nascimento |
| Identificador | atributo que distingue cada ocorrência | nr_aluno |
| Associação | ligação entre entidades | o aluno frequenta a turma |
| Cardinalidade | quantas ocorrências se ligam | 1:1, 1:N, N:M |
Como não se desenha aqui, usa-se uma notação de texto: o identificador leva um asterisco (nr_aluno*) e cada associação escreve-se como ENTIDADE — verbo — ENTIDADE (cardinalidade). Em manuais encontra a notação de Chen (losangos e retângulos) e a de «pé de galinha»; os conceitos são os mesmos.
Método passo a passo
- Leia o enunciado e sublinhe substantivos (candidatos a entidades) e verbos (candidatos a associações).
- Escolha as entidades que precisam de guardar dados próprios. «Nome» e «idade» são atributos, não entidades.
- Liste os atributos de cada entidade e marque o identificador.
- Defina as associações entre pares de entidades e dê-lhes um verbo claro.
- Determine a cardinalidade com duas perguntas: «um A liga-se a quantos B?» e «um B liga-se a quantos A?».
- Resolva as associações N:M criando uma entidade intermédia (associativa) com os identificadores das duas e os atributos da própria associação.
- Passe para tabelas: cada entidade vira tabela; numa 1:N, a chave primária do lado «1» passa a chave estrangeira no lado «N»; a entidade intermédia vira tabela com chave composta.
Exemplos resolvidos
Exemplo 1 — Escola: turma e alunos
Enunciado: Numa escola, cada aluno pertence a uma só turma e cada turma tem vários alunos. Desenhe o modelo e passe-o para tabelas.
Resolução:
- Entidades: ALUNO e TURMA.
- Atributos: ALUNO(nr_aluno*, nome, data_nascimento); TURMA(cod_turma*, sala).
- Associação: o ALUNO pertence à TURMA.
- Cardinalidade: um aluno tem uma turma; uma turma tem muitos alunos. Resulta uma associação 1:N (TURMA 1 — N ALUNO).
- Tabelas: TURMA(cod_turma, sala) e ALUNO(nr_aluno, nome, data_nascimento, cod_turma), onde
cod_turmaé chave estrangeira.
Resposta: duas entidades ligadas por 1:N, com a chave estrangeira do lado N. Verificação: cada linha de ALUNO tem exatamente um cod_turma, tal como diz o enunciado.
Exemplo 2 — Associação N:M com atributo
Enunciado: Um aluno inscreve-se em várias disciplinas e cada disciplina tem vários alunos; interessa guardar a nota de cada inscrição. Modele.
Resolução:
- Entidades: ALUNO(nr_aluno*, nome) e DISCIPLINA(cod_disciplina*, designacao).
- Associação: o aluno inscreve-se na disciplina.
- Perguntas: um aluno liga-se a quantas disciplinas? Muitas. Uma disciplina a quantos alunos? Muitos. A cardinalidade é N:M.
- A nota pertence ao par (aluno, disciplina), não a um só deles. Cria-se a entidade associativa INSCRICAO(nr_aluno*, cod_disciplina*, nota).
- As associações passam a ser duas 1:N: ALUNO 1 — N INSCRICAO e DISCIPLINA 1 — N INSCRICAO.
Resposta: três tabelas: ALUNO, DISCIPLINA e INSCRICAO com chave composta (nr_aluno, cod_disciplina). Verificação: o mesmo par aparece uma só vez, e a nota fica guardada no sítio certo.
Exemplo 3 — Loja: clientes, pedidos e produtos
Enunciado: Uma loja de Luanda regista clientes, os pedidos que fazem e os produtos de cada pedido, com a quantidade. Um pedido é de um só cliente. Modele.
Resolução:
- Entidades: CLIENTE(id_cliente*, nome, telefone), PEDIDO(id_pedido*, data), PRODUTO(id_produto*, descricao, preco).
- CLIENTE faz PEDIDO: um cliente faz vários pedidos e cada pedido é de um cliente, logo 1:N;
id_clientevai para PEDIDO como chave estrangeira. - PEDIDO inclui PRODUTO: um pedido tem vários produtos e um produto está em vários pedidos, logo N:M.
- A quantidade pertence ao par: entidade intermédia LINHA_PEDIDO(id_pedido*, id_produto*, quantidade).
Resposta: quatro tabelas: CLIENTE, PEDIDO(com id_cliente), PRODUTO e LINHA_PEDIDO. Verificação: o preço fica em PRODUTO; a quantidade, em LINHA_PEDIDO; nenhum dado se repete sem necessidade.
Exemplo 4 — Nível de exame: clínica com 1:1 e N:M
Enunciado: Numa clínica, cada médico tem uma especialidade principal; os pacientes marcam consultas com médicos, num dia e hora. Cada paciente tem um processo clínico único. Modele e conte as tabelas.
Resolução:
- Entidades: MEDICO(id_medico*, nome), ESPECIALIDADE(cod_esp*, designacao), PACIENTE(id_paciente*, nome), PROCESSO(nr_processo*, abertura).
- MEDICO — ESPECIALIDADE: um médico tem uma especialidade principal; uma especialidade tem muitos médicos: 1:N;
cod_espvai para MEDICO. - PACIENTE — PROCESSO: um paciente tem um processo e cada processo é de um paciente: 1:1; coloca-se a chave de um na outra, por exemplo
id_pacienteem PROCESSO, marcado como único. - PACIENTE — MEDICO (marca consulta): um paciente tem várias consultas, e um médico também: N:M. Entidade intermédia CONSULTA(id_medico*, id_paciente*, data*, hora*).
- Tabelas: MEDICO, ESPECIALIDADE, PACIENTE, PROCESSO e CONSULTA.
Resposta: cinco tabelas, com as ligações 1:N, 1:1 e N:M resolvidas como indicado. Verificação: cada associação ficou representada por uma chave estrangeira ou por uma tabela intermédia.
Erros frequentes
- Transformar atributos em entidades. «Idade» ou «telefone» não precisam de entidade própria, a menos que tenham dados seus.
- Deixar associações N:M sem resolver. Não se podem representar com uma só chave estrangeira; use a entidade intermédia.
- Pôr a chave estrangeira do lado errado numa 1:N: vai para o lado «N», nunca para o «1».
- Esquecer o identificador de uma entidade, ou escolher um atributo que se pode repetir.
- Ler a cardinalidade só num sentido. Faça sempre as duas perguntas, de A para B e de B para A.
- Colocar atributos no sítio errado: a quantidade de um produto num pedido pertence à associação, não ao produto.
- Guardar dados derivados, como a idade, que se calcula a partir da data de nascimento.
Exercícios propostos
1Exercício 1
Qual é a cardinalidade das associações: (a) um professor leciona várias turmas, cada turma tem um só professor titular; (b) um autor escreve vários livros e um livro pode ter vários autores?
Ver solução
(a) 1:N (PROFESSOR 1 — N TURMA). (b) N:M, porque cada lado se liga a vários do outro; exige uma entidade intermédia AUTORIA(id_autor, id_livro).
2Exercício 2
Numa biblioteca, um leitor requisita livros e interessa guardar a data de cada requisição. Identifique as entidades, a cardinalidade e a entidade intermédia.
Ver solução
Entidades: LEITOR(id_leitor*, nome) e LIVRO(id_livro*, titulo). Um leitor requisita vários livros e um livro é requisitado por vários leitores ao longo do tempo: N:M. A data pertence à requisição: REQUISICAO(id_leitor*, id_livro*, data_requisicao*). A data entra na chave para permitir que o mesmo leitor requisite o mesmo livro mais tarde.
3Exercício 3
Cada pessoa tem um e um só Bilhete de Identidade e cada BI pertence a uma só pessoa. Que cardinalidade é e como se representa em tabelas?
Ver dica
Pense nas duas perguntas, nos dois sentidos.
Ver solução
É 1:1. Pode-se fundir tudo numa tabela PESSOA com a coluna numero_bi, ou manter duas tabelas, em que a chave estrangeira (por exemplo id_pessoa na tabela BI) é declarada única, para que cada pessoa tenha no máximo um BI.
4Exercício 4
Um mercado regista vendedores, produtos que vendem e o preço que cada vendedor pratica para cada produto (os preços variam de banca para banca). Modele a associação.
Ver solução
VENDEDOR(id_vendedor*, nome) e PRODUTO(id_produto*, descricao). Um vendedor vende vários produtos e um produto é vendido por vários vendedores: N:M. O preço depende do par, por isso fica na entidade intermédia PRECO(id_vendedor*, id_produto*, valor_kz).
5Exercício 5
Escola com: ALUNO, TURMA, PROFESSOR e DISCIPLINA. Cada turma tem vários alunos (um aluno numa só turma); um professor leciona várias disciplinas e cada disciplina é lecionada por vários professores; cada turma tem várias disciplinas e cada disciplina está em várias turmas. Conte as tabelas finais.
Ver dica
Cada N:M gera uma tabela extra.
Ver solução
Entidades: 4 tabelas (ALUNO, TURMA, PROFESSOR, DISCIPLINA). A associação ALUNO — TURMA é 1:N: só acrescenta a chave estrangeira em ALUNO. PROFESSOR — DISCIPLINA é N:M: 1 tabela (por exemplo LECIONA). TURMA — DISCIPLINA é N:M: 1 tabela (por exemplo PLANO_TURMA). Total: 4 + 1 + 1 = 6 tabelas.
Perguntas frequentes
Qual é a diferença entre o modelo ER e o modelo relacional?
O ER é o desenho conceptual, feito em linguagem do dia a dia (entidades, associações). O modelo relacional é a sua tradução para tabelas, chaves primárias e estrangeiras. Primeiro desenha-se o ER e depois converte-se.
Posso desenhar um diagrama ER à mão?
Sim, e é o habitual em aulas e exames. Para o computador existem ferramentas de desenho, mas o que se avalia é a lógica: entidades certas, identificadores e cardinalidades corretas.
Como sei se algo é entidade ou atributo?
Pergunte se precisa de guardar vários dados sobre isso ou se tem ligações com outras coisas. Se sim, é entidade; se for só uma propriedade simples de outra coisa, é atributo.
Quando devo usar uma entidade fraca?
Quando uma entidade não pode ser identificada sozinha e depende de outra, por exemplo os quartos de um hotel identificados por número dentro de cada hotel. A sua chave inclui a da entidade de que depende.
Resumo
- O ER descreve o que se guarda e como se relaciona, antes de criar as tabelas.
- Substantivos viram entidades; verbos viram associações; propriedades viram atributos.
- Cada entidade precisa de um identificador.
- Cardinalidade: 1:1, 1:N ou N:M, lida nos dois sentidos.
- N:M resolve-se com entidade intermédia; em 1:N a chave estrangeira vai para o lado N.
Onde aprofundar
- O programa e o manual da sua cadeira de Bases de Dados.
- Silberschatz, Korth e Sudarshan, Database System Concepts, capítulo sobre o modelo entidade-associação (confirme a edição).
- Elmasri e Navathe, Sistemas de Banco de Dados, capítulos sobre modelagem conceitual e mapeamento ER para relacional.
Continue a estudar
Como identificar chaves numa tabela?
Uma chave é um atributo (ou conjunto de atributos) cujo valor identifica cada linha de forma única. Para a encontrar, procure o que nunca se repete em nenhuma situação…
4 exemplos5 exercícios com solução✓ Estudado