En tabel for denne rapport
Denne rapport virker kun, hvis 'Michel' identificerer én instruktør. Ellers har du enten brug for flere underrapporter for et vejkryds på hverdage, eller du har brug for flere rapporter.
Hver ikke-tom underrapport i en række og kolonne i din rapport fortæller dig:instructor Michel teaches course
C
in classroom
CR
to section
S
for department
D
.
Så rapporten fortæller dig generelt det samme som en tabel med rækkerne, hvor:instructor Michel teaches course
C
in classroom
CR
to section
S
for department
D
in timeslot
TS
on weekday
WD
. Læg mærke til, hvordan vi tager hver kolonne og række i en multidimensionel rapport som denne og tilføjer en kolonne for den til tabellen for hver multidimensionel underrapport, hvor de skærer hinanden.
Sandsynligvis vil du have en tabel, der fortæller dig det samme som alle rapporter for alle instruktører:instructor
I
teaches course
C
in classroom
CR
to section
S
for department
D
in timeslot
TS
on weekday
WD
. Læg mærke til, hvordan vi tager en parameter i titlen og tilføjer en kolonne for den til tabellen.
(Nu behøver vi ikke bekymre os om, hvorvidt Michel identificerer én instruktør.)
Et første design til denne rapport
Instruktørnavne er sandsynligvis ikke-unikke eller ikke-permanente. Så føj id'er til navne og rapporttitler. Du har sikkert flere data om instruktører, kurser og afdelinger. Så hav borde til dem. Tilsyneladende er et sektionsnummer kun unikt inden for et kursus.
-- 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
Dine designdetaljer vil afvige. Måske har kurser og/eller afdelinger unikke koder. Så kan du måske bruge dem som FK'er. Tilføj derefter en tabel. Tilsyneladende kan en sektion være aktiv, hvad end det betyder.
CK'er og normalisering
En given instruktør, tidsrum og hverdag kan kun have én ugentlig forelæsning. Men ingen mindre delmængde af dem gør. Så vi har Weekly_Lecture CK(I_id, TS_name, WD_name)
. Et givent kursus, afsnit, tidsrum &hverdag kan kun have én ugentlig forelæsning. Men ingen mindre delmængde af dem gør. Så vi har Weekly_Lecture CK(C_name, S_number, TS_name, WD_name)
. Et givent klasseværelse, tidsrum og hverdag kan kun have én ugentlig forelæsning. Men ingen mindre delmængde af dem gør. Så vi har Weekly_Lecture CK(CR_name, TS_name, WD_name)
.
Måske kan et givet kursus kun undervises for én afdeling? Måske kan et givet afsnitsnummer kun undervises af en given instruktør? Ved at identificere alle FD'er (funktionelle afhængigheder) bestemmer vi alle CK'er (kandidatnøgler). Derefter normalisering bruger disse til muligvis at foreslå "bedre" valg til basistabeller.