Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Comment puis-je créer un tableau d'horaire pour l'instructeur à partir des tableaux créés

Un tableau pour ce rapport

Ce rapport ne fonctionne que si 'Michel' identifie un instructeur. Sinon, soit vous avez besoin de plusieurs sous-rapports pour une intersection de plage horaire en semaine, soit vous avez besoin de plusieurs rapports.

Chaque sous-rapport non vide à une ligne et une colonne de votre rapport vous indique :instructor Michel teaches course C in classroom CR to section S for department D .

Ainsi, le rapport vous dit globalement la même chose qu'un tableau contenant les lignes où :instructor Michel teaches course C in classroom CR to section S for department D in timeslot TS on weekday WD . Remarquez comment nous prenons chaque colonne et chaque ligne d'un rapport multidimensionnel comme celui-ci et ajoutons une colonne au tableau pour chaque sous-rapport multidimensionnel où elles se croisent.

Vous voulez probablement un tableau vous indiquant la même chose que tous les rapports pour tous les instructeurs :instructor I teaches course C in classroom CR to section S for department D in timeslot TS on weekday WD . Remarquez comment nous prenons un paramètre dans le titre et lui ajoutons une colonne dans le tableau.

(Maintenant, nous n'avons plus à nous soucier de savoir si Michel identifie un instructeur.)

Un premier design pour ce rapport

Les noms des instructeurs sont probablement non uniques ou non permanents. Ajoutez donc des identifiants aux noms et aux titres des rapports. Vous avez probablement plus de données sur les instructeurs, les cours et les départements. Prévoyez donc des tables pour eux. Apparemment, un numéro de section n'est unique qu'au sein d'un cours.

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

Vos détails de conception seront différents. Peut-être que les cours et/ou les départements ont des codes uniques. Ensuite, vous pouvez les utiliser comme FK. Ajoutez ensuite un tableau. Apparemment, une section peut être active, quoi que cela signifie.

CK et normalisation

Un instructeur, un créneau horaire et un jour de semaine donnés ne peuvent avoir qu'une seule conférence hebdomadaire. Mais aucun sous-ensemble plus petit de ceux-ci ne le fait. Nous avons donc Weekly_Lecture CK(I_id, TS_name, WD_name) . Un cours, une section, un créneau horaire et un jour de semaine donnés ne peuvent avoir qu'une seule conférence hebdomadaire. Mais aucun sous-ensemble plus petit de ceux-ci ne le fait. Nous avons donc Weekly_Lecture CK(C_name, S_number, TS_name, WD_name) . Une salle de classe, un créneau horaire et un jour de semaine donnés ne peuvent avoir qu'un seul cours hebdomadaire. Mais aucun sous-ensemble plus petit de ceux-ci ne le fait. Nous avons donc Weekly_Lecture CK(CR_name, TS_name, WD_name) .

Peut-être qu'un cours donné ne peut être enseigné que pour un département? Peut-être qu'un numéro de section donné ne peut être enseigné que par un instructeur donné ? En identifiant tous les FD (dépendances fonctionnelles), nous déterminons tous les CK (clés candidates). Puis normalisation les utilise pour éventuellement suggérer de "meilleurs" choix pour les tables de base.