Ir para conteúdo

POWERED BY:

Arquivado

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

Cesão

Constraint na mesma tabela

Recommended Posts

Olá!

 

Tenho uma tabela de chamados onde possuo os campos, id_help, id_chamado, id_autor, txt_titulo, txt_texto. O id_chamado vai ser relacionado ao id_help.

 

Vamos dizer que alguem abra um chamado e o registro seja,

1 | NULL | 1 | Quero ajuda | Gostaria de ajuda neste chamado.

 

Isso quer dizer que o registro é a pergunta do chamado. A abertura dele. Quando alguém responder, vai ficar:

2 | 1 | 2 | Resposta para sua ajuda | Aqui está a ajuda para seu chamado.

 

Isso quer dizer que na resposta, o id_chamado iria se relacionar com o id_help. Nesse caso, tem como eu criar uma constraint ou daria conflito?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Falai Cesão, tem sim é só relacionar as colunas id_help com id_chamado

 

exemplo simples:


-- criando a tabela
CREATE TABLE [dbo].[Teste](
	[id_help] [int] NOT NULL,
	[id_chamado] [int] NULL,
	[id_autor] [int] NULL,
	[txt_titulo] [varchar](100) NULL,
	[txt_texto] [varchar](100) NULL,
 CONSTRAINT [PK_Teste] PRIMARY KEY CLUSTERED ([id_help] ASC))
GO

-- adicionando a constraint com a opção nocheck
ALTER TABLE [dbo].[Teste]  WITH NOCHECK ADD  CONSTRAINT [FK_Teste_Teste] FOREIGN KEY([id_chamado])
REFERENCES [dbo].[Teste] ([id_help])
GO

-- habilitando a constraint 
ALTER TABLE [dbo].[Teste] CHECK CONSTRAINT [FK_Teste_Teste]
GO


insert into Teste (id_help, id_chamado, id_autor, txt_titulo, txt_texto)
values (1, null, 1, 'Quero ajuda', 'Gostaria de ajuda neste chamado.')

insert into Teste (id_help, id_chamado, id_autor, txt_titulo, txt_texto)
values (2, 3, 1, 'Resposta para sua ajuda', 'Aqui está a ajuda para seu chamado.')
-- GERA ERRO POIS NÃO TEM O ID 3 --> INSERT statement conflicted with COLUMN FOREIGN KEY SAME TABLE constraint 'FK_Teste_Teste'. The conflict occurred in database 'master', table 'Teste', column 'id_help'.
                             
insert into Teste (id_help, id_chamado, id_autor, txt_titulo, txt_texto)
values (2, 1, 1, 'Resposta para sua ajuda', 'Aqui está a ajuda para seu chamado.')
-- GERA CERTO

abs

Compartilhar este post


Link para o post
Compartilhar em outros sites

É estranho, pois está dando o erro may cause cycles or multiple cascade paths quando tento criar o constraint.

 

O que pode estar acontecendo?

Compartilhar este post


Link para o post
Compartilhar em outros sites

você tentou rodar o exemplo que fiz ?

 

qual a versão do sql server que esta usando ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tentei. Estou usando o 2008.

Então... o modelo que você passou é o que sempre uso para relacionar duas tabelas. Mas quando tentei nessa, ele mostra o erro que pode causar círculos infinitos e não faz o Constraint.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Foi erro ou um aviso ?

 

Criou a constraint ?

 

O que foi implementado pode realmente criar um "loop".

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então, foi um erro. O constraint não foi criado. É estranho porque eu já criei algo parecido com isso, mas não me lembro como. E sei que é possível criar um constraint para a mesma tabela, mas não estou conseguindo, mesmo numa tabela simples assim.

O que pode estar acontecendo?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não consegui ainda criar esse constraint. Parece coisa simples, mas não sei porque não estou conseguindo. A mensagem de erro aparece e o constraint não é criado.

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.