# Atividade 2
## Mapeamento Modelo Entidade-Relacionamento para modelo relacional
**Aluno** (<ins>numero_aluno</ins>, cpf, rg, data_nascimento, telefone_fixo, telefone_celular, primeiro_nome, nome_intermediario, sobrenome, logradouro, numero, complemento, tipo_logradouro, bairro, cidade, estado, cep, id_curso)
**Disciplina** (<ins>id_disciplina</ins>, nome, sigla, programa, ementa, bibliografia, carga_horaria)
**PreRequisito** (<ins>id_disciplina</ins>, <ins>id_pre_requisito</ins>)
**Curso** (<ins>id_curso</ins>, nome, sigla, site, telefone, codigo_departamento)
**Departamento** (<ins>codigo_departamento</ins>, nome, sigla, email, telefone)
**matricula_disciplina** (<ins>numero_aluno</ins>, <ins>id_disciplina</ins>)
**conclusao_disciplina** (<ins>numero_aluno</ins>, <ins>id_disciplina</ins>)
**oferece** (<ins>id_curso</ins>, <ins>id_disciplina</ins>, disciplina_obrigatoria)
## Criação das tabelas e Inserção de dados aleatórios
### Departamento
```sql=
CREATE TABLE "Universidade"."Departamento"
(
codigo_departamento INT NOT NULL,
nome VARCHAR(50) NOT NULL,
sigla VARCHAR(10) NOT NULL,
email TEXT NOT NULL,
telefone VARCHAR(11) NOT NULL,
PRIMARY KEY (codigo_departamento)
);
```
### Curso
```sql=
CREATE TABLE "Universidade".curso
(
id_curso INT NOT NULL,
nome TEXT NOT NULL,
sigla VARCHAR(10),
site TEXT,
telefone VARCHAR(11),
codigo_departamento INT,
PRIMARY KEY(id_curso),
CONSTRAINT codigo_departamento FOREIGN KEY (codigo_departamento)
REFERENCES "Universidade"."Departamento" (codigo_departamento)
ON UPDATE CASCADE
ON DELETE CASCADE
);
```
### Disciplina
```sql=
CREATE TABLE "Universidade".disciplina
(
id_disciplina INT NOT NULL,
nome TEXT NOT NULL,
sigla VARCHAR(10),
programa TEXT,
ementa TEXT,
bibliografia TEXT,
carga_horaria FLOAT8,
PRIMARY KEY(id_disciplina)
);
```
### Aluno
```sql=
CREATE TABLE "Universidade"."Aluno"
(
numero_aluno INT NOT NULL,
rg VARCHAR(8) NOT NULL,
data_nascimento date NOT NULL,
telefone_fixo VARCHAR(11),
telefone_celular VARCHAR(11),
primeiro_nome text NOT NULL,
nome_intermediario text NOT NULL,
sobrenome text NOT NULL,
logradouro text NOT NULL,
numero text NOT NULL,
complemento text,
tipo_logradouro text,
bairro text NOT NULL,
cidade text NOT NULL,
estado text NOT NULL,
cep VARCHAR(8) NOT NULL,
id_curso INT,
cpf VARCHAR(11) NOT NULL,
PRIMARY KEY (numero_aluno),
CONSTRAINT id_curso FOREIGN KEY (id_curso)
REFERENCES "Universidade".curso (id_curso)
);
```
### Relacionamentos
#### Pré requisito Disciplina
```sql=
CREATE TABLE "Universidade"."PreRequisito"
(
id_disciplina INT NOT NULL,
id_pre_requisito INT NOT NULL,
PRIMARY KEY (id_disciplina, id_pre_requisito),
CONSTRAINT id_disciplina FOREIGN KEY (id_disciplina)
REFERENCES "Universidade"."Disciplina" (id_disciplina)
CONSTRAINT id_pre_requisito FOREIGN KEY (id_pre_requisito)
REFERENCES "Universidade"."Disciplina" (id_disciplina)
);
```
#### Matrícula Disciplina
```sql=
CREATE TABLE "Universidade".matricula_disciplina
(
numero_aluno INT NOT NULL,
id_disciplina INT NOT NULL,
PRIMARY KEY (numero_aluno, id_disciplina),
CONSTRAINT numero_aluno FOREIGN KEY (numero_aluno)
REFERENCES "Universidade"."Aluno" (numero_aluno)
CONSTRAINT id_disciplina FOREIGN KEY (numero_aluno)
REFERENCES "Universidade"."Disciplina"(id_disciplina)
);
```
#### Conclusão Disciplina
```sql=
CREATE TABLE "Universidade".conclusao_disciplina
(
numero_aluno INT NOT NULL,
id_disciplina INT NOT NULL,
PRIMARY KEY (numero_aluno, id_disciplina),
CONSTRAINT numero_aluno FOREIGN KEY (numero_aluno)
REFERENCES "Universidade"."Aluno" (numero_aluno)
CONSTRAINT id_disciplina FOREIGN KEY (id_disciplina)
REFERENCES "Universidade"."Disciplina" (id_disciplina)
);
```
#### Oferece
```sql=
CREATE TABLE "Universidade".oferece
(
id_curso INT NOT NULL,
id_disciplina INT NOT NULL,
disciplina_obrigatoria BOOL,
PRIMARY KEY (numero_aluno, id_disciplina)
CONSTRAINT id_curso FOREIGN KEY (id_curso)
REFERENCES "Universidade".curso (id_curso)
CONSTRAINT id_disciplina FOREIGN KEY (id_curso)
REFERENCES "Universidade"."Disciplina" (id_disciplina)
);
```
## Consultas
### Colsultas para mostrar todos os dados das tabelas
#### Departamento
```sql=
SELECT * FROM "Universidade"."Departamento";
```

#### Curso
```sql=
SELECT * FROM "Universidade".curso;
```

#### Disciplina
```sql=
SELECT * FROM "Universidade".disciplina;
```

#### Aluno
```sql=
SELECT * FROM "Universidade"."Aluno";
```

#### Pré requisito Disciplina
```sql=
SELECT * FROM "Universidade"."PreRequisito"
```

#### Matrícula Disciplina
```sql=
SELECT * FROM "Universidade".matricula_disciplina
```

#### Conclusão Disciplina
```sql=
SELECT * FROM "Universidade".conclusao_disciplina
```

#### Oferece
```sql=
SELECT * FROM "Universidade".oferece
```

### Consulta Relacionamentos Binários
#### Aluno <> Curso
```sql=
SELECT *
FROM "Universidade"."Aluno"
INNER JOIN "Universidade".curso ON "Universidade".curso.id_curso = "Universidade"."Aluno".id_curso
```
#### Curso <> Disciplina
##### oferece
```sql=
SELECT *
FROM "Universidade".oferece
INNER JOIN "Universidade".curso ON "Universidade".curso.id_curso = "Universidade".oferece.id_curso
INNER JOIN "Universidade"."Disciplina" ON "Universidade"."Disciplina".id_disciplina = "Universidade".oferece.id_disciplina
```
#### Aluno <> Disciplina
##### matricula_disciplina
```sql=
SELECT *
FROM "Universidade".matricula_disciplina
INNER JOIN "Universidade"."Aluno" ON "Universidade"."Aluno".numero_aluno = "Universidade".matricula_disciplina.numero_aluno
INNER JOIN "Universidade"."Disciplina" ON "Universidade"."Disciplina".id_disciplina = "Universidade".matricula_disciplina.id_disciplina
```
##### conclusao_disciplina
```sql=
SELECT *
FROM "Universidade".conclusao_disciplina
INNER JOIN "Universidade"."Aluno" ON "Universidade"."Aluno".numero_aluno = "Universidade".conclusao_disciplina.numero_aluno
INNER JOIN "Universidade"."Disciplina" ON "Universidade"."Disciplina".id_disciplina = "Universidade".conclusao_disciplina.id_disciplina
```
#### Curso <> Departamento
```sql=
SELECT *
FROM "Universidade".curso
INNER JOIN "Universidade"."Departamento" ON "Universidade"."Departamento".codigo_departamento = "Universidade".curso.codigo_departamento
```