Dúvida em regra de negócio

Boa Tarde,

Estou no aprendizado da Linguagem SQL e meu professor passou um projeto simples de inscrição e administração de alunos e consegui fazer boa parte do projeto mais estou em duvida em resolver algumas regras de negocio que ele passou.

Esse modelo consiste em armazenar o cadastro do aluno, professor, curso, e turma e possui uma outra tabela onde armazena os alunos e turmas (aluno_turma) uma das duvidas foi:

•** O sistema não deve permitir que o aluno entre na mesma turma duas vezes, para resolver esse problema eu criei uma chave composta**.

Mais a regra que não estou conseguindo resolver e essa:

** O sistema não deve permitir que o aluno esteja no mesmo curso e horário.**

Para fazer esse projeto estou utilizando o MySQL, e minha dúvida é se tem como inserir essa regra no banco de dados e como posso fazer?

Att,

Em aluno_turma você terá a chave do aluno e a chave da turma, você não pode colocar as duas como UNIQUE, senão o banco vai trancar quando o aluno for colocado em outra turma.

Uma solução seria o uso de uma TRIGGER verificadora de alunos e turmas, ou você tratar diretamente nas regras de negócio da tua aplicação, onde quando for adicionar um aluno em uma turma, verifica se já não existe na tabela aluno_turma.

1 curtida

Fala aeh, Junior

Estarei estudando sobre o uso de triggers, valeu pela ideia.

Fala Aeh, Junior

O esquema é o seguinte tenho tres tabelas: aluno, turma e aluno_turma, minha duvida é se posso criar um Before Insert para verificar 2 colunas ‘Curso_IdCurso’ e ‘HoraInicio’.

Teria como realizar tal procedimento, verificar essas colunas para que o aluno não se cadastrar-se no mesmo curso e turma?

CREATE TABLE IF NOT EXISTS CursoTDB.Aluno (
IdAluno INT(11) NOT NULL AUTO_INCREMENT,
NomeAluno VARCHAR(100) NOT NULL,
Endereco VARCHAR(255) NOT NULL,
Email VARCHAR(50) NOT NULL,
Telefone VARCHAR(13) NOT NULL,
Cpf VARCHAR(11) NOT NULL,
Status INT(11) NULL DEFAULT NULL,
PRIMARY KEY (IdAluno),
UNIQUE INDEX Cpf_UNIQUE (Cpf ASC))
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8
COLLATE = utf8_general_ci;

CREATE TABLE IF NOT EXISTS CursoTDB.Turma (
idTurma INT(11) NOT NULL AUTO_INCREMENT,
DataInicio DATE NOT NULL,
HoraInicio VARCHAR(5) NOT NULL,
Status INT(11) NULL DEFAULT NULL,
Curso_IdCurso INT(11) NOT NULL,
Professor_IdProfessor INT(11) NOT NULL,
PRIMARY KEY (idTurma),
INDEX fk_Turma_Curso_idx (Curso_IdCurso ASC),
INDEX fk_Turma_Professor1_idx (Professor_IdProfessor ASC),
CONSTRAINT fk_Turma_Curso
FOREIGN KEY (Curso_IdCurso)
REFERENCES CursoTDB.Curso (IdCurso)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT fk_Turma_Professor1
FOREIGN KEY (Professor_IdProfessor)
REFERENCES CursoTDB.Professor (IdProfessor)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8
COLLATE = utf8_general_ci;

CREATE TABLE IF NOT EXISTS CursoTDB.Aluno_Turma (
Turma_idTurma INT(11) NOT NULL,
Aluno_IdAluno INT(11) NOT NULL,
INDEX fk_Aluno_Turma_Turma1_idx (Turma_idTurma ASC),
INDEX fk_Aluno_Turma_Aluno1_idx (Aluno_IdAluno ASC),
PRIMARY KEY (Turma_idTurma, Aluno_IdAluno),
CONSTRAINT fk_Aluno_Turma_Turma1
FOREIGN KEY (Turma_idTurma)
REFERENCES CursoTDB.Turma (idTurma)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT fk_Aluno_Turma_Aluno1
FOREIGN KEY (Aluno_IdAluno)
REFERENCES CursoTDB.Aluno (IdAluno)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8
COLLATE = utf8_general_ci;