Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Jefferson NF

Php OO

Recommended Posts

Bom dia, pessoal.

 

Estou começando um sistema de pedido on-line e estou com algumas dúvidas básiccas, com classes, objetos, bd, etc.

 

Estava querendo fazer uma tabela e uma classe para cliente e endereço, mesmo sabendo que o cliente só tem um endereço. Até aí tudo bem. Posso fazer assim e dar extends de endereço na classe cliente, né?

 

O problema é na hora de salvar no BD, onde coloco o id(chave estrangeira) no cliente ou no endereço?

Como faço para salvar no bd o objeto cliente que extendeu do objeto endereço, se são duas tabelas diferentes? Tenho que primeiro dar insert com os dados do cliente e depois dou outro insert de endereço?

 

Lembrando que não utilizo frameworks

 

Desde já, agradeço.

Compartilhar este post


Link para o post
Compartilhar em outros sites
Posso fazer assim e dar extends de endereço na classe cliente, né?
não!

um cliente não é um endereço, e o endereço ñao é um cliente. Não tem nada a ver usar herança nisso.

 

 

 

O problema é na hora de salvar no BD, onde coloco o id(chave estrangeira) no cliente ou no endereço?

a FK fica na tabela cliente.

 

 

Tenho que primeiro dar insert com os dados do cliente e depois dou outro insert de endereço?

o mais simples, é você ter um cadastro separado para os endereços. Primeiro cadastra o endereço, e depois o cliente.

 

Para pegar a chave da inserção do endereço, existem funções como mysql_last_insert_id(); //procure a correspondente para o teu driver

Compartilhar este post


Link para o post
Compartilhar em outros sites

Valeu pela ajuda.

 

Então você acha melhor eu fazer um cadastro de cliente com passo a passo. Primeiro pego os dados pessoais, ae quando o cliente clicar em avançar, eu salvo na tabela cliente e depois pego os dados de endereço e salvo na tabela endereço, é isso?

 

Voce acha que assim fica melhor que salvar tudo em uma tabela só?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se você duplicar os endereços estará errado tb.

 

a table endereço não deve ter linhas repetidas.

o mais correto, é você cadastrar o CEP na tabela do cliente. E então usando o CEP como FK, você puxa a informação do endereço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não vamos complicar a cabeça do nosso amigo...

 

Apesar de querer por endereço em uma tabela separada ficaria meio estranho ter várias linhas repetidas, mas se você não quer quebrar um pouco a cabeça com isso, pode fazer sem peso na consciência.

Segundo a FK sempre vai na tabela que referencia a outra. O Usuario tem um endereço, então o Usuário referencia o endereço. Se fosse o contrário, um Endereço tinha um Usuário, então seria o contrário.

 

Deu pra ajudar em algo?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso, afinal você pode ter n clientes para 1 endereço :P

 

Mas só lembrando que se for utilizar o CEP como FK e para não duplicar endereços, você teria 2 formas de fazer:

 

1- Uma que é confiar nos dados do usuário ou

2- Usar um banco de dados separado e pago do CORREIOS com todas as ruas/cep's do Brasil para poder fazer a validação corretamente.

 

:thumbsup:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Entao voce acha melhor colcoar tanto o endereço quanto os dados pessoais do cliente, na tablea cliente, é isso?

 

Pois é, André, isso que pensei, não tem como eu pagar para usar os CEPs dos correios.

A saída vai ser colocar o id do endereço na tabela cliente mesmo. Até porque pelo cep eu só consigo o logradouro, o numero, complemento e outras informações são diferente para cada endereço

Compartilhar este post


Link para o post
Compartilhar em outros sites

Analise as opções que você tem, e defina qual o melhor para o seu caso em específico, nós só podemos dar sugestão a partir do pouco que sabemos, mas a decisão final tem que ser sua, que está a par de todo o projeto.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Entao voce acha melhor colcoar tanto o endereço quanto os dados pessoais do cliente, na tablea cliente, é isso?

 

isso depende, se você quer cadastrar so 1 endereço por usuário e nao pretende mudar nunca isso ai da para adicionar os campos relativos a endereço na tabela usuário.

Agora se o usuário pode cadastrar mais de 1 endereço ai você faz uma tabela separada para os endereços e referencia na tabela usuário

Compartilhar este post


Link para o post
Compartilhar em outros sites

Entendi.

 

Valeu mesmo pela ajuda.

mas caso eu opte pela utilização de duas tabelas separadas, eu tenho que fazer o cadastro de cliente na forma de passo a passo né? Primeiros os dados pessoais, insert na tabela cliente, depois o endereço e insert na tabela endereço. è isso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

sim, você faz query cadastro do usuário e retorna o lastInsertId (id do usuário cadastrado) e com esse id você cadastra o endereço(s) referente ao usuário

Compartilhar este post


Link para o post
Compartilhar em outros sites

Entendi.

 

É que vou iniciar um projeto grande, cheio de detalhes e que poderá vir a ser utilizado para mais de uma empresa, então quero ele certinho,q ue ter pra ser aproveitado o máximo possível. Tenho conhecimento de UML, OO, mas não muito com PHP, uso mais Java, mas esse sistema vai ser em PHP mesmo.

 

Como vocês costumam fazer as divisões de camada?

 

Eu atualmente, crio um diretorio modelo (classes), um controle (controle de cada classe, com funções para chamar a camada DAO e outras), um diretorio dao (com acesso ao BD), e varios outros diretorios, contendo html, js, css, esse tipo de coisas.

 

Voce dão alguma dica nessa divisao?

 

 

Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você poderia utilizar o code igniter para esse projeto, ele já traz uma estrutura de diretórios pronta, e o aprendizado dele é super rápido.

 

Demorei somente 2 dias para aprender a utiliza-lo. E hoje já produzo com ele.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal,

 

Voltando ao inicio dessa discussão. Surgiu uma nova duvida.

Se eu optar por utilizar uma tabela exclusiva para armazenar endereço, e associá-las a tabela empresa e também a tabela cliente. Eu não poderia colocar a chave estrangeira na tabela endereço, pois duas tabelas estão referenciando esta, ou seja, um cliente pode e vai ter o mesmo id de um empresa, então não tem como eu colocar esse id na tabela endereço. Por outro lado, a empresa 1 pode ter dois endereços, então eu teria que jogar o id da empresa no endereço. Como eu resolvo esse problema? Crio uma tabela endereço_empresa e outra endereço_cliente? Ou crio na tabela endereço dois campos que receberão a FK, tipo FK_empresa e FK_cliente? Caso essa segunda opção seja a melhor, não tem problema um desses FK ficarem null?

 

Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites
Eu não poderia colocar a chave estrangeira na tabela endereço
não não. De jeito nenhum

 

 

a empresa 1 pode ter dois endereços, então eu teria que jogar o id da empresa no endereço.
? também não.

 

Como eu resolvo esse problema? Crio uma tabela endereço_empresa e outra endereço_cliente?

sim, é por aqui a solução.

 

 

Ou crio na tabela endereço dois campos que receberão a FK, tipo FK_empresa e FK_cliente?

não !

 

Caso essa segunda opção seja a melhor, não tem problema um desses FK ficarem null?

sim, tem problema.

 

vai contra a segunda ou terceira forma normal(se não me engano)

 

 

leia:

http://wbruno.com.br/blog/2011/03/29/afinal-o-que-e-entidade/

Compartilhar este post


Link para o post
Compartilhar em outros sites

n li tudo, apenas os 5/6 primeiros post....

 

 

Galera se usar o CEP como FK, o q vai ocorrer se dois usuários morarem na mesma rua? ou no mesmo conjunto domiciliar/apartamento/condominio?

Em caso extremo, dois usuários podem ser marido e mulher morarem na mesma casa... eu aconselho usar um colunaReferencia... é assim q eu faço em casos que a chave fica difícil de se encaixar ou pode gerar erros..

 

Cliente

 

id, nome, RG, relacaoEnd.

 

Endereço

id, pais, CEP, relacaoEnd.

 

select * from cliente where id="$id";

 

$relacaoEnd = $l['relacaoEnd'];

 

 

select * from endereco where relacaoEnd = '$relacaoEnd' ;

Compartilhar este post


Link para o post
Compartilhar em outros sites

William,

 

Valeu pelas dicas e pela ajuda. Mas eu ainda não entendi uma coisa direito: seu eu tenho que colocar o id do endereço na tabela empresa, como ficaria quando a empresa tem dois endereços? Eu precisaria de uma tabela associativa?

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.