sql >> Base de Datos >  >> RDS >> Mysql

¿Qué es un buen diseño de base de datos (esquema) para una base de datos de asistencia?

En las artes marciales, los instructores también son estudiantes, por lo que el Instructor la tabla está sub-escrita para Student mesa. Todos los campos comunes están en el Student la tabla y solo las columnas específicas de los instructores están en Instructor mesa.

El Art tabla tiene listado de las artes que ofrece la escuela (judo, karate...).

La escuela puede tener varios salones, estos se enumeran en el Room mesa.

ClassSchedule describe el horario de clases publicado que ofrece la escuela.

La asistencia se captura en el Attendance mesa.

Una fila en el Calendar la tabla es un día calendario (fecha). La tabla tiene propiedades de fecha como DayOfWeek , MonthName , MonthNumberInYear etc

Una fila en el TimeTable es un minuto de un día, como las 7:05.

Calendar y TimeTable permiten un fácil informe de asistencia por fecha/hora, por ejemplo

-- 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 esto te ayude a empezar.