Mysql
 sql >> Base de données >  >> RDS >> Mysql

Qu'est-ce qu'une bonne conception de base de données (schéma) pour une base de données de présence ?

Dans les arts martiaux, les instructeurs sont aussi des étudiants -- donc l'Instructor la table est sous-typée au Student table. Tous les champs communs sont dans le Student table et seules les colonnes spécifiques aux instructeurs sont dans le Instructor tableau.

L'Art le tableau a la liste des arts que l'école propose (judo, karaté...).

L'école peut avoir plusieurs salles, celles-ci sont répertoriées dans la rubrique Room tableau.

ClassSchedule décrit le calendrier publié des cours proposés par l'école.

La présence est capturée dans la Attendance tableau.

Une ligne dans le Calendar table est un jour calendaire (date). La table a des propriétés de date comme DayOfWeek , MonthName , MonthNumberInYear etc

Une ligne dans le TimeTable correspond à une minute d'une journée, comme 7h05.

Le calendrier et l'horaire permettent de créer facilement des rapports de présence par date/heure, par exemple

-- 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 ;

J'espère que cela vous aidera à démarrer.