Ir para conteúdo

Arquivado

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

lapiador

chave estrangeira

Recommended Posts

A versão com InnoDB suporta. Nas outras versões você pode fazer criando uma terceira tabela onde você coloca os ID's de duas ou mais tabelas e seus registros.Veja:tabela_1:id_userna_usertabela_2:id_clientena_clientetabela_relacionamento:id_userid_clienteEspero que te ajude[]s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pelo q sei , o mysql ñ suporta chave estrangeira. Sendo assim, como relacionar duas tabelas?

 

Agradecido.

Só para citar meu caso:

Preciso fazer um programa em php e mysql para cadastro de clientes, sendo que meus clientes são pesoas fisicas e juridicas. Dai, modelei meu banco da seguinte forma:

 

*pessoa_fisica_juridica terá dados comuns à ambos tipos de pessoas

*pessoa_fisica terá dados referentes à pessoa fisica

*pessoa_juridica terá dados referentes à apenas pessoa juridica

 

Tabela pessoa_fisica_juridica

id

endereco

telefone

tipo_de_pessoa

data_de_cadastro

email

 

Tabela pessoa_fisica

rg

nome

cpf

data_nascimento

escolaridade

ower

 

Tabela pessoa_juridica

cnpj

inscricao_estadual

razao_social

ower

 

obs.1:as chaves primarias são :

*id

*rg

*cnpj

 

obs.2: o campo ower, tanto em pessoa_fisica quanto em pessoa_juridica, "herdará" o valor de id (pessoa_fisica_juridica).

 

Bom, isso foi o q fiz. Agora resta saber a opnião de vocês.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O meu é MyISAM e eu consigo colocar chave extrangeira.Faça um teste com esse código.CREATE TABLE person ( id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT, name CHAR(60) NOT NULL, PRIMARY KEY (id));CREATE TABLE shirt ( id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT, style ENUM('t-shirt', 'polo', 'dress') NOT NULL, colour ENUM('red', 'blue', 'orange', 'white', 'black') NOT NULL, owner SMALLINT UNSIGNED NOT NULL REFERENCES person(id), PRIMARY KEY (id));

Compartilhar este post


Link para o post
Compartilhar em outros sites

O meu é MyISAM e eu consigo colocar chave extrangeira.Faça um teste com esse código.CREATE TABLE person ( id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT, name CHAR(60) NOT NULL, PRIMARY KEY (id));CREATE TABLE shirt ( id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT, style ENUM('t-shirt', 'polo', 'dress') NOT NULL, colour ENUM('red', 'blue', 'orange', 'white', 'black') NOT NULL, owner SMALLINT UNSIGNED NOT NULL REFERENCES person(id), PRIMARY KEY (id));

exatamente isso q fiz no exemplo citado anteriomente...só q concluir q quando excluo uma linha de uma tabela...os dados referentes a essa linha nas outras duas tabelas permanecem intactas...o ideal é q fossem removidas tambem.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha, nao tenho certeza, mas creio que o mysql é limitado a isso.... pode ser que seja possível com o INNODB, mas fica ai a dúvida no ar... :huh:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Em qualquer que seje o tipo de bd, se voce tem uma chave estrangeira que é primária em outra, ao excluir ela, o dado da outra coluna não é apagada, e sim acontece algum tipo de erro, ou lixo.A chave estrangeira garante integridade entra as tabelas, se voce inclui um dado em uma tabela com chave estrangeira, se o dado não existir na outra, da erro, uma depende da outra.O que cada programador deve fazer quando da um DELETE um uma tabela onde contem uma chave que é Fk em outra é apagar tambem a linha dessa outra tabela, através de trigger, store procedures, ou na própria aplicação.Em MySQL tabelas do tipo InnoDB garante a integridade, onde voce pode definir FOREIGN KEY para as colunas. Mas não é simples configurar o InnoDB no MySQL, eu mesmo ja to bringando um bom tempo.Bom é minha opinião, posso estar completamente errado, então se tiver alguem que manja, pode nos ajudar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Em qualquer que seje o tipo de bd, se voce tem uma chave estrangeira que é primária em outra, ao excluir ela, o dado da outra coluna não é apagada, e sim acontece algum tipo de erro, ou lixo.A chave estrangeira garante integridade entra as tabelas, se voce inclui um dado em uma tabela com chave estrangeira, se o dado não existir na outra, da erro, uma depende da outra.O que cada programador deve fazer quando da um DELETE um uma tabela onde contem uma chave que é Fk em outra é apagar tambem a linha dessa outra tabela, através de trigger, store procedures, ou na própria aplicação.Em MySQL tabelas do tipo InnoDB garante a integridade, onde voce pode definir FOREIGN KEY para as colunas. Mas não é simples configurar o InnoDB no MySQL, eu mesmo ja to bringando um bom tempo.Bom é minha opinião, posso estar completamente errado, então se tiver alguem que manja, pode nos ajudar.

Então eu posso criar as tabelas seguindo o exemplo de Daniela:CREATE TABLE person (id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,name CHAR(60) NOT NULL,PRIMARY KEY (id));CREATE TABLE shirt (id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,style ENUM('t-shirt', 'polo', 'dress') NOT NULL,colour ENUM('red', 'blue', 'orange', 'white', 'black') NOT NULL,owner SMALLINT UNSIGNED NOT NULL REFERENCES person(id),PRIMARY KEY (id)); E depois quando for fazer uma exclusão faço de ambas as linhas q se referem em ambas as tabelas?Acho q ñ há perigo q ocorrer inconsistencia ñ até mesmo porque o mais importante será o código php que gerará essa query.Concorda ou discorda?

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.