Ir para conteúdo
Fórum Script Brasil
  • 0

Dúvidas Gerais de Relacionamentos e Estrutura


Ronaldo A. Bueno Filho

Pergunta

Pessoal,

Estou com várias dúvidas quanto a criação e controle de um banco de dados que estou desenvolvendo.

Estou criando um banco de dados relativamente simples, para cadastar empregados , times e localidades.

Inicialmente, eu pensei em criar uma tabela chamada employees, uma chamada teams e outra chamada sites.

Na tabela sites, constam os prédios (localidades/construções)

Na tabela teams, constam os times (departamento financeiro, suporte, etc)

Na tabela employees, todos os funcionários

Minha pergunta é quanto aos campos telefone das tabelas, o qual, todos possuem.

O que penso, é que, cada empregado, bem como cada site e time tem seus próprios telefones. Cada um, podendo possuir vários telefones (celular / fixo).

- Devo criar uma tabela telefones genérica para todos com campos, não tendo como obrigação o preenchimento de todos os IDs?

ex: phones (phoneNumber, phoneType, siteID, employeeID, teamID)

- Devo criar 3 tabelas de telefone (uma tabela para site, outra pra employee e outra pra teams)?

ex:

SitePhone (phonenumber, phoneType, phoneDesc, siteID)

empPhone (phonenumber, phoneType, phoneDesc, empID)

teamPhone (phonenumber, phoneType, phoneDesc, teamOD)

Caso nenhuma for a solução ideal, gostaria de receber algumas sugestões da melhor forma de trabalhar com isso.

PS: Talvez eu tenha que consultar algum registro pelo telefone.

Queria saber também sobre o AUTO_IMCREMENT. Se, quando o banco tiver inserções simultâneas, se pode dar algum problema... caso sim, vocês recomendam a criação de um trigger para gerar o código automaticamente?

E sobre a integridade de relacionamentos... Sei que com o engine MyISAM, mesmo que se coloque ON DELETE CASCADE ou algo assim, não há qualquer controle e o comando é ignorado. Sei também que a engine InnoDB controla integridade referencial. Pesquisei sobre diferenças entre elas e notei que a maioria das pessoas usam MyISAM por ser mais rápido.

Eu tenho um banco de dados com muitos acessos simultâneos e com tabelas relativamente grandes e que possui muitos relacionamentos. O recomendado é que eu utilize o MyISAM, certo? E como faria o controle dos relacionamentos, por exemplo, quando inserir algo, alterar, etc...

Como as informações são importantes, queria que um módulo de logs fosse atrelado ao banco. Gostaria de receber informações de como proceder com logs, digo, saber quem alterou o que etc...

Desculpem pela quantidade de questões. É que estou desenvolvendo esse banco de dados, mas não tenho tanto conhecimento quanto deveria ter sobre banco de dados. Estou estudando :)

Abraços,

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

Oi, Ronaldo!

Vamos responder por partes.

Minha pergunta é quanto aos campos telefone das tabelas, o qual, todos possuem.

O que penso, é que, cada empregado, bem como cada site e time tem seus próprios telefones. Cada um, podendo possuir vários telefones (celular / fixo).

Em minha visão um empregado pode ter vários telefones e um telefone pode pertencer a vários empregados (Se moram na mesma residência, por exemplo.). O mesmo acontece no relacionamento ente telefones e times e entre telefones e localidades. Sendo assim, sugiro a criação de tabelas intermediárias que farão a função do relacionamento M:N destas ligações. Veja o pdf em anexo.

Queria saber também sobre o AUTO_IMCREMENT. Se, quando o banco tiver inserções simultâneas, se pode dar algum problema... caso sim, vocês recomendam a criação de um trigger para gerar o código automaticamente?
Não. O banco resolve automaricamente a inclusão e a numeração de cada atributo do tipo auto_increment.

E sobre a integridade de relacionamentos... Sei que com o engine MyISAM, mesmo que se coloque ON DELETE CASCADE ou algo assim, não há qualquer controle e o comando é ignorado. Sei também que a engine InnoDB controla integridade referencial. Pesquisei sobre diferenças entre elas e notei que a maioria das pessoas usam MyISAM por ser mais rápido.

Eu tenho um banco de dados com muitos acessos simultâneos e com tabelas relativamente grandes e que possui muitos relacionamentos. O recomendado é que eu utilize o MyISAM, certo? E como faria o controle dos relacionamentos, por exemplo, quando inserir algo, alterar, etc...

a) Não. Você pode usar o InnoDB mas vai ter que configurar direitinho o servidor para não dar problema.

B) Você pode usar MyISAM mas terá que controlar com triggers, storage procedures, etc.

Pois o grande problema do MyISAM é que ele não é transacional. Uma vez que um registro de uma tabela foi gravado não há rollback. Você deverá desenvolver rotinas que verifiquem se tabelas pai e filho foram gravados corretamente.

Como as informações são importantes, queria que um módulo de logs fosse atrelado ao banco. Gostaria de receber informações de como proceder com logs, digo, saber quem alterou o que etc...
Existe, nativo no MySQL, um log binário que guarda todas as transações realizadas entre um backup e outro ou entre cada restart do servidor de banco. Nele ficam registradas o uduário que executou a transação e o que foi feito.

Mas para efeito do negócio da empresa, é melhor que você crie uma ou algumas tabelas de log (de preferência um banco de log) que guardará as transações realizadas pelos usuários da aplicação.

Desculpem pela quantidade de questões. É que estou desenvolvendo esse banco de dados, mas não tenho tanto conhecimento quanto deveria ter sobre banco de dados. Estou estudando
Não há o que desculpar. Ninguém nasce sabendo tudo. É necessário perguntar para aprender.

modelo.pdf

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.


  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...