O projetista do banco de dados toma várias decisões durante o projeto conceitual, baseando-se nos requisitos de dados. Certamente, o projetista participa de várias iterações para a análise e para a evolução do esquema conceitual. Possivelmente, o projetista se depara com vários pontos de imprecisão, tais como aqueles listados para a atividade do Tópico 06.
O projeto conceitual do banco de dados envolve o emprego de um modelo de alto-nível, para a especificação do esquema conceitual do banco de dados. Nossa ementa adota o Modelo Entidade Relacionamento (MER) para guiar o projeto conceitual.
Retomemos os requisitos do BD Empresa[1], que estão transcritos a seguir.
A empresa é organizada em departamentos. Cada departamento tem um nome exclusivo, um número exclusivo e um funcionário em particular que o gerencia. Registramos a data inicial em que esse funcionário começou a gerenciar o departamento. Um departamento pode ter vários locais.
Um departamento controla uma série de projetos, cada um deles com um nome exclusivo, um número exclusivo e um local exclusivo.
Armazenamos o nome, número de Cadastro de Pessoa Física, endereço, salário, sexo (gênero) e data de nascimento de cada funcionário. Um funcionário é designado para um departamento, mas pode trabalhar em vários projetos, que não necessariamente são controlados pelo mesmo departamento. Registramos o número atual de horas por semana que um funcionário trabalha em cada projeto. Também registramos o supervisor direto de cada funcionário (que é outro funcionário).
Queremos registrar os dependentes de cada funcionário para fins de seguro. Para cada dependente, mantemos o nome, sexo, data de nascimento e o parentesco com o funcionário.
Quando se emprega o MER para o projeto conceitual, qual é a especificação (representação) do esquema conceitual do banco de dados?
O Diagrama Entidade Relacionamento (DER) é uma representação visual do esquema conceitual do banco de dados.
Com base nos requisitos de dados do BD Empresa, o seguinte Diagrama Entidade Relacionamento (DER)[1] foi produzido pelo projetista do banco de dados.
Cada elemento do DER - retângulo, losango, elipse - possui um significado particular.
Nos exemplos abaixo são ressaltados: (i) o significado particular de alguns dos elementos do DER para o BD Empresa; (ii) a distinção entre tipo de entidade e entidade; e (iii) a distinção entre tipo de relacionamento e relacionamento.
- FUNCIONARIO é um tipo de entidade, cujo significado é conjunto de funcionários da empresa:
- 'o João da Silva' é uma entidade do tipo FUNCIONARIO.
- DEPARTAMENTO é um tipo de entidade, cujo significado é conjunto de departamentos da empresa:
- 'Recursos Humanos' é uma entidade do tipo DEPARTAMENTO.
- TRABALHA_PARA é um tipo de relacionamento binário que associa FUNCIONARIO e DEPARTAMENTO, cujo signicado é funcionario trabalha para departamento:
- 'o João da Silva trabalha para o departamento Recursos Humanos' é um relacionamento do tipo TRABALHA_PARA.
- GERENCIA é um tipo de relacionamento binário que associa FUNCIONARIO e DEPARTAMENTO, cujo signicado é funcionario gerencia departamento:
- 'a Ana Lima gerencia o departamento Vendas' é um relacionamento do tipo GERENCIA.
Seja o Grafo G = (V, A), onde:
- G é um grafo que modela algum aspecto do mundo-real;
- V é um conjunto de vértices;
- A é um conjunto de arestas;
- vi possui um significado particular, ∀ vi ∈ V;
- ai possui um significado particular, ∀ ai ∈ A.
A figura a seguir ilustra o grafo G = ( {v1, v2, v3, v4, v5} , {a1, a2, a3, a4, a5, a6, a7 a8} ).
Observe na figura que cada aresta particular conecta dois vértices possivelmente distintos (exceto a aresta a6).
Essencialmente, um subgrafo é um grafo dentro de um grafo maior.
Formalmente, G∗ = (V∗, A∗) é um subgrafo de G = (V, A) se:
- V∗ ⊆ V, ou seja, V∗ é um subconjunto de V, e
- A∗ ⊆ A, ou seja, A∗ é um subconjunto de A.
Para ilustrar, considere que o Grafo G = ( {v1, v2, v3, v4, v5} , {a1, a2, a3, a4, a5, a6, a7 a8} ) possui os dois subgrafos:
- Se G∗ = ( {v1, v3, v4} , {a2, a8} ), então G∗ é um subgrafo de G.
- Se G∗∗ = ( {v1, v3, v4} , {a3, a8} ), então G∗∗ é um subgrafo de G.
Vale repetir que cada elemento de um grafo - vértice ou aresta - possui um significado particular.
Então, o conteúdo do grafo é a união dos significados particulares de seus vértices e arestas.
Os grafos G∗ e G∗∗ diferem entre si por uma única aresta (a2 em vez de a3, e vice-versa). Como o conteúdo de um grafo é a união do significado particular de cada vértice e aresta, então o conteúdo de G∗ é distinto do conteúdo de G∗∗.
A especificação por meio de um DER pode ser percebida como um grafo G = (V, A).
A partir da analogia entre DER e grafos, conforme a figura acima, identificam-se os elementos:
- os tipos de entidade (os retângulos no DER) são os vértices do grafo;
- os tipos de relacionamento (os losangos no DER) são as arestas do grafo;
- os atributos (as elipses no DER) e outras restrições (os números (1 e N) e as linhas simples e duplas no DER) promovem o significado particular para cada vértice e aresta do grafo.
Sobre a adequação do esquema conceitual às demandas informacionais da aplicação, uma questão pertinente é:
Questão 01: As demandas informacionais da aplicação são atendidas a partir do esquema conceitual especificado no DER?
Noutras palavras, o projetista de banco de dados produziu um esquema conceitual capaz de atender a todas as demandas informacionais da aplicação?
Por exemplo, o DER produzido para o BD Empresa poderia ser avaliado quanto ao atendimento às seguintes consultas:
- Consulta 01: Que funcionários trabalham para um particular departamento?
- Consulta 02: Quem é o gerente de cada departamento?
- Consulta 03: Que funcionários trabalham em um particular projeto?
- Consulta 04: Que funcionários possuem o maior número de dependentes?
A resposta à Questão 01 perpasssa pela análise do esquema conceitual (representado pelo DER), para identificar que subgrafos são necessários e suficientes para atender cada demanda informacional da aplicação.
Para promover o entendimento, vamos considerar o grafo para o DER do BD Empresa:
- Grafo G = ( {DEPARTAMENTO, DEPENDENTE, FUNCIONARIO, PROJETO} , {CONTROLA, DEPENDENTES_DE, GERENCIA, SUPERVISAO, TRABALHA_EM, TRABALHA_PARA} )
Se uma demanda informacional pode ser atendida a partir do esquema conceitual do banco de dados, então existe pelo menos um subgrafo [do DER] cujo conteúdo é necessário e suficiente para o processamento da demanda. A seguir estão alguns subgrafos e exemplos de demandas informacionais atendidas pelos mesmos.
- Subgrafo G∗ = ( {DEPARTAMENTO, FUNCIONARIO} , {TRABALHA_PARA} )
- Que funcionários trabalham para cada departamento?
- Quantos funcionários trabalham para cada departamento?
- Qual a média salarial de cada departamento?
- Subgrafo G∗∗ = ( {DEPARTAMENTO, FUNCIONARIO} , {GERENCIA} )
- Quem é o gerente de cada departamento?
- Dentre os gerentes atuais, qual deles está mais tempo na gerência do departamento?
- Qual a média salarial dos gerentes de departamento?
- Subgrafo G∗∗∗ = ( {FUNCIONARIO, PROJETO} , {TRABALHA_EM} )
- Que funcionários trabalham em cada projeto?
- Que funcionários trabalham em mais de um projeto?
- Que projetos possuem mais de um funcionário que trabalha nele?
- Subgrafo G∗∗∗∗ = ( {DEPENDENTE, FUNCIONARIO} , {DEPENDENTES_DE} )
- Quais os dependentes de cada funcionários?
- Quantos dependentes possuem cada funcionário?
- Que funcionários possuem o maior número de dependentes?
Questão 02: Os Subgrafos G∗ e G∗∗, apresentados acima, possuem o mesmo conjunto de vértices - {DEPARTAMENTO, FUNCIONARIO} - mas diferem em relação às arestas: TRABALHA_PARA e GERENCIA, respectivamente.
Por que várias das demandas informacionais atendidas por G∗ não podem ser atendidas por G∗∗, e vice-versa?
A resposta à Questão 02 está atrelada ao significado de cada elemento dos subgrafos, especificamente as arestas TRABALHA_PARA e GERENCIA.
Criar uma issue no projeto https://github.com/plinioleitao/bd-2021-1-bia, com o título "Tópico 23", para responder:
Seja o esquema conceitual do BD Empresa, que está representado por meio do DER apresentado acima. Avalie se as demandas informacionais abaixo podem ser atendidas pelo esquema conceitual.
- Que projetos possuem gerentes de departamento que trabalham nesses projetos? (Responda Sim ou Não)
- Qual o nome dos funcionários que não possuem dependentes? (Responda Sim ou Não)
- Quantos funcionários aposentados existem na empresa ? (Responda Sim ou Não)
- Que funcionários trabalham para um departamento que controla algum projeto que eles trabalham em? (Responda Sim ou Não)
- Quais os gerentes de departamento que também são supervisores? (Responda Sim ou Não)
- Qual o número médio de dependentes por empregado em cada departamento? (Responda Sim ou Não)
- Issue criada no projeto https://github.com/plinioleitao/bd-2021-1-bia, cujo título é "Tópico 23", para indicar suas reflexões iniciais sobre demandas informacionais atendidas a partir de um DER.
[1] ELMASRI, R.; NAVATHE, S. B. Sistemas de Banco de Dados. 6. ed. Pearson, 2011.