Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jak z utworzonych tabel mogę zrobić tabelę harmonogramu dla instruktora?

Tabela dla tego raportu

Ten raport działa tylko wtedy, gdy „Michel” identyfikuje jednego instruktora. W przeciwnym razie potrzebujesz wielu raportów podrzędnych dla jednego przecięcia przedziału czasu w dni powszednie lub wielu raportów.

Każdy niepusty raport podrzędny w wierszu i kolumnie raportu zawiera informację:instructor Michel teaches course C in classroom CR to section S for department D .

Raport mówi więc ogólnie to samo, co tabela zawierająca wiersze, w których:instructor Michel teaches course C in classroom CR to section S for department D in timeslot TS on weekday WD . Zwróć uwagę, jak bierzemy każdą kolumnę i wiersz wielowymiarowego raportu takiego jak ten i dodajemy dla nich kolumnę do tabeli dla każdego wielowymiarowego podraportu, w którym się przecinają.

Prawdopodobnie chcesz, aby tabela zawierała to samo, co wszystkie raporty dla wszystkich instruktorów:instructor I teaches course C in classroom CR to section S for department D in timeslot TS on weekday WD . Zwróć uwagę, jak bierzemy parametr w tytule i dodajemy dla niego kolumnę do tabeli.

(Teraz nie musimy się martwić, czy Michel zidentyfikuje jednego instruktora.)

Pierwszy projekt tego raportu

Nazwiska instruktorów są prawdopodobnie nieunikalne lub nietrwałe. Dodaj więc identyfikatory do nazw i tytułów raportów. Prawdopodobnie masz więcej danych o instruktorach, kursach i działach. Więc miej dla nich stoły. Najwyraźniej numer sekcji jest unikalny tylko w ramach kursu.

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

Twoje szczegóły projektu będą się różnić. Może kursy i/lub wydziały mają unikalne kody. Wtedy możesz ich użyć jako FK. Następnie dodaj tabelę. Najwyraźniej sekcja może być aktywna, cokolwiek to znaczy.

CK i normalizacja

Dany instruktor, przedział czasowy i dzień tygodnia mogą mieć tylko jeden wykład w tygodniu. Ale nie mniejszy ich podzbiór. Mamy więc Weekly_Lecture CK(I_id, TS_name, WD_name) . Dany kurs, sekcja, przedział czasowy i dzień tygodnia mogą mieć tylko jeden wykład w tygodniu. Ale nie mniejszy ich podzbiór. Mamy więc Weekly_Lecture CK(C_name, S_number, TS_name, WD_name) . Dana klasa, przedział czasowy i dzień tygodnia mogą mieć tylko jeden wykład w tygodniu. Ale nie mniejszy ich podzbiór. Mamy więc Weekly_Lecture CK(CR_name, TS_name, WD_name) .

Może dany kurs może być prowadzony tylko na jednym wydziale? Może dany numer sekcji może prowadzić tylko dany instruktor? Identyfikując wszystkie FD (zależności funkcjonalne) określamy wszystkie CK (klucze kandydatów). Następnie normalizacja używa ich do sugerowania "lepszych" wyborów dla tabel podstawowych.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak uniknąć zduplikowanych wartości dla INSERT w SQL?

  2. Jak przechwytywać i analizować zdarzenia SQL Server

  3. T-SQL Usuwa wszystkie wiersze z tabeli, gdy podzapytanie jest zniekształcone

  4. Java SQL Server 2012 Nie można otworzyć błędu bazy danych

  5. Konwertuj datę na inną strefę czasową w SQL Server