Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Was ist ein gutes Datenbankdesign (Schema) für eine Anwesenheitsdatenbank?

In der Kampfkunst sind Ausbilder auch Schüler – also der Instructor Die Tabelle ist für den Student untertypisiert Tisch. Alle gängigen Felder befinden sich im Student Tabelle und nur für Dozenten spezifische Spalten befinden sich in Instructor Tabelle.

Die Art Tabelle enthält eine Liste der Künste, die die Schule anbietet (Judo, Karate ...).

Die Schule kann mehrere Räume haben, diese sind im Room aufgeführt Tabelle.

ClassSchedule beschreibt den veröffentlichten Stundenplan, den die Schule anbietet.

Die Anwesenheit wird in Attendance erfasst Tabelle.

Eine Zeile im Calendar Tabelle ist ein Kalendertag (Datum). Die Tabelle hat Datumseigenschaften wie DayOfWeek , MonthName , MonthNumberInYear usw.

Eine Zeile im TimeTable ist eine Minute eines Tages, z. B. 7:05.

Kalender und Stundenplan ermöglichen beispielsweise eine einfache Anwesenheitsberichterstattung nach Datum/Uhrzeit

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

Ich hoffe, das hilft Ihnen beim Einstieg.