Ir ao conteúdo
  • Cadastre-se

restriçao de chave estrangeira


Ferreira27

Posts recomendados

estou tendo dificuldade em achar o erro nesta tabela.

alguém pode me dar uma luz

Como referenciar a tabela cidade na tabela endereço

CONSTRAINT fk_endereco_nome_cidade FOREIGN KEY(nome_cidade) REFERENCES cidade(nome_cidade)

CREATE TABLE Uf (
id_uf serial,
sigla_uf CHAR(2) NOT NULL,
nome_uf VARCHAR(20) NOT NULL,
CONSTRAINT pk_uf PRIMARY KEY(sigla_uf)
);

select * from uf


CREATE TABLE cidade (
id_cidade serial,
cod_Ibge INTEGER NOT NULL,
nome_cidade VARCHAR(30) NOT NULL,
sigla_uf CHAR(2) NOT NULL,
CONSTRAINT pk_cidade PRIMARY KEY(cod_Ibge),
CONSTRAINT fk_cidade_uf FOREIGN KEY(sigla_uf) REFERENCES uf(sigla_uf)
);

CREATE TABLE endereco (
idEndereco INTEGER NOT NULL,
cep CHAR ( 8 ) NOT NULL,
logradouro VARCHAR ( 40 ) NOT NULL,
bairro VARCHAR ( 30 ) NOT NULL,
complemento VARCHAR ( 30 ),
cidade VARCHAR ( 30 ) NOT NULL,
sigla_uf CHAR ( 2 ) NOT NULL,
CONSTRAINT PK_endereco PRIMARY KEY (idEndereco),
CONSTRAINT fk_endereco_uf FOREIGN KEY(sigla_uf) REFERENCES uf(sigla_uf),
CONSTRAINT fk_endereco_nome_cidade FOREIGN KEY(nome_cidade) REFERENCES cidade(nome_cidade)

);

Link para o comentário
Compartilhar em outros sites

Do modo que você postou não deu certo

fiz assim nao sei se tá certo mas rodou

CONSTRAINT fk_endereco FOREIGN KEY(cidade) REFERENCES uf(sigla_uf)


CREATE TABLE endereco (
idEndereco serial,
cep CHAR ( 8 ) NOT NULL,
logradouro VARCHAR ( 40 ) NOT NULL,
bairro VARCHAR ( 30 ) NOT NULL,
complemento VARCHAR ( 30 ),
cidade VARCHAR ( 30 ) NOT NULL,
sigla_uf CHAR ( 2 ) NOT NULL,
CONSTRAINT PK_endereco PRIMARY KEY (idEndereco),
CONSTRAINT fk_endereco_uf FOREIGN KEY(sigla_uf) REFERENCES uf(sigla_uf),
CONSTRAINT fk_endereco FOREIGN KEY(cidade) REFERENCES uf(sigla_uf)

);

Link para o comentário
Compartilhar em outros sites

@Ferreira, se a estrutura de suas tabelas é como você colocou na primeira mensagem, você errou e está fazendo errado de novo

você está referenciando o campo CIDADE da tabela ENDEREÇO, com o campo SIGLA DO ESTADO da tabela UF, não tem lógica alguma isso.

a resposta do Fernando está certa, qual foi o erro gerado?

@xChiron, ele fazer ALTER TABLE adicionando a restrição, ou já fazer tudo isso no CREATE TABLE como está fazendo, não é a mesma coisa?

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

EDIT

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

Não está dando certo a resposta do Fernando

pois a tabela CIDADE não tem um índice para o campo nome_cidade

crie a tabela cidade do jeito que você criou

execute isso: CREATE INDEX idx_cidade ON cidade(nome_cidade);

depois crie a tabela ENDERECO com a alteração postada pelo FERNANDO.

Caso não dê certo só falar, aqui funcionou perfeitamente.

Link para o comentário
Compartilhar em outros sites

amigo diz assim e ainda ta dando erro: coluna "cidade" referenciada na restrição de chave estrangeira não existe

Alter table cidade add CONSTRAINT fk_endereco_nome_cidade

FOREIGN KEY(cidade) REFERENCES

cidade(nome_cidade)

o que eu quero dizer é: o endereço pertence a qual cidade

Link para o comentário
Compartilhar em outros sites

Rapaz, você tá fazendo um rolo só ^^

Chave estrangeira funciona assim (veja este exemplo):

Tenho uma tabela de CEP, nesta tabela, além da informação do CEP, possui informações como o nome da rua, a cidade, o estado, etc...

Tenho também, uma tabela de Cliente, e ao invés de criar campo para informar o nome da cidade do cliente, o nome da rua, etc... eu só crio o campo CEP (CEP_CLI se chamará) ok?

Aí, para a tabela CLIENTE, vou criar uma chave estrangeira para o campo CEP_CLI, para isso, o que preciso?

1 - O tipo do campo ser igual nas duas tabelas

2 - A tabela CEP, ter um índice para o campo CEP

Como ficaria a sintaxe para adicionar essa FK?

ALTER TABLE CLIENTE ADD CONSTRAINT fk_sei_la FOREIGN KEY CEP_CLI REFERENCES CEP(CEP);

Pro seu problema ser resolvido, você precisa criar o índice, e depois fazer a chave estrangeira de forma correta:

Bom, chega de mi mi mi, o que você precisa é isso

CREATE INDEX idx_cidade_nome_cidade ON cidade(nome_cidade);

ALTER TABLE endereco ADD CONSTRAINT fk_sei_la FOREIGN KEY (cidade) REFERENCES cidade(nome_cidade);

Link para o comentário
Compartilhar em outros sites

Arquivado

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

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!