sql >> Base de Datos >  >> RDS >> Sqlserver

¿Cómo puedo hacer una tabla de programación para el instructor a partir de las tablas creadas?

Una tabla para este informe

Este informe solo funciona si 'Michel' identifica a un instructor. De lo contrario, necesita varios subinformes para la intersección de un intervalo de tiempo de un día de la semana o necesita varios informes.

Cada subinforme que no esté en blanco en una fila y columna de su informe le dice:instructor Michel teaches course C in classroom CR to section S for department D .

Entonces, el informe le dice lo mismo en general que una tabla que contiene las filas donde:instructor Michel teaches course C in classroom CR to section S for department D in timeslot TS on weekday WD . Observe cómo tomamos cada columna y fila de un informe multidimensional como este y agregamos una columna a la tabla para cada subinforme multidimensional donde se cruzan.

Probablemente desee una tabla que le diga lo mismo que todos los informes para todos los instructores:instructor I teaches course C in classroom CR to section S for department D in timeslot TS on weekday WD . Observe cómo tomamos un parámetro en el título y le agregamos una columna a la tabla.

(Ahora no tenemos que preocuparnos de si Michel identifica a un instructor).

Un primer diseño para este informe

Los nombres de los instructores probablemente no sean únicos o permanentes. Así que agregue ID a los nombres y títulos de informes. Probablemente tengas más datos sobre instructores, cursos y departamentos. Así que ten mesas para ellos. Aparentemente, un número de sección solo es único dentro de un curso.

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

Sus detalles de diseño serán diferentes. Tal vez los cursos y/o departamentos tengan códigos únicos. Entonces podría usarlos como FK. Luego agregue una tabla. Aparentemente, una sección puede estar activa, sea lo que sea que eso signifique.

CK y normalización

Un instructor, intervalo de tiempo y día de la semana determinados solo pueden tener una clase semanal. Pero ningún subconjunto más pequeño de ellos lo hace. Entonces tenemos Weekly_Lecture CK(I_id, TS_name, WD_name) . Un curso, sección, intervalo de tiempo y día de la semana determinados solo pueden tener una clase semanal. Pero ningún subconjunto más pequeño de ellos lo hace. Entonces tenemos Weekly_Lecture CK(C_name, S_number, TS_name, WD_name) . Un salón de clases, un intervalo de tiempo y un día de la semana determinados solo pueden tener una clase semanal. Pero ningún subconjunto más pequeño de ellos lo hace. Entonces tenemos Weekly_Lecture CK(CR_name, TS_name, WD_name) .

¿Quizás un curso determinado solo se puede impartir para un departamento? ¿Quizás un número de sección determinado solo puede ser enseñado por un instructor determinado? Al identificar todas las FD (dependencias funcionales), determinamos todas las CK (claves candidatas). Luego normalización los usa para sugerir posibles opciones "mejores" para las tablas base.