Usuário com melhor resposta
Só é permitida uma coluna de identidade por tabela.

Pergunta
-
Estou estudando SQL SERVER e tive um problema que não entendi.
Por que apresenta essa mensagem de erro sendo que parece tudo estar correto?
Mensagem 2744, Nível 16, Estado 2, Linha 1
Várias colunas de identidade foram especificadas para a tabela 'cursam'. Só é permitida uma coluna de identidade por tabela.CREATE DATABASE tripla_relacao; USE tripla_relacao; /* RELACIONAMENTO TRIPLO de três tabelas */ CREATE TABLE aluno( id_aluno INT IDENTITY (1,1) NOT NULL, nome VARCHAR(60), data_matricula DATE CONSTRAINT PK_aluno PRIMARY KEY(id_aluno) ); CREATE TABLE disciplina( id_disciplina INT IDENTITY (1,1) NOT NULL, nome VARCHAR(22) NOT NULL CONSTRAINT KP_disciplina PRIMARY KEY(id_disciplina) ); CREATE TABLE professor( id_professor INT IDENTITY(1,1) NOT NULL, nome VARCHAR(50) NOT NULL, CONSTRAINT PK_professor PRIMARY KEY(id_professor) ); CREATE TABLE cursam( id_cursam INT IDENTITY (1,1) NOT NULL, data DATE, id_aluno INT IDENTITY (1,1) NOT NULL, id_disciplina INT IDENTITY (1,1) NOT NULL, id_professor INT IDENTITY(1,1) NOT NULL CONSTRAINT PK_cursam PRIMARY KEY(id_cursam), CONSTRAINT FK_aluno FOREIGN KEY (id_aluno) REFERENCES aluno (id_aluno) ON DELETE CASCADE, CONSTRAINT FK_disciplina FOREIGN KEY (id_disciplina) REFERENCES disciplina(id_disciplina) ON DELETE CASCADE, CONSTRAINT FK_professor FOREIGN KEY (id_professor) REFERENCES professor(id_professor) ON DELETE CASCADE );
- Editado M.Joia sábado, 31 de outubro de 2015 19:21
Respostas
-
Fiquei pensando sobre o assunto e escrevi assim:
CREATE TABLE cursam( id_cursam INT IDENTITY (1,1) NOT NULL, data DATE, id_aluno INT NOT NULL, id_disciplina INT NOT NULL, id_professor INT NOT NULL CONSTRAINT PK_cursam PRIMARY KEY(id_cursam), CONSTRAINT FK_aluno FOREIGN KEY (id_aluno) REFERENCES aluno (id_aluno) ON DELETE CASCADE, CONSTRAINT FK_disciplina FOREIGN KEY (id_disciplina) REFERENCES disciplina(id_disciplina) ON DELETE CASCADE, CONSTRAINT FK_professor FOREIGN KEY (id_professor) REFERENCES professor(id_professor) ON DELETE CASCADE );
Parece que funcionou. Só não sei se esse é um procedimento correto. -
Boa tarde.
Está correto (apesar que eu tiraria os Cascades).
IDENTITY é para colunas de chave primária que terão o "auto incremento".
Como somente o "id_cursam" precisa do incremento (as outras colunas são chaves estrangeiras), só esta coluna deve receber o IDENTITY.
Att., Rafael Simor
- Marcado como Resposta Marcos SJ segunda-feira, 2 de novembro de 2015 13:46
Todas as Respostas
-
Fiquei pensando sobre o assunto e escrevi assim:
CREATE TABLE cursam( id_cursam INT IDENTITY (1,1) NOT NULL, data DATE, id_aluno INT NOT NULL, id_disciplina INT NOT NULL, id_professor INT NOT NULL CONSTRAINT PK_cursam PRIMARY KEY(id_cursam), CONSTRAINT FK_aluno FOREIGN KEY (id_aluno) REFERENCES aluno (id_aluno) ON DELETE CASCADE, CONSTRAINT FK_disciplina FOREIGN KEY (id_disciplina) REFERENCES disciplina(id_disciplina) ON DELETE CASCADE, CONSTRAINT FK_professor FOREIGN KEY (id_professor) REFERENCES professor(id_professor) ON DELETE CASCADE );
Parece que funcionou. Só não sei se esse é um procedimento correto. -
Boa tarde.
Está correto (apesar que eu tiraria os Cascades).
IDENTITY é para colunas de chave primária que terão o "auto incremento".
Como somente o "id_cursam" precisa do incremento (as outras colunas são chaves estrangeiras), só esta coluna deve receber o IDENTITY.
Att., Rafael Simor
- Marcado como Resposta Marcos SJ segunda-feira, 2 de novembro de 2015 13:46