Как получить бесплатный лабораторный сеанс, используя эту схему базы данных? - PullRequest
0 голосов
/ 23 марта 2011

Привет всем, спасибо заранее за чтение!

Проблема состоит в том, чтобы попытаться найти время, когда инструктор свободен, лаборатория свободна, а студенты, зачисленные в класс, бесплатны.Есть только один преподаватель, около 6 лабораторных комнат и в среднем 20 студентов.

Лабораторные комнаты, преподаватели и студенты уже имеют время, в которое они заняты / заняты.Время делится на блоки по 1,5 часа, начиная с 8-930, 930-1100 и до 330-500.Есть 5 дней, чтобы рассмотреть, понедельник - пятница.Если нет ни одного блока, который мог бы вместить всех студентов, преподавателей и лаборатории, тогда класс можно разделить на сеансы.

Вот то, о чем я думал в качестве базы данных и входов / выходов:

База данных:

Table :  Lab
Fields : l_id, l_name, l_capacity, BM893, BM9311, BM11123, BM1232, BM233, BM335, BT893, BT9311, BT11123, BT1232, BT233, BT335, BW893, BW9311, BW11123, BW1232, BW233, BW335, BTH893, BTH9311, BTH11123, BTH1232, BTH233, BTH335, BF893, BF9311, BF11123, BF1232, BF233, BF335
(each field representing a block to time for a day… e.g.  BM893 is Block Monday 8 – 930, all fields are integers where 0 is free and 1 is occupied/busy)

Table: Student
Fields :s_id, s_name, BM893, BM9311, BM11123, BM1232, BM233, BM335, BT893, BT9311, BT11123, BT1232, BT233, BT335, BW893, BW9311, BW11123, BW1232, BW233, BW335, BTH893, BTH9311, BTH11123, BTH1232, BTH233, BTH335, BF893, BF9311, BF11123, BF1232, BF233, BF335
(each field representing a block to time for a day… e.g.  BM893 is Block Monday 8 – 930, all fields are integers where 0 is free and 1 is occupied/busy)

Table: Instructor
Fields : i_id, i_name, BM893, BM9311, BM11123, BM1232, BM233, BM335, BT893, BT9311, BT11123, BT1232, BT233, BT335, BW893, BW9311, BW11123, BW1232, BW233, BW335, BTH893, BTH9311, BTH11123, BTH1232, BTH233, BTH335, BF893, BF9311, BF11123, BF1232, BF233, BF335
(each field representing a block to time for a day… e.g.  BM893 is Block Monday 8 – 930, all fields are integers where 0 is free and 1 is occupied/busy)

Вход:

1 instructor (i_id)
All labs
N students (s_id, s_id…etc)

Выход:

Блок времени для сеанса (если более одного раздела, чем также s_id каждогостудент в каждой секции)

Может кто-нибудь помочь мне с алгоритмом?

Большое спасибо

1 Ответ

0 голосов
/ 23 марта 2011

У меня будет одна таблица для дня недели с 5 строками, M-F

другая таблица с указанием времени дня и времени начала, сколько бы у вас ни было (0800, 0930, ... 1530)

другая таблица (или запрос / представление) с декартовым произведением дней и времен

другой стол с лабораторными данными (здание, номер комнаты, что угодно)

другая таблица с данными об ученике (идентификатор студента, имя, фамилия)

другая таблица с данными инструктора (идентификатор инструктора, имя, отдел)

тогда у вас есть таблица занятости / занятости / недоступности, с itemType (лаборатория, студент или преподаватель), день занят (m-f) и время занято (0800-1530). вам не нужно хранить свободное время, потому что оно может быть получено из декартовой таблицы продуктов со всеми наборами дня и времени.

тогда все готово - у вас есть все данные, которые вам нужны, и вы можете увидеть, есть ли какие-либо строки в наборе всех дней и времен, у которых нет соответствующих строк в занятой таблице.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...