Een tabel voor dit rapport
Dit rapport werkt alleen als 'Michel' één instructeur identificeert. Anders heeft u ofwel meerdere subrapporten nodig voor een kruispunt van een weekdag-tijdslot of u hebt meerdere rapporten nodig.
Elk niet-lege subrapport in een rij en kolom van je rapport vertelt je:instructor Michel teaches course
C
in classroom
CR
to section
S
for department
D
.
Dus het rapport vertelt je over het algemeen hetzelfde als een tabel met de rijen waarin:instructor Michel teaches course
C
in classroom
CR
to section
S
for department
D
in timeslot
TS
on weekday
WD
. Merk op hoe we elke kolom en rij van een multidimensionaal rapport zoals dit nemen en er een kolom voor toevoegen aan de tabel voor elk multidimensionaal subrapport waar ze elkaar kruisen.
Waarschijnlijk wil je een tabel die je hetzelfde vertelt als alle rapporten voor alle instructeurs:instructor
I
teaches course
C
in classroom
CR
to section
S
for department
D
in timeslot
TS
on weekday
WD
. Merk op hoe we een parameter in de titel nemen en er een kolom voor aan de tabel toevoegen.
(Nu hoeven we ons geen zorgen te maken of Michel één instructeur identificeert.)
Een eerste ontwerp voor dit rapport
De namen van instructeurs zijn waarschijnlijk niet-uniek of niet-permanent. Dus voeg id's toe aan namen en rapporteer titels. Waarschijnlijk heb je meer gegevens over docenten, cursussen en afdelingen. Dus heb tafels voor hen. Blijkbaar is een sectienummer alleen uniek binnen een cursus.
-- 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
Uw ontwerpdetails zullen verschillen. Misschien hebben cursussen en/of afdelingen unieke codes. Dan zou je ze kunnen gebruiken als FK's. Voeg dan een tabel toe. Blijkbaar kan een sectie actief zijn, wat dat ook betekent.
CK's en normaliseren
Een bepaalde instructeur, tijdslot &weekdag kan slechts één wekelijkse les hebben. Maar geen enkele kleinere subset daarvan doet dat. Dus we hebben Weekly_Lecture CK(I_id, TS_name, WD_name)
. Een bepaalde cursus, sectie, tijdslot &weekdag kan slechts één wekelijkse lezing hebben. Maar geen enkele kleinere subset daarvan doet dat. Dus we hebben Weekly_Lecture CK(C_name, S_number, TS_name, WD_name)
. Een bepaald klaslokaal, tijdslot en weekdag kan slechts één wekelijkse lezing hebben. Maar geen enkele kleinere subset daarvan doet dat. Dus we hebben Weekly_Lecture CK(CR_name, TS_name, WD_name)
.
Misschien kan een bepaald vak maar voor één afdeling worden gegeven? Misschien kan een bepaald sectienummer alleen door een bepaalde instructeur worden gegeven? Door alle FD's (functionele afhankelijkheden) te identificeren, bepalen we alle CK's (kandidaatsleutels). Dan normalisatie gebruikt deze om mogelijk "betere" keuzes voor basistabellen voor te stellen.