Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Desafio: gerenciamento escolar com banco de dados relacional

Bom dia!

Realizei as etapas de criação de tabelas e upload dos dados e gostaria de validar se as etapas estão corretas. Ao lado disso, segue uma dúvida que surgiu:

  • Na tabela turmas os dados compartilhados não correspondem a todas as colunas da tabela criada. As demais colunas devem ficar sem dados?

obs.: optei por adicionar os dados via script ao invés da funcionalidade 'import'

CREATE TABLE alunos (
  id_do_aluno INT PRIMARY KEY,
  nome_do_aluno VARCHAR (250),
  data_nascimento_aluno DATE,
  genero_aluno VARCHAR (50),
  endereco_aluno VARCHAR (250),
  telefone_aluno VARCHAR (15),
  email_aluno VARCHAR (100)
);

INSERT into alunos (id_do_aluno,nome_do_aluno,data_nascimento_aluno,genero_aluno,endereco_aluno,telefone_aluno,email_aluno)
VALUES
('1', 'João Silva', '2005-03-15', 'Masculino', 'Rua das Flores, 123', '(11)9876-5432', 'joao@email.com'),
('2', 'Maria Santos', '2006-06-20', 'Feminino', 'Avenida Principal, 456', '(11)8765-4321', 'maria@email.com'),
('3', 'Pedro Soares', '2004-01-10', 'Masculino', 'Rua Central, 789', '(11)7654-3210', 'pedro@email.com'),
('4', 'Ana Lima', '2005-04-02', 'Feminino', 'Rua da Escola, 56', '(11)8765-4321', 'ana@email.com'),
...

CREATE TABLE professores (
  id_do_professor INT PRIMARY KEY,
  nome_do_professor VARCHAR (250),
  data_nascimento_professor DATE,
  genero_professor VARCHAR (50),
  telefone_professor VARCHAR (15),
  email_professor VARCHAR (100)
);

INSERT INTO professores (id_do_professor,nome_do_professor,data_nascimento_professor,genero_professor,telefone_professor,email_professor)
VALUES
('1', 'Ana Oliveira', '1980-05-25', 'Feminino', '(11)1234-5678', 'ana@email.com'),
('2', 'Carlos Ferreira', '1975-09-12', 'Masculino', '(11)2345-6789', 'carlos@email.com'),
('3', 'Mariana Santos', '1982-03-15', 'Feminino', '(11)3456-7890', 'mariana@email.com'),
('4', 'Ricardo Silva', '1978-08-20', 'Masculino', '(11)7890-1234', 'ricardo@email.com'),
('5', 'Fernanda Lima', '1985-01-30', 'Feminino', '(11)4567-8901', 'fernanda@email.com');

CREATE TABLE disciplinas (
  id_disciplina INT PRIMARY KEY,
  nome_disciplina VARCHAR (100),
  descricao_disciplina VARCHAR (250),
  carga_horaria_disciplina INTEGER,
  id_do_professor INT,
  FOREIGN KEY (id_do_professor) REFERENCES professores (id_do_professor)
);

insert INTO disciplinas (id_disciplina,nome_disciplina,descricao_disciplina,carga_horaria_disciplina,id_do_professor)
VALUES
('1', 'Matemática', 'Estudo de conceitos matemáticos avançados', 60, '1'),
('2', 'História', 'História mundial e local', 45, '2'),
('3', 'Física', 'Princípios fundamentais da física', 60, '1'),
('4', 'Química', 'Estudo da química e suas aplicações', 45, '3'),
('5', 'Inglês', 'Aulas de inglês para iniciantes', 45, '4'),
('6', 'Artes', 'Exploração da criatividade artística', 30, '5');

CREATE table turmas (
  id_turma INT PRIMARY KEY,
  nome_turma VARCHAR (250),
  ano_letivo_turma INTEGER,
  id_professor_orientador_turma INT,
  id_disciplina_turma INT,
  id_aluno_turma INT,
  FOREIGN KEY (id_professor_orientador_turma) REFERENCES professores (id_do_professor),
  FOREIGN KEY (id_disciplina_turma) REFERENCES disciplinas (id_disciplina),
  FOREIGN KEY (id_aluno_turma) REFERENCES alunos (id_do_aluno)
);

INSERT INTO turmas (id_turma,nome_turma,ano_letivo_turma,id_professor_orientador_turma)
VALUES
('1', 'Turma A', '2023', '1'),
('2', 'Turma B', '2023', '2'),
('3', 'Turma C', '2023', '3'),
('4', 'Turma D', '2023', '4'),
('5', 'Turma E', '2023', '5');

CREATE TABLE turmas_disciplinas (
  id_turma INT,
  id_disciplina INT,
  PRIMARY KEY (id_turma,id_disciplina),
  FOREIGN KEY (id_turma) REFERENCES turmas (id_turma),
  FOREIGN KEY (id_disciplina) REFERENCES disciplinas (id_disciplina)
);

INSERT INTO turmas_disciplinas (id_turma,id_disciplina)
VALUES
('1', '1'),
('2', '2'),
('3', '3'),
('4', '4'),
('5', '5'),
('1', '3'),
('2', '1'),
('3', '2');

CREATE TABLE turmas_alunos (
  id_turma INT,
  id_do_aluno INT,
  PRIMARY KEY (id_turma,id_do_aluno),
  FOREIGN KEY id_turma REFERENCES turma (id_turma),
  FOREIGN KEY id_do_aluno REFERENCES alunos (id_do_aluno)
);

INSERT into turmas_alunos (id_turma_aluno,id_turma,id_do_aluno)
VALUES
('1', '1'),
('2', '2'),
('3', '3'),
('4', '4'),
('5', '5'),
('1', '6'),
('2', '7'),
('3', '8'),
('4', '9'),
('5', '10');

CREATE TABLE notas (
  id_nota INT PRIMARY KEY,
  id_disciplina INT,
  id_do_aluno INT,
  valor_nota DECIMAL (2,2),
  data_avaliacao DATE
  FOREIGN KEY id_disciplina REFERENCES disciplinas (id_disciplina),
  FOREIGN key id_do_aluno REFERENCES alunos (id_do_aluno)
);

INSERT into notas (id_nota,id_disciplina,id_do_aluno,valor_nota)
VALUES
('2', '1', '1', 6.19),
('3', '1', '2', 7.18),
('4', '1', '3', 7.47),
('5', '1', '4', 7.46),
...
  
1 resposta
solução!

Oi, David! Como vai?

Em relação à sua dúvida, é completamente normal em bancos de dados relacionais que nem todas as colunas sejam preenchidas em um primeiro momento. As colunas que não possuem dados inseridos inicialmente ficarão com o valor NULL, a menos que seja especificado um valor padrão para elas.

Os valores podem ser preenchidos mais tarde com o comando UPDATE, que permite atualizar os valores, ou pode ser que esses valores sejam inexistentes nesses casos, mesmo. Quando é imprescindível que um valor seja inserido em determinada coluna, é uma boa prática adicionar o parâmetro NOT NULL no momento de criação da tabela (as chaves primárias, por exemplo, são imprescindíveis - se elas não forem preenchidas, ocorrerá um erro).

Espero ter esclarecido e que você esteja gostando do curso! Fico à disposição.

Forte abraço.