2013-08-20 2 views
0

Я пытаюсь создать расписание для классов в MySQL. Столбцы - это дни недели, а строки - это временные интервалы (т. Е. 7:00 - 8:00). Я также пытаюсь иметь 30-минутные временные интервалы, и когда конкретный объект составляет 2 часа, он будет занимать 4 строки. Каждая ячейка содержит название курса и комнаты. Это часть небольшой программы, которую я пытаюсь разработать. Пока я знаю, какие данные вставлять, но я застрял на создании правильной схемы базы данных. На самом деле нужна логика о том, как это начать (например, какие типы данных я должен использовать). Благодаря!Схема и логика базы данных для этого

+2

таблицы базы данных не являются электронными таблицами. Ничего логически не отличается от того, что может быть сохранено в течение 7: 00-8: 00 в понедельник по сравнению с тем, что может быть сохранено в течение 7: 00-8: 00 в пятницу. Оба элемента должны храниться в одной колонке. Это будет указывать на один день хранения столбца и другие промежутки времени хранения и последний столбец, хранящий «то, что происходит в этот день в течение этого промежутка времени». –

+0

@Damien_The_Unbeliever Я уже вставлял все данные с таким дизайном базы данных, о котором вы говорили выше. Затем я пытаюсь отобразить данные в формате расписания с помощью HTML. – JKTA

ответ

1

Как этот звук:

CREATE TABLE TimeTable (
    ID int(8) NOT NULL AUTO_INCREMENT, 
    Subject varchar(32) NOT NULL, 
    Room varchar(8) NOT NULL, 
    StartTime datetime NOT NULL, 
    EndTime datetime NOT NULL, 
    Day enum('Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday') NOT NULL, 
    PRIMARY KEY (ID) 
); 

Вы только хранить данные о предметы.

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

Надеюсь, что это имеет смысл.

+2

У вас может быть составной первичный ключ вместо поля 'ID':' (StartTime, Day) '. –

+0

Да, ты прав. Я пытаюсь вывести расписание в HTML, которое, я думаю, достаточно гибко, чтобы обрабатывать такую ​​таблицу. Благодаря! – JKTA

+0

@Cobra_Fast nice +1, но в качестве примечания стороны этот PRIMARY KEY имеет размер 12 или 13 байт на запись. если вы используете механизм хранения InnoDB, он добавит данные с индексом (в данном случае PRIMARY KEY) в каждый вторичный индекс. Это также причина, по которой InnoDB быстрее ищет Вторичные индексы против MyISAM, но для этого нужно больше дискового пространства и большего пула буферов. –

0

Вы можете установить один столбец на день (вы можете указать дни от 1 до 7), один столбец для времени начала и один столбец для времени окончания. Таким образом ваши запросы станут более простыми.

Пример:

Day | Start | Finish 
----------------------------- 
1  8:30   12:00 
1  13:00  15:00 

Это также пригодится, если вы не хотите застрять 30 минут.

0

Столбцы дни недели и строки являются интервалы времени (т.е. 7:00 - 8:00)

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

Ваши колонки могут быть Day of Week, Lesson of Day, Duration, Subject, Room, Teacher, и так далее. В этом примере ваш первичный ключ будет (Day of Week, Lesson of Day).

Таким образом, если вы хотите расписание на определенный день, вы просто выберите все с помощью Day of Week = 2, чтобы получить расписание во вторник, например.

Каждая ячейка содержит название курса и комнаты.

Это также не соответствует нормам нормализации. Вы должны всегда иметь не более одного значения для каждой ячейки.

действительно нужна логика о том, как получить это началось (то есть какие типы данных следует использовать)

Используйте самый интуитивный тип. При сохранении номера выберите integer, при хранении нескольких символов выбрать varchar(n), при использовании много символов использовать text и так далее ...

+0

Спасибо за идею. То, что я подразумевал под столбцами «дни недели», было отображением, которое можно сделать с помощью HTML. Это не обязательно формат таблицы MySQL. Извините, если вопрос был запутан. – JKTA

0

Я бы создал его таким образом, чтобы он был нормализован и дает больше возможностей для расширения этого приложения. Таблицы (атрибуты):

  1. timeslots(id, start_time, end_time)
  2. subjects(id, name)
  3. timetable(timeslot_id, subject_id)
+0

Таблицы ссылок не нужны. Временных интервалов не будет достаточно, чтобы оправдать их использование. – ninty9notout

+1

Это может быть необязательно в этом случае использования, однако, когда используется более сложный случай использования, 1 таблица базы данных (стиль таблицы) может оказаться недостаточной. Это просто для будущего расширения, вероятно, это пока не самое лучшее. – Jianhong

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