2012-01-15 3 views
1

Я разрабатываю базу данных для системы управления школами и сталкиваюсь с парой проблем, и я подумал о том, чтобы бросить ее сюда, и кто-то может помочь. У меня есть таблица СТУДЕНТОВ, в которой хранятся детали учащихся и таблица CLASS, в которой содержится информация о классе. В приложении нужно знать, к какому классу должен быть продвинут студент, если он или она сдаст экзамен. Таким образом, таблица классов выглядит в моей конструкции:Управление школой Дизайн базы данных MySQL

+----------------------+ 
|id | name | parent_id | 
+----------------------+ 

где parent_id является идентификатором предыдущего класса. Теперь каждый класс имеет более одного потока (например, класс 1 может иметь 3 потока: форма 1A, форма 1B, форма 2B и т. Д.), И каждый поток имеет учащиеся говорят, что форма 1A имеет 40 студентов и т. Д. Таким образом, у меня есть таблица потоков с этим дизайном:

+---------------------------------------------+ 
| id | student_id | class_id | stream_name | 
+---------------------------------------------+ 

так для каждого потока 40 студентов у меня будет 40 строк в таблице потока и имя потока будет содержать имя типа A, B, C или независимо от пользователь хочет, чтобы он был назван. Это лучший дизайн в отношении моей проблемы? Будет ли этот дизайн влиять на производительность системы каким-либо образом? Каков наилучший подход к разработке баз данных с данной проблемой?

Таблица СТУДЕНТОВ содержит информацию об ученике, как их имя и информацию о родителях.

EDIT: Таблица потоков обновляется каждый раз, когда учащиеся регистрируются или когда новый учебный год зарегистрирован для экземпляра, если я был в потоке A формы 1, тогда все учащиеся этого класса (форма 1) следует повысить до класса 1, сохранив свой поток, поэтому, если бы я был в форме 1А, то в следующем учебном году я буду в форме 2А. Существует таблица ACADEMIC_YEAR, в которой хранится информация об учебном году, например, когда она начинается и заканчивается, и вся информация, также есть таблица EXAM_RESULTS, в которой хранятся результаты для каждого учащегося в конкретном потоке в учебном году. Для записей мне нужно будет знать все течения и классы, которые изучил ученик.

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

+0

Насколько я понимаю, у вас есть хотя бы СТУДЕНТЫ, КЛАСС и СТРЕЛЫ. Но для того, чтобы оценить, повлияет ли этот дизайн на производительность, нам понадобится дополнительная информация. Как обновляется таблица STREAMS? Какие другие таблицы задействованы? Как часто все меняется? Я не думаю, что кто-нибудь может рассказать вам, какой дизайн лучше всего подходит для ограниченной информации. – MJB

+0

thanx для вашего ответа @MJB, я отредактировал свой вопрос, надеюсь, теперь его ясность. –

ответ

0

Ваш подход находится на правильном пути. Я хотел бы порекомендовать следующее:

a) Добавить дату начала и дату окончания в таблицу потоков, чтобы вы могли рассчитать, в какой период учащийся находился в потоке (сможет обрабатывать учащихся, которые начинают в середине пути год или которые уходят до конца года). Это также может помочь учащимся, которые повторяют, потому что они будут в одном классе на новый год

b) В таблице результатов экзамена добавьте поля stream_id, class_id, student_id, чтобы вы могли связать экзамен с классом, учащимся и поток. Кажется, что дублирование имеет stream_id в дополнение к student_id и class_id, но по опыту ускоряет запросы, когда вам не нужно присоединяться к потоку, чтобы узнать, к какому классу и учащемуся относятся экзамены.

+0

thanx @ssmusoke, после того как я боролся за то, что я решил сделать. Закладки для вашего ответа –

+0

Добро пожаловать –

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