Esse artigo foi feito no intuito de servir como fixação dos conteúdos que estou estudando no momento, ministrado pelo professor Gabriel Ribeiro Diniz para as aulas de Banco de Dados no curso de Gestão de TI - FAPAM.

Introdução

Em projetos de banco de dados, a modelagem de dados é feita através de um modelo de dados conceitual, geralmente o Modelo Entidade-Relacionamento (MER) que representa o esquema das visões e de toda a base de dados, especificados em diagramas ER.

O passo seguinte à modelagem dos dados é o mapeamento do diagrama da base de dados, obtido na fase anterior, para um modelo de dados lógico, o Modelo Relacional (MR), representado por meio de tabelas.

Para isso, considere o esquema ER mostrado a seguir, que será utilizado para ilustrar o procedimento de mapeamento. Este procedimento é apresentado passo-a-passo, a partir do exemplo do MER de uma empresa.

Diagrama ER de uma empresa Diagrama ER de uma empresa

Regras

Passo 1: Entidade

Para cada entidade criar uma relação (Tabela) que inclua todos os atributos simples, para atributos compostos, inclua apenas os atributos simples que compõem o atributo composto. Escolha um dos atributos-chave da entidade para constituir a chave primária da relação (se a chave escolhida for composta, então o conjunto de atributos simples que a compõem irão formar a chave primária da relação).

No exemplo, foram criadas as relações EMPREGADO e PROJETO, correspondentes às entidades EMPREGADO e PROJETO, presentes no diagrama ER.

Os atributos indicados com chave-estrangeira (*) não foram incluídos ainda; eles serão adicionados durante os passo subsequentes.

Entidades EMPREGADO e PROJETO Entidades EMPREGADO e PROJETO

NOTAÇAO TEXTUAL


EMPREGADO (EmpNome, DataNasc, CPF, Sexo, Rua, Cidade, Estado, Salário)
PROJETO (ProjNome, ProjNúmero, ProjLocalização)

Passo 2: Atributo multivalorado

Para cada atributo multivalorado, criar uma nova relação que inclua o atributo simples como chave-primária. A relação também deve ter como atributo a chave-primária da relação que representa o atributo multivalorado. A chave-primária da relação será então a combinação das duas chaves.

No exemplo foi criado a relação LOCAL_DEPTO. O atributo "Localização" representa o atributo multivalorado Localização de DEPARTAMENTO, enquanto DeptoNúmero - como chave estrangeira - representa a chave-primária da relação DEPARTAMENTO. A chave primária de LOCAIS_DEPTO é a combinação de { DeptoNúmero, Localização }.

Entidade DEPARTAMENTO com o atributo multivalorado Localização Entidade DEPARTAMENTO com o atributo multivalorado Localização

NOTAÇAO TEXTUAL


DEPARTAMENTO (DeptoNome, DeptoNúmero)
LOCAL_DEPTO (DeptoNúmero*, Localização)

Passo 3: Entidade Fraca

Para cada entidade fraca, criar uma relação e incluir todos os atributos simples (ou os componentes simples de atributos compostos) como atributos da relação. Além disso, incluir como chave-estrangeira a chave-primária da relação que corresponde ao tipo de entidade dependente. A chave-primária então é a combinação da chave da entidade "forte" e a chave parcial do tipo de entidade fraca.

No exemplo, foi criada a relação DEPENDENTE correspondente ao tipo de entidade fraca DEPENDENTE. Foi incluída a chave-primária da relação EMPREGADO como atributo de DEPENDENTE (chave estrangeira). A chave-primária da relação DEPENDENTE é a combinação { EmpCPF*, DependNome }, porque DependNome é a chave-parcial da entidade DEPENDENTE.

Entidade EMPREGADO e entidade fraca DEPENDENTE Entidade EMPREGADO e entidade fraca DEPENDENTE

NOTAÇAO TEXTUAL


DEPENDENTE (EmpCPF*, DependNome, DependSexo, DepDTNasc, RelacaoParente)

Passo 4: Relacionamento 1:1

Para cada tipo de relacionamento 1:1 (um para um), a chave de uma das entidades participantes do relacionamento, vira atributo de outra entidade (como chave estrangeira da relação). Caso o relacionamento tenha atributo(s), este(s) também será(ão) incluídos como atributos na entidade escolhida.

Exemplo: foi mapeado o tipo de relacionamento 1:1 GERENCIA, escolhendo a entidade participante DEPARTAMENTO (porque sua participação no tipo de relacionamento GERENCIA é total, já que todo o departamento tem um gerente). Foi incluída a chave-primária da relação EMPREGADO como a chave-estrangeira na relação DEPARTAMENTO, chamada de EmpCPFGerente. Também foi incluído o atributo simples DataInício do tipo de relacionamento GERENCIA na relação DEPARTAMENTO, nomeado como DataInicioGerencia.

Relacionamento EMPREGADO-gerencia-DEPARTAMENTO Relacionamento EMPREGADO-gerencia-DEPARTAMENTO

NOTAÇAO TEXTUAL


EMPREGADO (EmpNome, DataNasc, CPF, Sexo, Rua, Cidade, Estado, Salário)
DEPARTAMENTO (DeptoNome, DeptoNúmero, EmpCPFGerente*, DataInicioGerencia)

Passo 5: Relacionamento 1:N

Para cada relacionamento 1:N (um para muitos), a chave da entidade participante do relacionamento com cardinalidade "1" vra atributo da entidade com cardinalidade "N". Isto é, incluir como chave-estrangeira da relação N, a chave-primária da relação 1 (isto porque cada instância da entidade do lado 1 está relacionada a mais de uma instância do lado N do relacionamento). Inclua também quaisquer atributos simples do tipo de relacionamento 1:N como atributos da entidade do lado "N".

Exemplo: Foram mapeados os tipos de relacionamento 1:N, CONTROLA, SUPERVISIONA e TRABALHA_PARA.
Para CONTROLA incluiu-se a chave-primária da relação DEPARTAMENTO como a chave estrangeira na relação PROJETO, e foi chamado DeptoNum.
Para SUPERVISIONA, incluiu-se a chave-primária da relação EMPREGADO como a chave-estrangeira na relação EMPREGADO, e foi denomido NumCPFSuper.
No relacionamento TRABALHA-PARA, foi incluída a chave-primária da relação DEPARTAMENTO como a chave-estrangeira na relação EMPREGADO, e foi denominado DeptoNum.

Relacionamentos de EMPREGADO, DEPARTAMENTO e PROJETO. Relacionamentos de EMPREGADO, DEPARTAMENTO e PROJETO.

NOTAÇAO TEXTUAL


DEPARTAMENTO (DeptoNome, DeptoNúmero, EmpCPFGerente, DataInicioGerencia)
PROJETO (ProjNome, ProjNúmero, ProjLocalização, DeptoNum*)
EMPREGADO (EmpNome, DataNasc, CPF, Sexo, Rua, Cidade, Estado, Salário, NumCPFSuper*)

EMPREGADO trabalha-para DEPARTAMENTO EMPREGADO trabalha-para DEPARTAMENTO

NOTAÇAO TEXTUAL


EMPREGADO (EmpNome, DataNasc, CPF, Sexo, Rua, Cidade, Estado, Salário, NumCPFSuper*, DeptoNum*)
DEPARTAMENTO (DeptoNome, DeptoNúmero, EmpCPFGerente, DataInicioGerencia)

Passo 6: Relacionamento N:M

Para cada tipo de relacionamento M:N (muitos para muitos), criar uma nova relação. Incluir como chave-estrangeira na nova relação as chaves-primárias das relações que representam os tipos de entidade participantes. As chaves-primárias será a combinação das chaves estrangeiras, neste caso. Inclua também qualquer atributo simples do tipo de relacionamento M:N (ou componentes simples dos atributos compostos) como atributo da nova relação. **Relacionamentos N:M sempre geram uma nova relação.

No exemplo foi mapeado o tipo de relacionamento M:N, TRABALHA_EM criando-se a relação TRABALHA_EM. Incluiu-se as chaves-primárias das relações PROJETO e EMPREGADO como chaves-estrangeiras na relação TRABALHA_EM, chamadas de ProjNúmero e EmpCPF. Também foi incluído o atributo NumHoras para representar o atributo horas do tipo de relacionamento.

A chave-primária da relação TRABALHA_EM é a combinação das chaves-estrangeiras { EmpCPF, ProjNúmero }.

EMPREGADO-trabalha_em-PROJETO EMPREGADO-trabalha_em-PROJETO

NOTAÇAO TEXTUAL


EMPREGADO (EmpNome, DataNasc, CPF, Sexo, Rua, Cidade, Estado, Salário, NumCPFSuper*, DeptoNum*)
PROJETO (ProjNome, ProjNúmero, ProjLocalização, DeptoNum*)
TRABAHA_EM (EmpCPF*, ProjNúmero*, NumHoras)

Modelo Relacional (Resultado)

EMPREGADO (EmpNome, DataNasc, CPF, Sexo, Rua, Cidade, Estado, Salário, NumCPFSuper*, DepNum*)
PROJETO (ProjNome, ProjNumero, ProjLocalização, DeptoNum*)
TRABALHA_EM (EmpCPF*, ProjNúmero*, NumHoras)
DEPARTAMENTO (DeptoNome, DeptoNumero, EmpCPFGerente*, DataInicioGerencia)
DEPENDENTE (DependNome, EmpCPF*, DependSexo, DependDataNasc, Relação)
LOCAL_DEPTO (DeptoNumero*, Localização)

6 tabelas relacionais (no MER haviam 4 entidades)

Especialização e Generalização

Vamos agora levar em consideração uma generalização/especialização para converter do MER para MR.

Generalização/especialização Generalização/especialização

Existem 3 formas de se converter um generalização/especialização de MER para MR:

  • Criar uma única tabela para toda a hierarquia de generalização/especialização.
  • Criar uma tabela para a entidade genérica e uma tabela para cada entidade especializada.
  • Criar uma tabela para cada entidade especializada.

1 - Uma tabela para toda a hierarquia

Você tem uma única tabela para todos os atributos iguais e específicos das entidades anteriores.

Quando tempos a especialização abaixo, podemos ter uma única tabela Cliente com todos os atributos possíveis.

Exemplo especialização total Exemplo especialização total

2 - Uma tabela para cada entidade

Você tem a tabela genérica no exemplo acima, Pessoa, e as tabelas especializadas no exemplo Cliente e Funcionário.

As tabelas Funcionário e Cliente recebem uma chave estrangeira da tabela Pessoa.

Essa é uma das melhores formas (lembrar que, não se aplica a todos os cenários) de se modelar uma generalização/especialização, pois, ao invés de cadastrar todos iguais em diferentes tabelas, você cadastra na genérica, e apenas informa a FK na tabela especializada que o registro ficará.

Lembrando que nesta segunda maneira, você cadastra uma Pessoa e ela pode ser tanto cliente quanto funcionário, assim, evitando cadastrar as mesmas informações em duas tabelas diferentes.

Pessoa, Pessoa, Funcionário Pessoa, Pessoa, Funcionário

3 - Uma tabela para cada entidade especializada

Você tem apenas as tabelas especializadas com os atributos repetidos

Especializações de PESSOA Especializações de PESSOA

Considerações

O principal ponto a ser considerado em um esquema relacional, quando comparado ao esquema do MER, é que os tipos de relacionamento não são representados explicitamente, mas sim através de atributos incluídos em relações pela chave estrangeira.

O número final de relações nem sempre corresponde ao número de entidades do modelo ER, pois além de cada entidade (MER) constituir uma tabela (MR), atributos multivalorados e relacionamentos N:M também geram tabelas no MR.

Sugestão: Siga as etapas na sequência sugerida para realizar o mapeamento. Em caso de dúvidas, volte às etapas anteriores.