sql >> Databáze >  >> RDS >> Sqlserver

Jak mohu vytvořit rozvrhovou tabulku pro instruktora z vytvořených tabulek

Tabulka pro tento přehled

Tato zpráva funguje pouze v případě, že 'Michel' identifikuje jednoho instruktora. V opačném případě budete potřebovat více dílčích přehledů pro jeden průnik mezi pracovní dny a časové úseky, nebo potřebujete více přehledů.

Každý neprázdný dílčí přehled na řádku a sloupci vašeho přehledu vám říká:instructor Michel teaches course C in classroom CR to section S for department D .

Zpráva vám tedy říká celkově totéž jako tabulka obsahující řádky, kde:instructor Michel teaches course C in classroom CR to section S for department D in timeslot TS on weekday WD . Všimněte si, jak takto vezmeme každý sloupec a řádek vícerozměrného přehledu a přidáme pro něj sloupec do tabulky pro každý vícerozměrný dílčí přehled, kde se protínají.

Pravděpodobně budete chtít tabulku, která vám řekne to samé, co všechny zprávy pro všechny instruktory:instructor I teaches course C in classroom CR to section S for department D in timeslot TS on weekday WD . Všimněte si, jak vezmeme parametr v nadpisu a přidáme pro něj sloupec do tabulky.

(Nyní se nemusíme starat o to, zda Michel identifikuje jednoho instruktora.)

První návrh tohoto přehledu

Jména instruktorů jsou pravděpodobně nejedinečná nebo nestálá. Takže ke jménům a názvům sestav přidejte ID. Pravděpodobně máte více údajů o instruktorech, kurzech a odděleních. Mějte pro ně stoly. Číslo sekce je zjevně jedinečné pouze v rámci kurzu.

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

Detaily vašeho designu se budou lišit. Možná mají kurzy a/nebo oddělení jedinečné kódy. Pak je můžete použít jako FK. Poté přidejte tabulku. Sekce může být zřejmě aktivní, ať už to znamená cokoli.

CK a normalizace

Daný instruktor, časový úsek a den v týdnu může mít pouze jednu týdenní přednášku. Ale žádná menší podmnožina z nich to nedělá. Takže máme Weekly_Lecture CK(I_id, TS_name, WD_name) . Daný kurz, sekce, časový úsek a den v týdnu může mít pouze jednu týdenní přednášku. Ale žádná menší podmnožina z nich to nedělá. Takže máme Weekly_Lecture CK(C_name, S_number, TS_name, WD_name) . Daná učebna, časový úsek a pracovní den mohou mít pouze jednu týdenní přednášku. Ale žádná menší podskupina z nich to nedělá. Takže máme Weekly_Lecture CK(CR_name, TS_name, WD_name) .

Je možné, že daný předmět lze vyučovat pouze pro jedno oddělení? Možná, že dané číslo oddílu může učit pouze daný instruktor? Identifikací všech FD (funkčních závislostí) určíme všechny CK (kandidátské klíče). Poté normalizace používá je k případnému navrhování "lepších" voleb pro základní tabulky.




  1. Atomicita více poddotazů MySQL v dotazu INSERT/UPDATE?

  2. Nelze použít UPDATE s klauzulí OUTPUT, když je na stole spouštěč

  3. Připojení k Sage z Javy

  4. 5 způsobů aktualizace dat pomocí dílčího dotazu v Oracle SQL