none
Só é permitida uma coluna de identidade por tabela. RRS feed

  • 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
    sábado, 31 de outubro de 2015 19:20

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.
    • Sugerido como Resposta SimorC sábado, 31 de outubro de 2015 19:42
    • Marcado como Resposta Marcos SJ segunda-feira, 2 de novembro de 2015 13:46
    sábado, 31 de outubro de 2015 19:33
  • 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
    sábado, 31 de outubro de 2015 19:41

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.
    • Sugerido como Resposta SimorC sábado, 31 de outubro de 2015 19:42
    • Marcado como Resposta Marcos SJ segunda-feira, 2 de novembro de 2015 13:46
    sábado, 31 de outubro de 2015 19:33
  • 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
    sábado, 31 de outubro de 2015 19:41