Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

O que é um bom design de banco de dados (esquema) para um banco de dados de atendimento?


Nas artes marciais, os instrutores também são alunos -- então o Instructor tabela é subtipada para o Student tabela. Todos os campos comuns estão no Student tabela e apenas colunas específicas para instrutores estão no Instructor tabela.

A Art tabela tem lista de artes que a escola oferece (judô, karatê...).

A escola pode ter várias salas, estas estão listadas na Room tabela.

ClassSchedule descreve o cronograma publicado de aulas que a escola oferece.

A participação é capturada em Attendance tabela.

Uma linha no Calendar tabela é um dia de calendário (data). A tabela tem propriedades de data como DayOfWeek , MonthName , MonthNumberInYear etc.

Uma linha na TimeTable é um minuto de um dia, como 7:05.

Calendário e Tabela de Horários permitem relatórios fáceis de presença por data/hora, por exemplo
-- Attendance of judo morning classes
-- for the first three months of the year 2010
-- by day of a week (Sun, Mon, Tue, ..)
select
    DayOfWeek
  , count(1) as Students
from ClassSchedule as a
join Calendar      as b on b.CalendarId = a.CalendarId
join TimeTable     as c on c.TimeID     = a.StartTimeId
join Attendance    as d on d.ClassId    = a.ClassID
join Art           as e on e.ArtId      = a.ArtID
where ArtName = 'judo'
  and Year    = 2010
  and MonthNumberInYear between 1 and 3
  and PartOfDay = 'morning'
group by DayOfWeek ;



Espero que isso faça você começar.