Modelos de dados

Modelo Entidade-Relacionamento

O Modelo Entidade-Relacionamento (MER) é um modelo de dados aplicável ao projeto conceitual de banco de dados. Sua concepção prevê dois elementos fundamentais: as entidades e os relacionamentos.

Aqui, preciso fazer um apontamento: no dia a dia, é comum trocarmos o termo "relacionamento" por "relação". No caso de banco de dados, há uma diferença importante entre esses dois termos. Por isso, precisamos nos atentar ao termo correto neste momento: relacionamento.

Como no curso de Engenharia de Computação da UFMT a disciplina de "Banco de Dados I" é ofertada após a disciplina de "Programação Orientada a Objetos", vou fazer diversas analogias com o objetivo de favorecer a compreensão dos conceitos.

Entidades e tipos de entidade

Em linhas gerais, uma entidade representa um determinado item que precisa ser armazenado em um banco de dados. Uma entidade pode ser um estudante, uma disciplina, um veículo ou uma instituição. Note que, na frase anterior, usei o recurso de negrito para grifar que se trata de uma única ocorrência.

Ao pensarmos no conjunto de alunos, de disciplinas, veículos ou instituição, pensamos em tipos de entidade. Em analogia ao paradigma orientado a objetos, um tipo de entidade é equivalente a uma classe, enquanto uma entidade é equivalente a um objeto.

Atributos

Um atributo representa uma propriedade a ser armazenada para uma entidade. Os atributos podem ser classificados da seguinte forma:

  • Atributo simples ou atômico: é um atributo indivisível, que não pode ser divido em partes menores. Um exemplo de atributo simples é o nome de uma cidade. Não faz sentido dividir "Cuiabá" em mais um atributo para armazenar a cidade em que estamos atuando. Mesmo se fosse "Várzea Grande", com duas palavras, a divisão não faria sentido.
    Ao descrevermos o esquema de um banco de dados, representamos esse atributo incluindo apenas o seu nome.
  • Atributo composto: um atributo composto, como o próprio nome já diz, é aquele formado por um conjunto de atributos simples. Um clássico exemplo de atributo composto é o Endereco, formado por diversos atributos simples, como logradouro, numero, complemento, cep, etc.
    Ao descrevemos o esquema do banco de dados, representamos o atributo composto da seguinte forma:
    Endereco(logradouro,rua,complemento,cep)
  • Atributo multivalorado: um atributo multivalorado é aquele que possibilita que a entidade tenha diversos valores como resposta. Em analogia à programação, é como se tivéssemos um vetor em vez de uma única variável. Número de telefone e endereço de e-mail são exemplos comuns de atributos multivalorados.
    Na representação do esquema, usamos a seguinte abordagem: {Email}
  • Atributo chave: um atributo chave representa uma atributo cujo valor é único para uma determinada entidade. No caso de uma pessoa, por exemplo, o cpf é um exemplo de atributo chave. Um aspecto interessante é que, em alguns casos, pode existir uma combinação entre atributo composto e atributo chave. Um bom exemplo disso é o RG. Como o número poderia variar de um estado para outro, a combinação de número, estado e órgão emissor é que garantia a exclusividade.
    Representamos os atributos chave de forma sublinhada, da seguinte forma:
    • Atributo chave simples: _cpf_
    • Atributo chave composto: rg(numero,estado,orgao)

Se você já está familiarizado com o conceito de banco de dados relacional, que veremos mais à frente, preciso fazer uma observação: o atributo chave que estamos discutindo aqui não é necessariamente a chave primária. Discutiremos a relação entre eles mais à frente na disciplina.

Tipos de tipos de entidade

Agora que já conhecemos os tipos de entidade e os atributos, podemos discutir a diferença entre tipos de entidade. Elmasri e Navathe (2016) apresentam dois tipos:

  • Uma entidade forte é aquela que possui, pelo menos, um atributo chave. Este acaba sendo um dos casos mais comuns na modelagem de banco de dados;
  • Uma entidade fraca é aquela que não possui nenhum atributo chave. Como é fundamental diferenciar um registro do outro, essa entidade fraca precisará estar relacionada a alguma entidade forte, que garantirá a exclusividade do registro.

Se a explicação ficou confusa, vamos imaginar um caso em que isso pode ser útil. Considere, então, um sistema de banco de dados de uma autoescola. Nesse sistema, temos o tipo de entidade Aluno, que possui um atributo chave como o CPF. Esse é um exemplo de entidade forte, pois o CPF identifica unicamente cada aluno.

Agora, considere que cada aluno pode realizar várias tentativas de prova prática. Essas tentativas são registradas em um tipo de entidade chamada Tentativa, que armazena a data, o resultado (aprovado ou reprovado) e o tipo de exame. No entanto, por si só, esses dados não são suficientes para identificar unicamente cada tentativa, pois vários alunos podem ter realizado provas na mesma data e com o mesmo resultado.

Assim, a entidade Tentativa é uma entidade fraca: ela depende da entidade Aluno para ter sua identidade definida. A identificação única de uma tentativa será formada pela combinação do CPF do aluno (chave da entidade forte) com a data da tentativa, por exemplo.

Essa dependência é expressa no modelo através de um relacionamento diferente, que discutiremos a seguir.

Relacionamentos

Relacionamentos são estruturas que conectam duas ou mais entidades e representam como essas entidades se associam no mundo real. Em outras palavras, eles expressam interações ou vínculos entre instâncias de entidades.

Existem dois aspectos principais que devemos considerar ao trabalhar com relacionamentos: a aridade (ou grau) e a função que ele exerce — se é um relacionamento normal ou um relacionamento de identificação.

Grau do relacionamento

O grau de um relacionamento se refere ao número de entidades envolvidas na associação:

  • Relacionamento binário: envolve duas entidades. É o mais comum na modelagem.
    Exemplo: no sistema de uma universidade, podemos ter um relacionamento entre as entidades Aluno e Disciplina, chamado Matricula. Esse relacionamento indica quais disciplinas cada aluno está cursando.
  • Relacionamento ternário: envolve três entidades ao mesmo tempo. Esse tipo de relacionamento aparece quando a associação entre duas entidades não é suficiente para representar uma situação do mundo real.
    Exemplo: em um sistema de logística, podemos ter um relacionamento entre Motorista, Caminhão e Rota, chamado Entrega. Isso porque um mesmo motorista pode fazer diferentes rotas com diferentes caminhões, e a combinação dos três define a entrega.

Importante: não devemos substituir um relacionamento ternário por três relacionamentos binários, pois isso pode perder o contexto da combinação entre os três elementos.

Relacionamentos normais vs. de identificação

Além do número de entidades, também é importante entender o papel do relacionamento no modelo conceitual. Os relacionamentos podem ser classificados como normais ou de identificação:

  • Relacionamento normal: conecta entidades sem alterar a maneira como elas são identificadas.
    Exemplo: o relacionamento Matricula entre Aluno e Disciplina é normal. As entidades Aluno e Disciplina já possuem seus próprios atributos chave e não dependem do relacionamento para existirem ou serem identificadas.
  • Relacionamento de identificação: conecta uma entidade fraca a uma entidade forte, permitindo que a entidade fraca seja identificada. É o caso discutido anteriormente, com a entidade Tentativa, que depende de Aluno.
    Exemplo: a entidade Tentativa precisa do relacionamento Realiza com Aluno para ser identificada unicamente. Sozinha, Tentativa não tem atributos suficientes para ser diferenciada de outra. Assim, esse relacionamento é essencial para sua identificação.

Em diagramas, os relacionamentos de identificação costumam ser representados por losangos duplos (em vez de simples), e a linha que conecta a entidade fraca ao relacionamento é grossa ou dupla, indicando dependência.

Cardinalidade e participação

Ao definirmos um relacionamento entre entidades, precisamos especificar como essas entidades se associam. Para isso, utilizamos dois conceitos fundamentais:

  • Cardinalidade: quantifica quantas ocorrências de uma entidade podem se associar a uma ocorrência da outra entidade.
  • Participação: indica se a participação de uma entidade no relacionamento é obrigatória (total) ou opcional (parcial).

Cardinalidade

A cardinalidade define o número mínimo e máximo de ocorrências de uma entidade que podem participar de um relacionamento com outra entidade.

A notação mais comum é representada por pares (min:max) próximos à entidade, nas extremidades das linhas que ligam ao relacionamento. Por exemplo:

  • 0:N: participação opcional, no máximo uma ocorrência
  • 1:1: participação obrigatória, exatamente uma ocorrência
  • 0:N: participação opcional, qualquer quantidade (inclusive nenhuma)
  • 1:N: participação obrigatória, com uma ou mais ocorrências
Exemplos práticos:
  1. No relacionamento Matricula entre Aluno e Disciplina, podemos ter:
    • Um aluno pode se matricular em várias disciplinas → cardinalidade do lado de Disciplina: (0,N)
    • Uma disciplina pode ter vários alunos → cardinalidade do lado de Aluno: (0,N)

    Esse é um caso clássico de relacionamento muitos-para-muitos (N:N).
  2. No relacionamento Ministra entre Professor e Disciplina:
    • Um professor pode ministrar várias disciplinas → (0,N)
    • Cada disciplina deve ser ministrada por exatamente um professor → (1,1)

    Isso caracteriza um relacionamento um-para-muitos (1:N).

Participação

A participação descreve se todas as ocorrências de uma entidade devem obrigatoriamente participar de um relacionamento.

  • Participação total: toda instância da entidade está associada ao menos a uma ocorrência no relacionamento. É representada por uma linha dupla conectando a entidade ao losango do relacionamento.
    Exemplo: toda Tentativa de exame deve estar associada a um Aluno. Isso significa que a participação de Tentativa no relacionamento Realiza é total.
  • Participação parcial: nem todas as ocorrências da entidade precisam estar associadas ao relacionamento. É representada por uma linha simples.
    Exemplo: nem todo Professor precisa estar alocado a uma Disciplina imediatamente. Assim, sua participação no relacionamento Ministra pode ser parcial.

A participação está relacionada ao mínimo da cardinalidade.
Se o mínimo for 1, a participação é total; se for 0, a participação é parcial.nda não foi alocado.