Ir para conteúdo

Arquivado

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

BinhoMaster

regras do negócio

Recommended Posts

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 pediu.
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,

Compartilhar este post


Link para o post
Compartilhar em outros sites
Fala Aeh, Motta


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' para que o aluno não se cadastre no mesmo curso e horario.


Teria como realizar tal procedimento?


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;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faça uma trigger de before insert que verifique se não existem entradas confintantes para data/hora inserida, existindo forçar uma exceção (erro).

Compartilhar este post


Link para o post
Compartilhar em outros sites
O problema é o seguinte


quero comparar o dadorealizadopelousuario == dadonacoluna

Se existir o dadonacoluna não inserir registro

senao

Inseri um novo registro


Que tipo de função posso usar para comparar esses dados?

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.