Ajuda com banco de dados (SQL Server)

Boa noite.

Estou com um projeto para entregar segunda-feira, e com dificuldades no meu banco.

Aqui está ele:

–create database geresc

–use geresc

–CREATE TABLE Aluno (nomeAluno VARCHAR(50) UNIQUE NOT NULL,
– matriculaAluno INT PRIMARY KEY NOT NULL,
– dataNascimento VARCHAR(15) NOT NULL,
– responsavelAluno VARCHAR(50) NOT NULL,
– paiAluno VARCHAR(50),
– maeAluno VARCHAR(50) NOT NULL,
– telefoneAluno int NOT NULL,
– enderecoAluno VARCHAR(40) NOT NULL,
– emailAluno VARCHAR(30) NOT NULL,
– turmaAluno VARCHAR(30) FOREIGN KEY REFERENCES Turma(nomeTurma) NOT NULL,
– sexoAluno VARCHAR(20),
– especialAluno VARCHAR(5),
– qtdAprovacoes int,
– ingressoAluno VARCHAR(15) NOT NULL,
– numIdentidade int,
– cpf int,
– tituloEleitor int,
– paiVivo VARCHAR (5),
– maeViva VARCHAR(5),
– moraPais VARCHAR(5),
– ocorrencias VARCHAR(200),
– observacoes VARCHAR(200),
– notas REAL)

–ALTER TABLE Aluno ADD CONSTRAINT FK_TURMA_ALUNO FOREIGN KEY (turmaAluno) REFERENCES Turma(nomeTurma);
–ALTER TABLE Aluno ADD CONSTRAINT FK_NOTAS_ALUNO FOREIGN KEY (notas) REFERENCES Notas(aluno) ON DELETE CASCADE ON UPDATE CASCADE;

–CREATE TABLE Responsavel (nomeResponsavel VARCHAR(50) UNIQUE NOT NULL,
– aluno int FOREIGN KEY REFERENCES Aluno(matriculaAluno) ON DELETE CASCADE ON UPDATE CASCADE NOT NULL,
– cpf int,
– numIdentidade int,
– nascimento VARCHAR(20),
– telefone int,
– parentesco VARCHAR(20),
– profissao VARCHAR(30),
– email VARCHAR(30),
– endereco VARCHAR(50))

–ALTER TABLE Responsavel ADD CONSTRAINT FK_RESPONSAVEL FOREIGN KEY (aluno) REFERENCES Aluno(nomeAluno) ON DELETE CASCADE ON UPDATE CASCADE;

–CREATE TABLE Aprovados (aluno int FOREIGN KEY REFERENCES Aluno(matriculaAluno),
– turma int FOREIGN KEY REFERENCES Turma(codigoTurma),
– quantidadeAprovados int)

–CREATE TABLE Recuperacao (aluno int FOREIGN KEY REFERENCES Aluno(matriculaAluno),
– turma int FOREIGN KEY REFERENCES Turma(codigoTurma),
– quantidadeRecuperacao int)

–CREATE TABLE Reprovados (aluno int FOREIGN KEY REFERENCES Aluno(matriculaAluno),
– turma int FOREIGN KEY REFERENCES Turma(codigoTurma),
– quantidadeReprovados int)

–CREATE TABLE Professor (nomeProfessor VARCHAR(50) NOT NULL,
– codigoProfessor INT PRIMARY KEY NOT NULL,
– identidadeProfessor int NOT NULL,
– cpfProfessor int NOT NULL,
– nascimentoProfessor VARCHAR (15) NOT NULL,
– emailProfessor VARCHAR(30) NOT NULL,
– sexoProfessor VARCHAR(10) NOT NULL,
– enderecoProfessor VARCHAR(40) NOT NULL,
– telefoneProfessor VARCHAR(15) NOT NULL,
– turmaProfessor VARCHAR(30) NOT NULL
– FOREIGN KEY (turmaProfessor) REFERENCES Turma(nomeTurma) ON DELETE CASCADE ON UPDATE CASCADE)

–CREATE TABLE Turma (nomeTurma VARCHAR(30) UNIQUE NOT NULL,
– codigoTurma INT PRIMARY KEY NOT NULL,
– professorResponsavel int,
– quantidadeAlunos INT,
– turno VARCHAR(20) NOT NULL)

–ALTER TABLE Turma ADD CONSTRAINT FK_PROFESSOR_RESPONSAVEL FOREIGN KEY (professorResponsavel) REFERENCES Professor(codigoProfessor);

–CREATE TABLE Notas (aluno VARCHAR(50) FOREIGN KEY(aluno) REFERENCES Aluno (nomeAluno) ON DELETE CASCADE,
– nota REAL,
– disciplina VARCHAR(15),
– competencia VARCHAR(30),
– bimestre VARCHAR(15),
– PRIMARY KEY CLUSTERED (bimestre,competencia,aluno))


Sou novo nesse ramo e peço a ajuda de vocês. Ao cadastrar uma turma dá um erro: “a instrução insert conflitou com a restrição do foreign key”. Além de turma, esse erro acontece em outras inserções.

Peço a ajuda de quem puder. Onde estou errando? O banco está errado?

Grato desde já.

Restrincao de foreign key é quando voce esta inserindo um registro numa tabela e está tem um campo que referencia a um registro e outro, so que este valor de fk nao este na tabela de referencia.
Verifique se o valor que voce esta inserindo existe na tabela de fk.

1 curtida

[quote=tebosoftware]Restrincao de foreign key é quando voce esta inserindo um registro numa tabela e está tem um campo que referencia a um registro e outro, so que este valor de fk nao este na tabela de referencia.
Verifique se o valor que voce esta inserindo existe na tabela de fk.[/quote]

Deixa eu ver se entendi: ao inserir os dados em Turma, devo inserir simultaneamente em Professor. É isso?

Não simultaneamente, mas já deve existir um professor com codigoProfessor igual ao que está a ser inserido em professorResponsavel da turma.

Tem que inserir antes em professor e só depois na outra.

Muito obrigado! Vou aplicar no banco e a seguir darei o retorno.