Eine Tabelle für diesen Bericht
Dieser Bericht funktioniert nur, wenn „Michel“ einen Lehrer identifiziert. Andernfalls benötigen Sie entweder mehrere Unterberichte für eine Wochentag-Zeitfenster-Schnittmenge oder Sie benötigen mehrere Berichte.
Jeder nicht leere Unterbericht in einer Zeile und Spalte Ihres Berichts sagt Ihnen:instructor Michel teaches course
C
in classroom
CR
to section
S
for department
D
.
Der Bericht sagt Ihnen also insgesamt dasselbe wie eine Tabelle mit den Zeilen, in denen:instructor Michel teaches course
C
in classroom
CR
to section
S
for department
D
in timeslot
TS
on weekday
WD
. Beachten Sie, wie wir jede Spalte und Zeile eines mehrdimensionalen Berichts wie diesen nehmen und der Tabelle für jeden mehrdimensionalen Unterbericht dort, wo sie sich überschneiden, eine Spalte dafür hinzufügen.
Wahrscheinlich möchten Sie eine Tabelle, die Ihnen dasselbe sagt wie alle Berichte für alle Dozenten:instructor
I
teaches course
C
in classroom
CR
to section
S
for department
D
in timeslot
TS
on weekday
WD
. Beachten Sie, wie wir einen Parameter im Titel nehmen und der Tabelle eine Spalte dafür hinzufügen.
(Jetzt brauchen wir uns keine Gedanken mehr darüber zu machen, ob Michel einen Ausbilder identifiziert.)
Ein erster Entwurf für diesen Bericht
Lehrernamen sind wahrscheinlich nicht eindeutig oder nicht dauerhaft. Fügen Sie also IDs zu Namen und Berichtstiteln hinzu. Wahrscheinlich haben Sie weitere Daten zu Dozenten, Kursen und Fachbereichen. Also haben Sie Tische für sie. Anscheinend ist eine Sektionsnummer nur innerhalb eines Kurses eindeutig.
-- 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
Ihre Designdetails werden abweichen. Möglicherweise haben Kurse und/oder Abteilungen eindeutige Codes. Dann könnten Sie sie als FKs verwenden. Fügen Sie dann eine Tabelle hinzu. Anscheinend kann ein Abschnitt aktiv sein, was auch immer das bedeutet.
CKs und Normalisierung
Ein bestimmter Lehrer, Zeitfenster und Wochentag kann nur eine wöchentliche Vorlesung haben. Aber keine kleinere Teilmenge davon tut es. Wir haben also Weekly_Lecture CK(I_id, TS_name, WD_name)
. Ein bestimmter Kurs, Abschnitt, Zeitfenster und Wochentag kann nur eine wöchentliche Vorlesung haben. Aber keine kleinere Teilmenge davon tut es. Wir haben also Weekly_Lecture CK(C_name, S_number, TS_name, WD_name)
. Ein gegebenes Klassenzimmer, Zeitfenster und Wochentag kann nur eine wöchentliche Vorlesung haben. Aber keine kleinere Teilmenge davon tut es. Wir haben also Weekly_Lecture CK(CR_name, TS_name, WD_name)
.
Vielleicht kann ein bestimmter Kurs nur für einen Fachbereich unterrichtet werden? Vielleicht kann eine bestimmte Abschnittsnummer nur von einem bestimmten Lehrer unterrichtet werden? Indem wir alle FDs (funktionale Abhängigkeiten) identifizieren, bestimmen wir alle CKs (Kandidatenschlüssel). Dann Normalisierung verwendet diese, um möglicherweise "bessere" Auswahlmöglichkeiten für Basistabellen vorzuschlagen.