Estrutura de tabelas [RESOLVIDO]

1. Estrutura de tabelas [RESOLVIDO]

Hélio Monteiro Santos Neto
xhelioneto

(usa Debian)

Enviado em 19/11/2019 - 11:18h

Bom dia pessoal, estou com um problema na estrutura de 2 tabelas no mysql.
Tenho uma tabela chamada SERVICO onde eu coloco um serviço feito com as seguintes colunas:
idservico int not null auto_increment
tipo text
status enum ('consertado', 'em andamento', 'sem conserto')

e uma tabela chamada Funcionarios:
idfunc int not null auto_increment
nome varchar(55)

no meu raciocínio é uma relação N pra N porque 1 serviço pode ser feito por vários funcionários (uma equipe) e 1 funcionário pode fazer vários serviços.
até criei uma outra tabela no meio chamada FUNC_REALIZA_SERVICO:
idrealiza
datahora timestamp current_timestamp
e as foreing keys da tabela funcionario e servico

porém eu vi que tá errado porque fazendo assim eu só consigo ligar 1 funcionario por serviço.
Alguma dica de como fazer isso corretamente?


  


2. Re: Estrutura de tabelas [RESOLVIDO]

Adalberto Nobre
Borg_Atomic

(usa Linux Mint)

Enviado em 19/11/2019 - 13:30h

Seu exemplo está quase certo, colocaria o Status do serviço na ordem de serviço, juntamente com a data
Eu chamei Func_realiza_serviço de Ordem_de_serviço
[Serviço]1...........n[Ordem_de_serviço]n.................[Funcionário]
A ordem_de_serviço possui as foreign de serviço e funcionário, então tá certo, liga vários funcionários a vários serviços
Modelagem semelhante: https://www.devmedia.com.br/Imagens/gold/SQL/42/artigo2/image004.jpg


3. Re: Estrutura de tabelas [RESOLVIDO]

Hélio Monteiro Santos Neto
xhelioneto

(usa Debian)

Enviado em 19/11/2019 - 16:09h

Borg_Atomic escreveu:

Seu exemplo está quase certo, colocaria o Status do serviço na ordem de serviço, juntamente com a data
Eu chamei Func_realiza_serviço de Ordem_de_serviço
[Serviço]1...........n[Ordem_de_serviço]n.................[Funcionário]
A ordem_de_serviço possui as foreign de serviço e funcionário, então tá certo, liga vários funcionários a vários serviços
Modelagem semelhante: https://www.devmedia.com.br/Imagens/gold/SQL/42/artigo2/image004.jpg


Não sei se eu entendi corretamente, mas se eu fizer isso, vou ter que adicionar vários registros pra cada funcionário e isso faria com que a tabela ordem de serviço tivesse vários ids, por exemplo:
digamos que tenha uma equipe de 2 funcionarios de id 1 e 2
e tenha um serviço de id 1
ai o insert seria isso:
insert into ordem_de_serviço (idfuncionarioFK, idservicoFK)
values (1, 1),(2,1)

é isso?


4. Re: Estrutura de tabelas [RESOLVIDO]

Adalberto Nobre
Borg_Atomic

(usa Linux Mint)

Enviado em 19/11/2019 - 16:44h

xhelioneto escreveu:
Não sei se eu entendi corretamente, mas se eu fizer isso, vou ter que adicionar vários registros pra cada funcionário e isso faria com que a tabela ordem de serviço tivesse vários ids, por exemplo:
digamos que tenha uma equipe de 2 funcionarios de id 1 e 2
e tenha um serviço de id 1
ai o insert seria isso:
insert into ordem_de_serviço (idfuncionarioFK, idservicoFK)
values (1, 1),(2,1)

é isso?

Sim, a tabela do meio vai ter vários Ids
Vai ficar até mais fácil para pesquisar no banco de dados, como por exemplo: todos os serviços realizados pelo funcionário de Id 1: select * from ordem_de_serviço where id_func=1
Pesquise no Google Imagens: modelagem de pedidos, usa a lógica semelhante



5. Re: Estrutura de tabelas [RESOLVIDO]

Hélio Monteiro Santos Neto
xhelioneto

(usa Debian)

Enviado em 19/11/2019 - 16:53h

Borg_Atomic escreveu:

xhelioneto escreveu:
Não sei se eu entendi corretamente, mas se eu fizer isso, vou ter que adicionar vários registros pra cada funcionário e isso faria com que a tabela ordem de serviço tivesse vários ids, por exemplo:
digamos que tenha uma equipe de 2 funcionarios de id 1 e 2
e tenha um serviço de id 1
ai o insert seria isso:
insert into ordem_de_serviço (idfuncionarioFK, idservicoFK)
values (1, 1),(2,1)

é isso?

Sim, a tabela do meio vai ter vários Ids
Vai ficar até mais fácil para pesquisar no banco de dados, como por exemplo: todos os serviços realizados pelo funcionário de Id 1: select * from ordem_de_serviço where id_func=1
Pesquise no Google Imagens: modelagem de pedidos, usa a lógica semelhante


Eu fiz isso e me ajudou bastante. muito obrigado amigo.
Agora surgiu uma dúvida:
Eu preciso fazer 2 inserts de uma vez (servico e ordem de servico), como eu faço pra ter certeza que os dois foram conectados?
Por exemplo: Outra pessoa pode estar inserindo dados ao mesmo tempo que eu no banco de dados e vai que eu faça um insert na tabela servico e até eu fazer o outro insert na tabela ordem de serviço, a outra pessoa já fez 2 outros inserts e o banco acabei cruzando as informações. Como eu evito isso?


6. Re: Estrutura de tabelas

Adalberto Nobre
Borg_Atomic

(usa Linux Mint)

Enviado em 19/11/2019 - 17:10h

xhelioneto escreveu:
Eu fiz isso e me ajudou bastante. muito obrigado amigo.
Agora surgiu uma dúvida:
Eu preciso fazer 2 inserts de uma vez (servico e ordem de servico), como eu faço pra ter certeza que os dois foram conectados?
Por exemplo: Outra pessoa pode estar inserindo dados ao mesmo tempo que eu no banco de dados e vai que eu faça um insert na tabela servico e até eu fazer o outro insert na tabela ordem de serviço, a outra pessoa já fez 2 outros inserts e o banco acabei cruzando as informações. Como eu evito isso?

Aí só entendendo a documentação do mySql, esse banco de dados é muito usado e a própria internet oferece uma vasta quantidade de soluções, por incrível que pareça, vai depender da estratégia de implementação, regras de negócio, usando datas na tabela do meio para que duas datas não fiquem iguais, por exemplo, talvez usando o campo unique








Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts