Jump to content


Photo

Dúvida Sobre Chave Estrangeira


  • Faça o login para participar
12 replies to this topic

#1 fabianofnl

fabianofnl

    Novato no fórum

  • Usuários
  • 6 posts
  • Sexo:Não informado

Posted 14/10/2008, 09:42

Olá pessoal,
gostaria de saber se tem como criar chave estrangeira da chave estrangeira?
:rolleyes:
abraço

#2 boirock

boirock

    Tecnologia para todos (agora hexa campeão)

  • Usuários
  • 1559 posts
  • Sexo:Masculino
  • Localidade:Curitiba - PR
  • Interesses:PostgreSQL - PHP

Posted 14/10/2008, 10:34

ALTER TABLE tabela
  ADD CONSTRAINT fk_nome_da_sua_chave FOREIGN KEY (codigo_pai)
	  REFERENCES tabela_pai (codigo) MATCH SIMPLE
	  ON UPDATE CASCADE ON DELETE RESTRICT;
(y)

#3 fabianofnl

fabianofnl

    Novato no fórum

  • Usuários
  • 6 posts
  • Sexo:Não informado

Posted 14/10/2008, 11:59

ALTER TABLE tabela
  ADD CONSTRAINT fk_nome_da_sua_chave FOREIGN KEY (codigo_pai)
	  REFERENCES tabela_pai (codigo) MATCH SIMPLE
	  ON UPDATE CASCADE ON DELETE RESTRICT;
(y)

hehe
Mais uma vez Boirock me ajudou ^^.

Só mais uma questão em cima dessa, se fosse pra fazer o mesmo, mas utilizando o pgadmim3, daria ?
Caso sim, é complicado passar mais um exemplo ?

valeu ai boirock.
(y) B)

#4 boirock

boirock

    Tecnologia para todos (agora hexa campeão)

  • Usuários
  • 1559 posts
  • Sexo:Masculino
  • Localidade:Curitiba - PR
  • Interesses:PostgreSQL - PHP

Posted 14/10/2008, 13:04

Uhum.... é só jogar esse código no editor de query (aquele botão barra superior que tem um lápis) :)

Tem outro caminho que é o seguinte:
1 - Selecione a tabela filha.
2 - Botão direito -> Novo objeto -> Nova Chave Estrangeira
3 - Na tela que vai se abrir, coloque o nome da FK.
4 - Em referência você deve escolher a tabela pai.
5 - Clique na aba "colunas"; você vai dizer qual coluna filha faz referência a qual da tabela pai. Para isso, utilize os campos "coluna local" e "referenciando" e clique em adicionar.
6 - Clicando ma aba "ação" você vai poder definir o comportamento dessa chave em dois eventos: "ao atualizar" e "ao apagar". Para a grande maioria dos casos o mais recomendável é que você deixe CASCADE ao atualizar e RESTRICT ao apagar. Dessa maneira você vai poder atualizar a tabela pai garantindo que essa atualização se propague para a filha mas só permitirá que a tabela pai seja excluída caso ela não tenha nenhuma filha. Existem outras opções interessantes, vale a pena dar uma estudada nelas (y).
7 - Clique em OK e seja feliz... beba uma Xiboca pra comemorar.

Edição feita por: boirock, 14/10/2008, 13:04.


#5 fabianofnl

fabianofnl

    Novato no fórum

  • Usuários
  • 6 posts
  • Sexo:Não informado

Posted 14/10/2008, 13:33

Uhum.... é só jogar esse código no editor de query (aquele botão barra superior que tem um lápis) :)

Tem outro caminho que é o seguinte:
1 - Selecione a tabela filha.
2 - Botão direito -> Novo objeto -> Nova Chave Estrangeira
3 - Na tela que vai se abrir, coloque o nome da FK.
4 - Em referência você deve escolher a tabela pai.
5 - Clique na aba "colunas"; você vai dizer qual coluna filha faz referência a qual da tabela pai. Para isso, utilize os campos "coluna local" e "referenciando" e clique em adicionar.
6 - Clicando ma aba "ação" você vai poder definir o comportamento dessa chave em dois eventos: "ao atualizar" e "ao apagar". Para a grande maioria dos casos o mais recomendável é que você deixe CASCADE ao atualizar e RESTRICT ao apagar. Dessa maneira você vai poder atualizar a tabela pai garantindo que essa atualização se propague para a filha mas só permitirá que a tabela pai seja excluída caso ela não tenha nenhuma filha. Existem outras opções interessantes, vale a pena dar uma estudada nelas (y).
7 - Clique em OK e seja feliz... beba uma Xiboca pra comemorar.


auhauahauaha
beber uma ...

então, entendi sua ideia, testei aqui e não deu certo, mas talvez seja porque não fiz o post corretamente.
Detalhe da dúvida:

Tabela 1
id | nome | algo_mais
chave primaria (id)

Tabela 2
cod | tb2_id | descrição
chave primaria (cod)
chave estrangeira ((tb2_id) leva o campo da Tabela 1 (id))

Tabela 3
cont | tb3_id | descrição
chave primaria (cont)
chave estrangeira ((tb3_id) leva o campo da Tabela 2(tb2_id) que por sua vez tem o campo da Tabela 1 (id))

Até a criação da tabela 2 eu consigo, depois disso tento criar a chave estrangeira de uma chave estrangeira e da um erro chamado:
"there is no unique constraint matching given keys for referenced table "nome_da_tabela"".

Se fosse neste caso acima, o nome da tabela que o erro mostraria, seria a Tabela 2.

Até agora agradeço muito pelas resposta !!

vlw

:D

#6 boirock

boirock

    Tecnologia para todos (agora hexa campeão)

  • Usuários
  • 1559 posts
  • Sexo:Masculino
  • Localidade:Curitiba - PR
  • Interesses:PostgreSQL - PHP

Posted 14/10/2008, 13:48

Então :D
Problema de conceito! Uma chave estrangeira dá a entender que você vai ter um relacionamento direto de UM para N, certo?
UM pai pode ter MUITOS FILHOS
mas UM filho não pode ter MUITOS PAIS

Na tabela3 vc está referenciando um valor da tabela2 que não é único, ou seja, pode se repetir! Referencie o id único da tabela2 ou faça referência direta à tabela1 ;) (y)

#7 fabianofnl

fabianofnl

    Novato no fórum

  • Usuários
  • 6 posts
  • Sexo:Não informado

Posted 14/10/2008, 14:14

Então :D
Problema de conceito! Uma chave estrangeira dá a entender que você vai ter um relacionamento direto de UM para N, certo?
UM pai pode ter MUITOS FILHOS
mas UM filho não pode ter MUITOS PAIS

Na tabela3 vc está referenciando um valor da tabela2 que não é único, ou seja, pode se repetir! Referencie o id único da tabela2 ou faça referência direta à tabela1 ;) (y)


Então, eu criei as tabelas usando o DBdesigner, e nas tabelas mostram a chave estrangeira utilizando outra chave que não seja unico.
PS: realmente sou novo na area, banco de dados ainda é complexo pra mim.

Será que posso concluir mais ou menos assim:
Que no uso do banco de dados, é impossivel criar chave estrangeira de uma chave que não seja unico ?

Então devo referenciar sempre a outra tabela ? Naquele caso, a tabel 1 então ?
:unsure:

vlw
(y) :rolleyes:

#8 boirock

boirock

    Tecnologia para todos (agora hexa campeão)

  • Usuários
  • 1559 posts
  • Sexo:Masculino
  • Localidade:Curitiba - PR
  • Interesses:PostgreSQL - PHP

Posted 14/10/2008, 14:50

Cara... :ponder:
talvez um outro tipo de ralcionamento, talvez... mas vamos raciocinar:
vamos supor que você queira saber o nome completo do estado a partir do campo UF que você tem na tabela cidade. Ok?

Vamos supor que a cidade seja "Ponte Quebrada do Norte" e que o valor do campo UF dessa cidade seja "PP"....

Ok! Seguindo o raciocínio lógico, quando eu for na tabela ESTADOS e procurar pelo estado cuja UF é PP, saberei a qual estado pertence a cidade de "Ponte Quebrada do Norte" :) OK?

Mas como farei isso com exatidão se o campo UF na tabela ESTADOS não é único? Vamos supor que eu tenha dois estados com essa UF, como saberei qual dos dois devo pegar????

Ou seja... é o fim da integridade referencial :)

#9 RonsisM

RonsisM

    Super Veterano

  • Usuários
  • 15724 posts
  • Sexo:Masculino
  • Localidade:Plovdiv

Posted 21/09/2017, 14:47

Mexican Pharmacy Viagra cialis Propecia Y Endometriosis
Cialis Y Colesterol Propecia Online America
Ou Trouver Cialis Sans Ordonnance <a href=http://cialtobuy.com>cialis buy online</a> Cialis Cuando Hace Efecto
247 Overnightpharmacy Com cheap cialis Generic Tadalafil Best Prices
Amoxicillin Insert
Cialis Und Levitra Kombinieren <a href=http://cialtobuy.com>cheap cialis</a> Finasteride Costi Propecia Generico
Doxycycline And Cephalexin cialis Acheter Cytotec En France
What Do Amoxicillin Capsules Look Like
Where Can I Buy Online Cheap Cialis <a href=http://cialtobuy.com>cialis</a> Jelly Kamagra Sildenafil Citrate

#10 RonsisM

RonsisM

    Super Veterano

  • Usuários
  • 15724 posts
  • Sexo:Masculino
  • Localidade:Plovdiv

Posted 06/10/2017, 11:41

Priligy Posologia viagra Cialis 5 Mg Assuefazione On Line Tab Provera For Sale Direct
Where Can I Cialis Combivent Without Prescription Drugs Lioresal Generique viagra online buy accutane online safe Discount Brand Viagra By Pfizer Discount Direct Dutasteride Without Perscription Delivered On Saturday Cardiff
Prednisone For Dogs For Sale Propecia Dhea Thinning Hair viagra online prescription Insurance Online Tadalis Sx Soft Doryx Bacterial Infections Free Shipping Cialis Generico Effetti Collaterali

#11 RonsisM

RonsisM

    Super Veterano

  • Usuários
  • 15724 posts
  • Sexo:Masculino
  • Localidade:Plovdiv

Posted 16/10/2017, 00:42

Online Pharmacy Valtrex No Prescription Viagra Frei Verkauflich 2013 Liquid Amoxicillin Expiration viagra online prescription How Long Does Amoxicillin Remain Potent Cialis Como Tomarlo
Propecia Wirksamkeit Priligy Dapoxetine Chlorhydrate cheapest levitra 20mg Priligy Nouvelle
Priligy Europe buy 10 mg levitra online Online Valtrex Prescription Propecia Orkut Minoxidil Cialis Generico Con Postepay

#12 RonsisM

RonsisM

    Super Veterano

  • Usuários
  • 15724 posts
  • Sexo:Masculino
  • Localidade:Plovdiv

Posted 01/11/2017, 12:57

Propecia Disconts Online Cialis De 5mg cialis Cialis 5 Mg Generic
Viagra Ohne Rezept Aus Deutschland viagra Para Que Sirve La Cialis Generic Levitra Compare Price
Amoxil 1g online pharmacy Acheter Cialis Brand Aprender A Tomar Kamagra
Amoxicillin Reaction Rash No Other buy viagra online Efectos Secundarios Cialis 20 Mg Non Prescription Viagra Pills For Men

#13 RonsisM

RonsisM

    Super Veterano

  • Usuários
  • 15724 posts
  • Sexo:Masculino
  • Localidade:Plovdiv

Posted 22/11/2017, 17:37

Generic Cialis Soft online pharmacy China Viagra Online
Comprar Levitra Pago Contra Reembolso Mejor Que Viagra Kamagra Shop cialis Cialis Vendita On Line Acheter Cialis Generic
Tadalafil Cialis generic levitra online pharmacy Acquisto Viagra Line Italia Cialis Generico Espana Zithromax Classification
Baclofene Farmaco viagra online pharmacy Nolvadex Musculation Viagra Online In Italia Chipest Levitra 20mg Filmtabletten Preisvergleich




1 user(s) are reading this topic

0 membro(s), 1 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq