sql >> Database teknologi >  >> RDS >> Sqlserver

Hvordan kan jeg lave en skematabel til instruktør ud fra oprettede tabeller

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.




  1. MySQL-Performance ved bestilling på beregnet kolonne

  2. PostgreSQL-ækvivalent til SQL Server GROUP BY WITH ROLLUP

  3. Uafhængigt af store og små bogstaver navn på tabeller og egenskaber i Entity Framework 7

  4. Grupperet forespørgsel for kun at finde én post (employee_id =1 eller null)