sql >> Database >  >> RDS >> Sqlserver

Hoe kan ik een roostertabel voor instructeur maken van gemaakte tabellen?

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.




  1. Java MYSQL/JDBC-query retourneert verouderde gegevens van verbinding in de cache

  2. CodeIgniter Afbeeldingsbestand kan niet worden geüpload

  3. Hoe auditing/versiebeheer van tabelaanpassingen op PostgreSQL te implementeren?

  4. Hoe rijen te selecteren op tijdsinterval in mysql?