2014-10-17 4 views
-1

Я хочу создать таблицу SQL в моей базе данных, которая может содержать школьное расписание, но каждый способ, которым я пытался это сделать, не был оптимальным и в течение 1-2 изменений в расписании базы данных таблица стала слишком большой.Оптимизированный SQL для расписания

Это идет немного как это:

  Mo Tu Wed Thu Fri 
07:00 
08:00 
09:00 
10:00 
11:00 
12:00 
13:00 
14:00 
15:00 
16:00 

Это основное расположение графика и в таблице первые 2 колонки timetableid и ClassID. Мой первый подход состоял в том, чтобы иметь столбцы для каждого дня с классами в одном столбце, но это было немного ошибкой, мой следующий подход состоял в том, чтобы получить столбцы, такие как mo_7, mo_8, mo_9 и т. Д., Пока не достигнет fri_16, но это заняло слишком много пространство.

Итак, мой вопрос: какой оптимальный способ сохранить расписание в базе данных, в какой таблице.

Заранее спасибо.

+3

'id, timestamp, name_of_event' - это все, что вам нужно.Перестаньте думать о своих данных с точки зрения того, как он будет представлен пользователю - люди любят свои дисплеи в виде таблиц, но компьютеры не работают в этих терминах. –

+0

Я не уверен, что вы пытаетесь сделать с этим. Вы просто пытаетесь сохранить какой день недели, какое время и какой класс связаны друг с другом? –

+0

Ну, я привязываю, чтобы хранить идентификатор расписания, Идентификатор класса, который имеет это расписание, а затем день недели, курс и час, в котором проходит курс. Поэтому желательно все в одном ряду. –

ответ

0

Ваша проблема не в вашей базе данных, это потому, что вы пытаетесь использовать ее, как электронную таблицу.

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

т.д .:

стол 'классы':

  • ClassID.
  • описание
  • преподаватель
  • прочее.

стол 'сессий':

  • сессия ID
  • Classid
  • start_time
  • end_time
  • день
  • расположение

И тогда вы будете использовать выбор для запроса, например.

SELECT classID, start_time, day, location 
FROM sessions 
WHERE day like "Monday" 
ORDER BY start_time 

Какой из них дал вам ваш список на понедельник. Чтобы расширить его, вы можете добавить соединение с таблицей «classes».

SELECT classes.description, classes.teacher, sessions.start_time, sessions.day, sessions.location 
FROM sessions, classes 
JOIN ON classes.ClassID = sessions.ClassID 
WHERE day LIKE 'Monday' 
ORDER BY sessions.start_time 

Что-то вроде этого в любом случае (извинения, если синтаксис откусил, я проверю/изменить, если я могу).

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

Смежные вопросы