En tabell för den här rapporten
Den här rapporten fungerar bara om "Michel" identifierar en instruktör. Annars behöver du antingen flera underrapporter för en korsning mellan vardagar och tider eller så behöver du flera rapporter.
Varje icke-tom delrapport på en rad och kolumn i din rapport talar om för dig:instructor Michel teaches course
C
in classroom
CR
to section
S
for department
D
.
Så rapporten säger samma sak överlag som en tabell som innehåller raderna där:instructor Michel teaches course
C
in classroom
CR
to section
S
for department
D
in timeslot
TS
on weekday
WD
. Lägg märke till hur vi tar varje kolumn och rad i en multidimensionell rapport som denna och lägger till en kolumn för den i tabellen för varje flerdimensionell delrapport där de skär varandra.
Förmodligen vill du ha en tabell som säger samma sak som alla rapporter för alla instruktörer:instructor
I
teaches course
C
in classroom
CR
to section
S
for department
D
in timeslot
TS
on weekday
WD
. Lägg märke till hur vi tar en parameter i titeln och lägger till en kolumn för den i tabellen.
(Nu behöver vi inte oroa oss för om Michel identifierar en instruktör.)
En första design för denna rapport
Instruktörsnamn är förmodligen icke-unika eller icke-permanenta. Så lägg till ID till namn och rapporttitlar. Du har förmodligen mer data om instruktörer, kurser och avdelningar. Så har tabeller för dem. Tydligen är ett sektionsnummer bara unikt inom en kurs.
-- instructor ID is named NAME and ...
Instructor(id, name, ...)
CK(id)
-- course NAME ...
Course(name, ...)
CK (name)
-- department NAME ...
Department(name, ...)
CK (name)
-- course C_NAME has section S_NUMBER
Course_Has_Section(C_name, S_number)
CK (C_name, S_number)
FK(C_name) to Course
-- instructor I_id teaches course C_NAME in classroom CR_NAME to section S_NUMBER
-- for department D_NAME in timeslot TS_NAME on weekday WD_NAME
Weekly_Lecture(I_id, C_name, CR_name, S_number, D_name, TS_name, WD_name)
FK(I_id) to Instructor
FK(C_name, S_number) to Course_Has_Section
FK(D_name) to Department
Dina designdetaljer kommer att skilja sig åt. Kanske har kurser och/eller institutioner unika koder. Då kanske du använder dem som FK:er. Lägg sedan till en tabell. Tydligen kan en sektion vara aktiv, vad det än betyder.
CK och normalisering
En given instruktör, tid och veckodag kan endast ha en föreläsning i veckan. Men ingen mindre delmängd av dessa gör det. Så vi har Weekly_Lecture CK(I_id, TS_name, WD_name)
. En given kurs, sektion, tid och veckodag kan endast ha en föreläsning i veckan. Men ingen mindre delmängd av dessa gör det. Så vi har Weekly_Lecture CK(C_name, S_number, TS_name, WD_name)
. Ett givet klassrum, tid och veckodag kan bara ha en föreläsning i veckan. Men ingen mindre delmängd av dessa gör det. Så vi har Weekly_Lecture CK(CR_name, TS_name, WD_name)
.
Kanske kan en viss kurs bara ges för en institution? Kanske kan ett givet avsnittsnummer bara läras ut av en given instruktör? Genom att identifiera alla FD:er (funktionella beroenden) bestämmer vi alla CK:er (kandidatnycklar). Sedan normalisering använder dessa för att eventuellt föreslå "bättre" val för bastabeller.