Bases de Dados · 1.º ano (indicativo)

Como desenhar um diagrama ER passo a passo?

  • 10 min de leitura
  • 4 exemplos resolvidos
  • 5 exercícios com solução
  • Atualizado em

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

ElementoO que representaExemplo
Entidadecoisa sobre a qual se guardam dadosALUNO, TURMA
Atributopropriedade da entidadenome, data de nascimento
Identificadoratributo que distingue cada ocorrêncianr_aluno
Associaçãoligação entre entidadeso aluno frequenta a turma
Cardinalidadequantas ocorrências se ligam1: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

  1. Leia o enunciado e sublinhe substantivos (candidatos a entidades) e verbos (candidatos a associações).
  2. Escolha as entidades que precisam de guardar dados próprios. «Nome» e «idade» são atributos, não entidades.
  3. Liste os atributos de cada entidade e marque o identificador.
  4. Defina as associações entre pares de entidades e dê-lhes um verbo claro.
  5. Determine a cardinalidade com duas perguntas: «um A liga-se a quantos B?» e «um B liga-se a quantos A?».
  6. 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.
  7. 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:

  1. Entidades: ALUNO e TURMA.
  2. Atributos: ALUNO(nr_aluno*, nome, data_nascimento); TURMA(cod_turma*, sala).
  3. Associação: o ALUNO pertence à TURMA.
  4. Cardinalidade: um aluno tem uma turma; uma turma tem muitos alunos. Resulta uma associação 1:N (TURMA 1 — N ALUNO).
  5. 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:

  1. Entidades: ALUNO(nr_aluno*, nome) e DISCIPLINA(cod_disciplina*, designacao).
  2. Associação: o aluno inscreve-se na disciplina.
  3. Perguntas: um aluno liga-se a quantas disciplinas? Muitas. Uma disciplina a quantos alunos? Muitos. A cardinalidade é N:M.
  4. A nota pertence ao par (aluno, disciplina), não a um só deles. Cria-se a entidade associativa INSCRICAO(nr_aluno*, cod_disciplina*, nota).
  5. 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:

  1. Entidades: CLIENTE(id_cliente*, nome, telefone), PEDIDO(id_pedido*, data), PRODUTO(id_produto*, descricao, preco).
  2. CLIENTE faz PEDIDO: um cliente faz vários pedidos e cada pedido é de um cliente, logo 1:N; id_cliente vai para PEDIDO como chave estrangeira.
  3. PEDIDO inclui PRODUTO: um pedido tem vários produtos e um produto está em vários pedidos, logo N:M.
  4. 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:

  1. Entidades: MEDICO(id_medico*, nome), ESPECIALIDADE(cod_esp*, designacao), PACIENTE(id_paciente*, nome), PROCESSO(nr_processo*, abertura).
  2. MEDICO — ESPECIALIDADE: um médico tem uma especialidade principal; uma especialidade tem muitos médicos: 1:N; cod_esp vai para MEDICO.
  3. 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_paciente em PROCESSO, marcado como único.
  4. 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*).
  5. 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

Tente resolver primeiro no caderno; depois confira.

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

1.º ano (indicativo)9 min

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

Ver tudo de Bases de Dados