Ir para conteúdo

POWERED BY:

Arquivado

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

Jefferson NF

Php OO

Recommended Posts

Galera se usar o CEP como FK, o q vai ocorrer se dois usuários morarem na mesma rua?

não vai acontecer nada.

 

 

Em caso extremo, dois usuários podem ser marido e mulher morarem na mesma casa... eu aconselho usar um colunaReferencia...

desnecessário cara.

Okay, sem problemas.

 

Imagina assim:

TABLE endereco (cep(PK), logradouro)

00000-000, Rua dos Bobos

11111-111, Av Cirandinha

 

TABLE pessoa (id(PK), cep(FK), nome)

1, 11111-111, William

2, 11111-111, Juliana

No caso, sou casado com a Juliana, e moro na mesma rua que ela. Sem problema nenhum. Não vi nenhum erro.

 

 

Agora, se eu tiver mais de uma casa:

TABLE endereco (cep(PK), logradouro)

00000-000, Rua dos Bobos

11111-111, Av Cirandinha

 

TABLE pessoa (id(PK), nome)

1, William

2, Juliana

 

TABLE endereco_pessoa( id_pessoa(FK), cep(FK) )

1, 11111-111

2, 11111-111

1, 00000-000

Continuo morando na mesma rua que a Juliana, mas também tenho um outro endereço.

Também sem nenhum problema.

 

 

 

 

pode gerar erros..
na verdade não.

a tua coluna de referência é apenas um inteiro arbitrário.

 

Usar ou não, tanto faz. Só quero deixar claro, q usar o CEP não atrapalha em absolutamente nada.

Compartilhar este post


Link para o post
Compartilhar em outros sites
como ficaria quando a empresa tem dois endereços? Eu precisaria de uma tabela associativa?

sim, exatamente.

 

veja o post #21

 

é exatamente essa table associativa que explico no post do blog. você leu ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Li sim, é que voce postou depois de eu ter postado minha duvida.

Agora entendi.

Li seu blog tambem, as coisas clarearam mais, inclusive para usar uma tabela para contatos também.

 

Mesmo o relacionamento sendo um(empresa) para varios(endereços) eu tenho que usar a tabela associativa então? Achei que era só para M:N

 

Fazendo dessa maneira, uma tabela para empresa, uma para contatos e outra para endereço, mesmo que, por enquanto eu tenha apenas uma empresa com um endereço, eu utilizo a tabela associativa para o endereço e para os contatos da empresa. Com isso eu posso ter uma tabela endereço única, que poderá ser utilizada tanto para clientes quanto para empresas, o que vai mudar apenas é a tabela associativa, entendi direito?

Compartilhar este post


Link para o post
Compartilhar em outros sites
posso ter uma tabela endereço única, que poderá ser utilizada tanto para clientes quanto para empresas,
sim, exato.

 

o que vai mudar apenas é a tabela associativa, entendi direito?

hum.. sim.

 

se você tiver uma tabela para clientes e outra para empresa, então precisa de uma associativa para cada.

 

um workaround, seria ter uma coluna na tabela associativa, 'tipo', ai você informaria se aquela linha é para tipo empresa ou tipo cliente.

dessa forma, não teria 2 tabelas com a mesma função.

 

 

não sei, precisa pensar mais nessa modelagem..

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sobre a foreign key, creio que a mesma não seja na tabela de clientes, mas sim em endereço, veja:

andrey@andrey:~$ mysql -u root -p
Enter password: ******
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.1.41 Source distribution

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> create schema exemplo;
Query OK, 1 row affected (0.00 sec)

mysql> create table clientes(
   ->       id smallint( 6 ) not null auto_increment,
   ->       nome varchar( 20 ) not null,
   ->     primary key( id )
   -> )engine = innodb;
Query OK, 0 rows affected (0.11 sec)

mysql> create table endereco(
   ->        cid smallint( 6 ) not null,
   ->       endereco varchar( 72 ) not null,
   ->     foreign key `fkClientes-Endereços`( cid ) references clientes( id ) on update restrict on delete cascade
   -> )engine = innodb;
Query OK, 0 rows affected (0.06 sec)

mysql> insert into clientes values( 1, 'Andrey' ), ( 2, 'Marcos' ), ( 3, 'Henrique' );
Query OK, 3 rows affected (0.03 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> insert into endereco values( 1, 'Rua 1' ), ( 2, 'Alto do Morro' ), ( 3, 'Em casa' );
Query OK, 3 rows affected (0.03 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> select * from endereco;
+-----+---------------+
| cid | endereco      |
+-----+---------------+
|   1 | Rua 1         |
|   2 | Alto do Morro |
|   3 | Em casa       |
+-----+---------------+
3 rows in set (0.00 sec)

mysql> delete from endereco where cid = 1;
Query OK, 1 row affected (0.02 sec)

mysql> select * from clientes;
+----+----------+
| id | nome     |
+----+----------+
|  1 | Andrey   |
|  2 | Marcos   |
|  3 | Henrique |
+----+----------+
3 rows in set (0.00 sec)

mysql> select * from endereco;
+-----+---------------+
| cid | endereco      |
+-----+---------------+
|   2 | Alto do Morro |
|   3 | Em casa       |
+-----+---------------+
2 rows in set (0.00 sec)

mysql> delete from clientes where id = 2;
Query OK, 1 row affected (0.03 sec)

mysql> select * from endereco;
+-----+----------+
| cid | endereco |
+-----+----------+
|   3 | Em casa  |
+-----+----------+
1 row in set (0.00 sec)

mysql>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Entendi,

 

Analisando com calma aqui, percebi uma coisa: se uma empresa pode ter dois endereços, provavelmente terá dois cnpjs, então a minha tabela empresa ficaria apenas com o nome fantasia da mesma, então teria que ter uma tabela para endereço, outra para contatos e outra para dados de cnpj e tudo mais. É isso mesmo?

Se for assim, vai ficar muita informação separada, muito lenta as consultas.

Estava querendo fazer apenas uma tabela empresa, com cnpj, razao social, nome fantasia, logo, etc. Outra para os contatos e outra para endereço. Mas não sei se assim vai estar legal, pois não sei se uma empresa pode ter endereços e, consequentemente, telefones diferentes, no mesmo cnpj.

Sem contar que esse tipo de modelagem que estou querendo fazer, separando contatos e endereço, estou querendo fazer pensando no futuro, se um dia alguem quiser usar o sistema para duas empresas diferentes e tal, mas agora no momento, será apenas uma empresa. Aí teria uma tabela associativa apenas com uma linha

Compartilhar este post


Link para o post
Compartilhar em outros sites

W. Bruno obrigado pela explicação.

 

Mas a FK não tem q ser a PK de outra tabela? assim ela n pode ser repetida, se eu e minha mulher morarmos no mesmo local, na hora de gravar no banco o CEP dela já terá o meu CEP q é o mesmo portanto n iria deixar gravar, ou não?

 

Obrigado

 

a Coluna de referencia eu uso assim em meu sistema

 

Cadastrar Cotação

Responsavel, Cliente, Mercadoria, Referencia

 

Cadastrar Proposta

Preço, Cia.Aerea, Referencia

 

A minha referencia é gerada assim

(registro)(mes)-(ano)

001AGO-11

 

O campo referencia eu jogo no form de cadastro como campo escondido com um contador de linhas do BD que conta a linha se o mês for o mesmo da ultima linha do banco.

 

Se já existe cotação em janeiro (001jan-11) ele conta as linhas do mesmo mês e soma mais um (002jan-11) o mês é obtido pela data do servidor.

 

Primeiro é Cadastro de Cotacao

Quando o campo escondido é enviado pelo form(junto com os outros dados) vai para a parte de Cadastro de Proposta

 

Esse proposta n vai gerar um Referencia ele vai apenas receber em seu value o $referencia que veio do outro form.... Assim quando o user salvar a Proposta ele vai estar salvando com referencia a Cotação que ele acabou de criar.

 

----------------------------------------------------------------------------------------------------------

"Nunca aprendi nada com pessoas que concordaram comigo"

 

Se alguem puder dar uma lida no tópico UpperCase no <select> eu agradeço estou quebrando a cabeça aqui.

Compartilhar este post


Link para o post
Compartilhar em outros sites
assim ela n pode ser repetida, se eu e minha mulher morarmos no mesmo local, na hora de gravar no banco o CEP dela já terá o meu CEP q é o mesmo portanto n iria deixar gravar, ou não?
não. Vai gravar normalmente.

 

se não seria impossível fazer relacionamentos 1:N

 

 

 

aa Coluna de referencia eu uso assim em meu sistema
melhor você criar outro tópico, para não confundir mais esse aqui.

Compartilhar este post


Link para o post
Compartilhar em outros sites
não. Vai gravar normalmente.

 

se não seria impossível fazer relacionamentos 1:N

 

Ah sim pode crer vlw.

 

melhor você criar outro tópico, para não confundir mais esse aqui.

 

desculpe W.Bruno, ele tinha perguntado lah em cima(#22) como eu faço para usar uma coluna de relacionamento como FK.

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.