Partindo do ponto que você ja possua conhecimento de modelagem de dados vamos ao exemplo.

Nosso case é uma pequena escola de treinamentos. Basicamente na escola irão existir alunos, matriculas, cursos, instrutores e turmas.

Um curso possui nome, requisito, carga horaria e preco. O requisito são os conhecimentos necessário que o aluno deve possuir, a carga horaria é o tempo do curso e por fim o valor do mesmo. Em seguida você possui uma tabela de instrutores, matriculas, alunos e turmas. De importante é comentar que na tabela de matriculas existe um relacionamento para a tabela de turmas. Onde para se possuir uma matricula é preciso ter um turma em aberto, e também na matriculas existe um campo que relaciona com aluno, onde para se ter uma matricula também é necessário ter aluno. Outro pronto importante, é que na tabela de turma, foi replicado o campo carga_horaria. Se pensarmos bem, veja que turma se relaciona com cursos e o mesmo já possui o campo carga_horaria, por que a repetição? Na prática o curso um dia pode ser modificado sua carga horaria e isso iria prejudicar e muito informações a fins de relátorios.

 

Modelo:

 

Código SQL


CREATE TABLE instrutores (
  id INT NOT NULL AUTO_INCREMENT,
  nome VARCHAR(50) NOT NULL,
  email VARCHAR(50) NOT NULL,
  valor_hora INTEGER UNSIGNED NULL,
  certificados VARCHAR(255) NULL,
  PRIMARY KEY(id)
);

CREATE TABLE cursos (
  id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
  nome VARCHAR(50) NOT NULL,
  requisito VARCHAR(255) NULL,
  carga_horaria SMALLINT UNSIGNED NULL,
  preco DOUBLE UNSIGNED NULL,
  PRIMARY KEY(id)
);

CREATE TABLE alunos (
  id INT NOT NULL AUTO_INCREMENT,
  cpf CHAR(11) NOT NULL,
  nome VARCHAR(50) NOT NULL,
  email VARCHAR(50) NOT NULL,
  fone CHAR(14) NOT NULL,
  data_nascimento DATE NULL,
  PRIMARY KEY(id)
);

CREATE TABLE turmas (
  id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
  instrutores_id INT NOT NULL,
  cursos_id INTEGER UNSIGNED NOT NULL,
  data_inicio DATE NULL,
  data_final DATE NULL,
  carga_horaria SMALLINT UNSIGNED NULL,
  PRIMARY KEY(id),
  INDEX turmas_FKIndex1(cursos_id),
  INDEX turmas_FKIndex2(instrutores_id),
  FOREIGN KEY(cursos_id)
    REFERENCES cursos(id)
      ON DELETE NO ACTION
      ON UPDATE NO ACTION,
  FOREIGN KEY(instrutores_id)
    REFERENCES instrutores(id)
      ON DELETE NO ACTION
      ON UPDATE NO ACTION
);

CREATE TABLE matriculas (
  id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
  turmas_id INTEGER UNSIGNED NOT NULL,
  alunos_id INT NOT NULL,
  data_matricula DATE NULL,
  PRIMARY KEY(id),
  INDEX matriculas_FKIndex1(alunos_id),
  INDEX matriculas_FKIndex3(turmas_id),
  FOREIGN KEY(alunos_id)
    REFERENCES alunos(id)
      ON DELETE NO ACTION
      ON UPDATE NO ACTION,
  FOREIGN KEY(turmas_id)
    REFERENCES turmas(id)
      ON DELETE NO ACTION
      ON UPDATE NO ACTION
);

Este foi um pequeno exemplo de modelagem de banco de dados, que é algumas dúvidas de quem esta iniciando. O Objetivo aqui não foi focar no que é relacionamento, chaves estrangeiras entre outros. Mas sim um case na prática.


Att,

Rafael Silva

Editor Geral da Revista .NET Magazine
Editor Geral da Revista Easy .NET Magazine
Editor Geral da Revista Web Magazine