Dúvida em exercício - SQL

SQL

MySQL

25/01/2019

Galera, vi uma exercício de SQL aqui no fórum, e resolvi tentar resolve-lo. Alguém poderia me auxiliar quanto a resolução feita por mim?
Segue enunciado:
"Considere os seguintes requisitos de um BD de uma universidade:
- Cada DEPARTAMENTO é descrito por um nome, código, telefone e centro.
- Cada ALUNO tem um nome, número de matricula, CPF, endereço (rua, cidade, CEP),
telefones (pode ser mais de um), data de nascimento, sexo, departamento e curso.
- Cada CURSO tem um nome, tipo (técnico, graduação, mestrado ou doutorado),
departamento, coordenador e vice-coordenador.
- Cada PROFESSOR é descrito por um nome, CPF, departamento, telefone.
- Cada DISCIPLINA tem um nome, descrição, código, número de créditos e o
departamento que oferta a disciplina.
- Cada OFERTA de Disciplina tem um professor e um horário.
- Os alunos podem se matricular nas disciplinas ofertadas.

No MySQL WorkBench, construa todas as tabelas da aplicação de BD acima.
Especifique os atributos chaves de cada tabela e restrições de cada relacionamento."

> Segue resolução:
create database universidade;
create table departamento(
nome varchar(30) not null,
codigo int default primary key,
telefone varchar(12) not null,
centro varchar(15) not null
) charset = utf8;

create table aluno(
ra int primary key,
nome varchar(30) not null,
cpf int not null,
rua varchar(30) not null,
cidade varchar(30) not null,
cep int not null
) charset = utf8;

create table curso(
idcurso int not null primary key
nome varchar(30) not null if not exists,
tipo varchar(9) not null
) chartset = utf8;

create table professor(
nome varchar(30) not null,
CPF int not null primary,
departamento varchar(20) not null,
telefone varchar (15) not null
) chartset = utf8;

create table disciplina(
nome varchar(30) not null,
descricao text not null,
codigo int primary key not null,
creditos int not null,
deptdisc varchar(30) not null
) charset = utf8
Lucas

Lucas

Curtidas 0

Respostas

Ricardo Pestana

Ricardo Pestana

25/01/2019

Acho q seria mais ou menos assim...

-- DEPARTAMENTO configurei o campo codigo como sendo autoincremento
CREATE TABLE `departamento` (
`codigo` int(11) NOT NULL AUTO_INCREMENT,
`nome` varchar(30) NOT NULL,
`telefone` varchar(12) NOT NULL,
`centro` varchar(15) NOT NULL,
PRIMARY KEY (`codigo`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- Curso configurei idcurso como autoincremento
create table curso (
idcurso int(11) NOT NULL AUTO_INCREMENT,
nome varchar(30) not null,
tipo varchar(9) not null,
PRIMARY KEY (`idcurso`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- PROFESSOR alterei o departamento para ser chave estrangeira do campo codigo da tabela departamento
CREATE TABLE `professor` (
`CPF` int(11) NOT NULL,
`nome` varchar(30) NOT NULL,
`idDepartamento` int(11) NOT NULL,
`telefone` varchar(15) NOT NULL,
PRIMARY KEY (`CPF`),
KEY `fkdepartamento_idx` (`idDepartamento`),
CONSTRAINT `fkdepartamento` FOREIGN KEY (`idDepartamento`) REFERENCES `departamento` (`codigo`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- - Cada DISCIPLINA tem um nome, descrição, código, número de créditos e o departamento que oferta a disciplina.
CREATE TABLE `disciplina` (
`codigo` int(11) NOT NULL AUTO_INCREMENT,
`nome` varchar(30) NOT NULL,
`descricao` text NOT NULL,
`creditos` int(11) NOT NULL,
`idDepartamento` int(11) NOT NULL,
PRIMARY KEY (`codigo`),
KEY `fk_departamento_idx` (`idDepartamento`),
CONSTRAINT `fk_departamento` FOREIGN KEY (`idDepartamento`) REFERENCES `departamento` (`codigo`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


-- Cada ALUNO tem um nome, número de matricula, CPF, endereço (rua, cidade, CEP),
-- telefones (pode ser mais de um), data de nascimento, sexo, departamento e curso.
CREATE TABLE `aluno` (
`ra` int(11) NOT NULL,
`nome` varchar(30) NOT NULL,
`cpf` int(11) NOT NULL,
`rua` varchar(30) NOT NULL,
`cidade` varchar(30) NOT NULL,
`cep` int(11) NOT NULL,
`dataNascimento` date DEFAULT NULL,
`sexo` char(1) DEFAULT NULL,
`alunocol` varchar(45) DEFAULT NULL,
`idDepartamento` int(11) DEFAULT NULL,
`idCurso` int(11) DEFAULT NULL,
PRIMARY KEY (`ra`),
KEY `fk_departamento_idx` (`idDepartamento`),
KEY `fk_curso_idx` (`idCurso`),
CONSTRAINT `fk_curso` FOREIGN KEY (`idCurso`) REFERENCES `curso` (`idcurso`) ON DELETE NO ACTION ON UPDATE NO ACTION,
CONSTRAINT `fk_depto` FOREIGN KEY (`idDepartamento`) REFERENCES `departamento` (`codigo`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- criei essa tabela para que consiga cadastrar vários telefones para um aluno. Nela criei o campo tipo para diferenciar se é residencial, trabalho... não é a melhor forma
-- mas atende o requisito de maneira simples
CREATE TABLE `universidade`.`aluno_telefone` (
`id` INT NOT NULL AUTO_INCREMENT,
`ra` INT NOT NULL,
`tipo` VARCHAR(30) NULL,
`numero` VARCHAR(45) NULL,
PRIMARY KEY (`id`),
INDEX `fk_aluno_idx` (`ra` ASC),
CONSTRAINT `fk_aluno`
FOREIGN KEY (`ra`)
REFERENCES `universidade`.`aluno` (`ra`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);

-- Cada OFERTA de Disciplina tem um professor e um horário.
CREATE TABLE `oferta` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`descricao` varchar(45) DEFAULT NULL,
`idDisciplina` int(11) DEFAULT NULL,
`CPF_Professor` int(11) DEFAULT NULL,
`horario` datetime DEFAULT NULL,
KEY `fkDisciplina_idx` (`id`),
KEY `fkProfessor_idx` (`CPF_Professor`),
CONSTRAINT `fkDisciplina` FOREIGN KEY (`id`) REFERENCES `disciplina` (`codigo`) ON DELETE NO ACTION ON UPDATE NO ACTION,
CONSTRAINT `fkProfessor` FOREIGN KEY (`CPF_Professor`) REFERENCES `professor` (`CPF`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- Matricula_Oferta Os alunos podem se matricular nas disciplinas ofertadas.
CREATE TABLE `matricula` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`ra` int(11) DEFAULT NULL,
`idOferta` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `ra_UNIQUE` (`ra`),
UNIQUE KEY `idOferta_UNIQUE` (`idOferta`),
CONSTRAINT `fk_oferta` FOREIGN KEY (`idOferta`) REFERENCES `oferta` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION,
CONSTRAINT `fk_ra` FOREIGN KEY (`ra`) REFERENCES `aluno` (`ra`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
GOSTEI 0
Fernando C

Fernando C

25/01/2019

uma forma bem mais simples:
http://trocadicas.blogspot.com/2018/11/combo-cidades-estados-sem-ajax.html
GOSTEI 0
Fernando C

Fernando C

25/01/2019

uma forma bem mais simples:
http://trocadicas.blogspot.com/2018/11/combo-cidades-estados-sem-ajax.html

ops. topico errado. desconsiderem
GOSTEI 0
POSTAR