Implementação de relacionamentos

Olá pessoal.

A dúvida em questão nem é tanto de SC ou programação, ainda rsrs. Minha dúvida ainda está na lógica a ser adotada. Vamos lá…

Minha empresa presta serviços para clientes fixos. Temos 3 setores diferentes e cada cliente é cuidado por 1 pessoa de cada setor.

Pois bem, preciso desenvolver uma ou mais telas de conulta que me tragam as seguintes informações:

  1. quais funcionários atendem a empresa ABC;

  2. quais empresas o funcionário FFF atente;

  3. quais empresas ainda não estão sendo atendidas por algum setor.

A forma mais simples certamente seria criar 3 campos na tabela EMPRESA para armazenar um funcionário de cada setor. Porém, às vezes é preciso fazer uma redistribuição geral e essa forma seria um tanto trabalhosa.

Alguma dica?

Tabela Funcionario
id
nome

Tabela Empresas
id
Nome
id_funcionario (0 (Zero) como default, não aceitar nulos

Selects da consulta:

Select id, nome from empresa where id_funcionario = [varIdFuncionario]

Para [varIdFuncionario] = 0 vai listar todas empresas sem funcionario
para [varIdFuncionario] = 1 vai listar todas empresas do funcionario 1
e assim por diante.

1 Curtida

Bom dia Haroldo. Sim, esse seria a implementação mais simples e elementar. Porém, num ambiente com 200/300 clientes, uma troca de funcionário ou uma reorganização pode ser um tanto trabalhosa ter que ir de registro em registro de clientes pra atualizar.

Eu pensei se haveria a possibilidade de selecionar o funcionário, mostrar a lista de clientes e ir marcando cliente por cliente (tipo um checkbox).

Mas em último caso, como essa reorganização não é todo dia, talvez seja mais simples disponibilizar um relatório em Excel com as empresa e seus responsáveis, o chefe de setor reorganiza na planilha e atualizo a base importando os dados da planilha.

Quando um funcionário (id 15) sai:

UPDATE Empresas set id_funcionario=0 where id_funcionario = 15.

Quando um funcionário é substituído (id 15 sai id 30 entra) e vai assumir empresas do funcionário que saiu:

UPDATE Empresas set id_funcionario=30 where id_funcionario = 15.

E sim,uma consulta com botão run na empresas com id funcionario = 0 e filtro para selecionar o funcionario que vaio assumir essas empresas.

Qual a dificuldade?

Realmente, não há nenhuma dificuldade nisso.

Mas meu caso não é apenas substituição de funcionário. Mas realocação. Digamos que um funcionário atende 30 empresas. Mas ele evoluiu, aprendeu coisas novas e vou precisar realocar as empresas dele distribuindo-as aleatoriamente entre outros 3 colaboradores. Na sequencia, vou atribuir 40 outras empresas com um nivel de dificuldade maior a este funcionário.

Não se trata se um simples update. A minha idéia é semelhante ao que acontece no módulo de segurança Grupos/Aplicações. Eu penso em selecionar o funcionário e em seguida mostraria apenas as empresas com id_funcionario=0 para o setor específico pra eu poder reatribuí-las.

A minha dúvida é se esta idéia seria válida e como eu implementaria nas tabelas esse controle.

sempre vai ter 3 setores? e se a empresa abrir um novo departamento?

acho que teria que ter 4 tabelas
Setores
Funcionarios (e dentro um campo para o setor ele pertence)
Clientes

e a quarte que relacionasse que tivesse apenas os IDs
Cliente - Funcionario

as pesquisas se basearia neste ultimo,
cli 1 - Func 1
cli 1 - Func 2
cli 1 - Func 5

cli 2 - Func 3
cli 2 - Func 4

cli 3 - Func 6

para pesquisar ou mudar trabalharia com esta ultima fazendo selects, inner join, when, etc…

Sim, sempre 3 setores.

a solução de ter esta tabela deve atender o que quer, um select nos clientes com inner nos relacionados se retornar zero, sabe que ninguém atende o cliente, caso contrario traria os funcionários/setores que atendem ele

penso que ficaria muito mais rápido nas pesquisas e pratico para mudar que alteraria apenas esta tabela dos relacionados

pode usar o count para saber quantos clientes um funcionário/setor atende, da inúmeras possibilidades