Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Базы Данных > подскажите как сделать структуру БД


Автор: Igor_CH 12.8.2006, 11:53
Подскажите пожалуйста структуру БД для расписания пар в институте.
5 пар в день
5 курсов
на курсе от 3 до 6 групп
недели делятся на красные и синие.

Как я понимаю 
1 таблица «Преподаватели»
Id  |  name
2 таблица «Предметы»
Id_pr  |  name_pr
3 таблица «Группы, курс»
Id_gr  |  gruppa  |  kurs

А вот как вносить предметы по часам, по красной или синей недели, какая должна быть таблица, как в нее заносить информацию?

Автор: kuhan 12.8.2006, 12:40
что-то типа этого

таблица "Расписание"
id | day | wek | time | predmet | kurs | gruppa

Автор: rMaveric 12.8.2006, 20:32
Правда я скорее добавил бы еще в таблицу столбец "количество часов"

Автор: Igor_CH 14.8.2006, 13:39
А как потом сделать выборку? Не совсем понятно как сортировать красную, синею неделю.
Наподобие:

1 пара
Лекция ….

2 пара
Кр. неделя Практика 1
Син. неделя Практика 2

3 пара
Лекция…

Автор: skyboy 14.8.2006, 14:09
Igor_CH, давай ты опишешь словами, что за информацию ты заносишь. А то по своему опыту знаю, что структура может быть как очень сложной, так и довольно простой, в зависимости от того, как это организовано в конкретно взятом ВУЗе. Так что рассказывай, что там за "сине-красная" неделя...

Автор: kuhan 14.8.2006, 14:35
Цитата(Igor_CH @  14.8.2006,  13:39 Найти цитируемый пост)
А как потом сделать выборку? Не совсем понятно как сортировать красную, синею неделю.Наподобие:1 параЛекция ….2 параКр. неделя Практика 1Син. неделя Практика 23 параЛекция…


Цитата(kuhan @  12.8.2006,  12:40 Найти цитируемый пост)
что-то типа этого
таблица "Расписание"id | day | wek | time | predmet | kurs | gruppa


Код

SELECT * FROM table WHERE kurs=2 AND gruppa=3 ORDER BY day, time, week


ещё глупые вопросы будут?
P.S. писал по памяти, так что могут быть ошибки в синтаксисе, но общая идея такая

Автор: Igor_CH 14.8.2006, 20:33
kuhan  да ни чего подобного не пойдет так. Так мы выведем за определеную неделю, а недели делятся (красная, синия, в определенные дни). Мне надо вывод все расписания, всех групп, вывод одной группы, вывод одной группы в определенный день (пн, вт, ср,..)
Примерно так:
Код

<table border="1" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%" id="AutoNumber1">
  <tr>
    <td width="33%">Время</td>
    <td width="33%">1 группа</td>
    <td width="34%">2 группа</td>
  </tr>
  <tr>
    <td width="33%" rowspan="2">8.00-9.30</td>
    <td width="33%" rowspan="2">Лекция (преподователь)</td>
    <td width="34%" bgcolor="#FF0000">Практика (проподаватель)</td>
  </tr>
  <tr>
    <td width="34%" bgcolor="#6699FF">Лекция (проподаватель)</td>
  </tr>
  <tr>
    <td width="33%" rowspan="2">9.45-11.15</td>
    <td width="33%" bordercolor="#FF0000" bgcolor="#FF0000">
    Практика (проподаватель)</td>
    <td width="34%" rowspan="2">Лекция (проподаватель)</td>
  </tr>
  <tr>
    <td width="33%" bgcolor="#6699FF">Другая практика (проподаватель)</td>
  </tr>
  <tr>
    <td width="33%">11.30-13.00</td>
    <td width="33%">Практика (проподаватель)</td>
    <td width="34%">Практика (проподаватель)</td>
  </tr>
  <tr>
    <td width="33%" rowspan="2">13.15-14.45</td>
    <td width="33%" rowspan="2">Лаборатории (проподаватель)</td>
    <td width="34%" bgcolor="#FF0000">Практика (проподаватель)</td>
  </tr>
  <tr>
    <td width="34%" bgcolor="#6699FF">Лекция (проподаватель)</td>
  </tr>
</table>


И чтоб вбивать в БД было как можно быстрее, т.е не поодельности красную или синию неделю (мне то ладно, но бывший декан с ссума сойдет пока все занесет smile))

Автор: ewolf 17.8.2006, 01:41
Желательно хранить преподавателей и предметы в отдельных таблицах, а в таблице рассписания ссылаться на их id, в форме добавления предмета сделать выпадающий список, позволяющий выбрать нужный предмет и преподавателя.

Вбивать рассписание все равно придется отдельно, так как каждый день может быть и красным и черным - на соответствующей неделе.

Таблицу рассписания, как писали выше можно сделать такой

id | lecturer_id | subject_id | week_type | day | time | group_id

Что касается удобства ввода, то можно сильно упростить ввод, если сделать с помощью JavaScript интерфейс, где в таблицу по дням будут выводится две недели (красная и черная), а в каждый день можно будет без перезагрузки страницы добавлять, удалять и править предметы и преподавателей.

Выводить рассписание тоже совсем не сложно, скажем для красной недели (1) рассписание группы с id 4

Код

SELECT * FROM timetable WHERE week = 1 and group_id = 4


Вывод одного дня обеих недель для всех групп

Код

SELECT * FROM timetable WHERE day = 2


ну и т.д.

PS. В качестве дополнительного задания со звездочкой, могу предложить написать скрипт, который, владея информацией о предметах, преподавателях и необходимых предметах в семестре для каждой группы, а также о желаемом совмещение/несовмещение разных преметов, составлял бы рассписание для всего института smile Разумеется, необходимо учесть занятость преподавателей и т.п. ;)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)