Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Проблема с архитекртурой БД.
Покинул форум
Сообщений всего: 1365
Дата рег-ции: Июль 2010 Откуда: Украина, Запорожье
Помог: 62 раз(а)
Люди, нужна ваша помощь в плане совета, как лучше сделать.
Значит есть сайт ВУЗа, вернее будет. Начал продумывать БД, есть некоторые сомнения. Прикрепил скрин планируемых таблиц.
Главная таблица - users, содержит всех пользователей сайта.
user_groups - группы пользователей. На данный момент планируются следующие группы: админ, препод, студент, гость и аноним. В этой таблице будут права доступа к сайту.
Но для группы студенты должно быть еще деление по группам, как в ВУЗе.
Сами названия групп имеют следующий вид: [буква]{1,2}[№ курса][№ группы]. К примеру: А21, БМ42 и т.д. Буква обозначает специальность, первая цифра - курс, вторая цифра - номер группы.
В БД для этих целей есть таблица studen_groups, которая содержит дату начала и конца обучения, номер группы (вторая цифра) и ключ с таблицы specialty_groups.
Таблица specialty_groups - таблица специальностей, это как раз вот те буквы из названия группы и ссылка на таблицу student_specialtie (специальности ВУЗа).
Собственно проблема в определении текущего курса. Планирую определять его из года начала и конца обучения, собственно в этом нет никакой проблемы, но это каждый раз нужно будет выщитывать. Еще думал сделать поле, которое будет полностью хранить название группы, но тогда нужно постоянно проверять, закончился ли учебный год и если закончился то менять курс. Вобщем как это лучше организовать?
На группы также будет навешиваться расписание. Ну тут все просто, оно будет привязываться к id из таблицы studen_groups.
Также нужно как-то хранить "историю" студента. Что я имею ввиду. Ну предположим, студент поступил на первый курс в группу А11. На втором курсе взял и перевелся на другую специальность, в группу Б21. А на третьем курсе эту группу расформировали и кинули студента в группу Б32. Поменять группу конечно просто, переписать id группы в таблице users. А вот как грамотно хранить историю всех этих переходов?
Ну и еще один вопрос. Студента могут отчислить. Т.е. группа остаеться и продолжает существовать, и даты начала/конца обучения записаны именно для группы, но студент то уже к ней не относиться. Как еще вот этот момент лучше обыграть? Прикреплено изображение (Нажмите для увеличения)
----- Все возражают против того, что я гений, хотя никто еще так меня не назвал. - Орсон Уэллс
DlTA
Отправлено: 09 Января, 2012 - 14:45:08
Постоянный участник
Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010
Помог: 53 раз(а)
Саныч пишет:
Сами названия групп имеют следующий вид: [буква]{1,2}[№ курса]
насколько мне известно
каждая специальность имеет свой уникальный номер состоящий как минимум из 7 цифр
городить самопальный вариант курс не разумно
так как со временем некоторые специальности могут быть закрыты/добавлены/изменены/расширены, и в 2 буквы это точно не влезит
по поводу даты окончания, незнаю где как но насколько я помню были варианты магистров и специалистов одни учились 5 вторые 6 леет, причем и те и те делились уже после 4 лет
Саныч пишет:
[№ курса][№ группы]
а разве это валидное разделение?
имхо разделение шло по году поступления и группе (в нашем варианте это был не номер а буква)
в общем резюмирую:
валидней было бы создать чет типа:
для группы
специальность | год формирования группы | № группы (Добавление)
а как быть тем кто и препод и студент?
это относится к аспирантам и магистрам (Добавление)
кстати
а как насчет различных профоргов общественных работников, старост групп и т.д. и т.п.?
Саныч
Отправлено: 09 Января, 2012 - 15:13:50
Участник
Покинул форум
Сообщений всего: 1365
Дата рег-ции: Июль 2010 Откуда: Украина, Запорожье
Помог: 62 раз(а)
DlTA пишет:
насколько мне известно
каждая специальность имеет свой уникальный номер состоящий как минимум из 7 цифр
городить самопальный вариант курс не разумно
так как со временем некоторые специальности могут быть закрыты/добавлены/изменены/расширены, и в 2 буквы это точно не влезит
Это да, но это именно специальность. В моем случае их всего 4 на данный момент. Для них есть специально таблица student_specialties.
Но в каждой специальности есть несколько, так сказать, типов групп. Обозначаются они как раз вот теми одной-двумя буквами из названия группы. Таких "типов" на данный момент 12. Для них таблица - specialty_groups, в которой есть указатель на специальность из student_specialties.
А вот уже в каждом из этих "типов" есть несколько групп на каждом курсе (не больше 3 обычно). Вот эти номера в таблице student_groups в ячейке group хранятся.
Сами номера групп строяться по принципу ["тип группы" одна-две буквы][№ текущего курса, цифра][№ группы, цифра]. Т.е. если человек поступил в группу А11, на втором курсе она станет А21, на третьем - А31 и так далее. По-этому тут я ничего не горожу. Они так на самом деле устроены. И естественно мне нужно выводить номера групп на страницах. Сам вопрос был в определении текущего курса. Как я думал его определять, написано в первом посте. Вопрос в том как грамотно это сделать?
DlTA пишет:
по поводу даты окончания, незнаю где как но насколько я помню были варианты магистров и специалистов одни учились 5 вторые 6 леет, причем и те и те делились уже после 4 лет
Ну тут полегче, это колледж, по-этому у всех 4 года. Но это только условно 4, на самом же деле у кого-то 3 и 6, у кого-то 3 и 8, 3 и 10. Собственно для этого я и храню дату начала и конца обучения. Ну начало понятно у всех одно будет - 1 сентября, по-этому можно хранить только год. А вот конец нужно с точностью до дня.
DlTA пишет:
а как быть тем кто и препод и студент?
это относится к аспирантам и магистрам
А таких по просту нет, потому что колледж.
DlTA пишет:
а как насчет различных профоргов общественных работников, старост групп и т.д. и т.п.?
Ну с этим как раз все просто. Пока планируются только старосты и руководители группы. Делаем поля в таблице student_groups, ну скажем elder и captain в которые пишем id из таблицы users
Ну вобщем вопросы все теже. Как лучше сделать. Т.к. щас начал еще продумывать документы, которые тоже привязываются к специальностям, курсам, группам. Плюс ко всему еще предметы, опять таки курсы, группы. Плюс преподователи, плюс расписание пар. Вобщем вся эта схема начинает сильно усложняться, что мне не нравится.
----- Все возражают против того, что я гений, хотя никто еще так меня не назвал. - Орсон Уэллс
Мелкий
Отправлено: 09 Января, 2012 - 15:27:10
Активный участник
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
Помог: 618 раз(а)
DlTA пишет:
каждая специальность имеет свой уникальный номер состоящий как минимум из 7 цифр
городить самопальный вариант курс не разумно
Специальность - имеет. Номера и/или обозначения групп - внутреннее дело учреждения. И их менять не получится, т.к. сайту придётся встраиваться в учебный процесс, а не наоборот.
У нас были обозначения, типа М256 - математики, 2 курс, 5 группа, 6 год поступления (2006).
Но это - внешнее представление. Внутреннее - всё равно числовой AI должен быть. Потому что с названиями может стать всё, что угодно. У нас в один прекрасный год упразднили первую букву.
История переводов:
дата перевода, id_студента, старый id_группы, пр поля (номер приказа и прочие комментарии)
А вообще по структуре - лучше было бы поинтересоваться, как сейчас бумажный вариант выглядит. Может, каждый год выходит приказ о зачислении в новую группу.
И тогда табличку групп будет лучше сделать как:
id, учебный год, название группы
И переводить народ, зачисленный на будущий год вместе с выходом приказа соответствующего.
----- PostgreSQL DBA
Саныч
Отправлено: 09 Января, 2012 - 16:36:39
Участник
Покинул форум
Сообщений всего: 1365
Дата рег-ции: Июль 2010 Откуда: Украина, Запорожье
Помог: 62 раз(а)
Мелкий пишет:
У нас были обозначения, типа М256 - математики, 2 курс, 5 группа, 6 год поступления (2006).
А когда десяток лет проходит, последняя цифра начинает повторяться?)
Мелкий пишет:
Но это - внешнее представление. Внутреннее - всё равно числовой AI должен быть. Потому что с названиями может стать всё, что угодно. У нас в один прекрасный год упразднили первую букву.
Он не просто должен, он и есть. И связываются таблицы между собой именно по id. Но вот для людей, которые будут работать с сайтом нужны не какие-то там цифры из БД, а именно нормальные (в их представлении) номера групп.
Мелкий пишет:
История переводов:
дата перевода, id_студента, старый id_группы, пр поля (номер приказа и прочие комментарии)
Ну я так и планировал сделать, но все равно спасибо!
Мелкий пишет:
А вообще по структуре - лучше было бы поинтересоваться, как сейчас бумажный вариант выглядит. Может, каждый год выходит приказ о зачислении в новую группу.
А что подразумевается под "бумажный вариант"? На самом деле каждый год входит приказ "О переводе на следующий курс", а тех кого не переводят - в приказ "Об отчислении".
Мелкий пишет:
И тогда табличку групп будет лучше сделать как:
id, учебный год, название группы
И переводить народ, зачисленный на будущий год вместе с выходом приказа соответствующего.
Ну если сделать в таком виде, то будут поля скажем: год начала, год конца и курс, верно? Или я не так опнял смысл?
Если так, то тогда кто-то должен каждый год править в админке курс. Я же думал сделать как-то более автоматизировано. Т.е. на первом курсе создали группу, закинули людей в нее и если нет никаких изменений, то мы к ней больше и не прикасаемся. А на страницах соответственно выводится "студент гр. А11", потом "А21" и т.д., а после окончания обучения, т.е. когда текущая дата станет больше конца обучения - "вупускник А41 2012" скажем. Ну вот как-то так.
----- Все возражают против того, что я гений, хотя никто еще так меня не назвал. - Орсон Уэллс
Мелкий
Отправлено: 09 Января, 2012 - 16:46:02
Активный участник
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
Помог: 618 раз(а)
Саныч пишет:
А когда десяток лет проходит, последняя цифра начинает повторяться?)
Ага.
Саныч пишет:
На самом деле каждый год входит приказ "О переводе на следующий курс", а ну тех кого не переводят - в приказ "Об отчислении".
А академка?
Саныч пишет:
Ну если сделать в таком виде, то будут поля скажем: год начала, год конца и курс, верно? Или я не так опнял смысл?
Фактически, можно оставить только год начала и курс. Год конца - следующий.
Саныч пишет:
Если так, то тогда кто-то должен каждый год править в админке курс.
Зачем кто-то? Это может делать сама админка. Например, кроном 31 сентября перевести всех в следующий год, кому не указано "отчислен".
Можно ещё ввести понятие потока - нечто статичное для как раз единожды набранной группы, включающий в себя по группе за каждый учебный год. Раз уж название группы меняется из года в год.
----- PostgreSQL DBA
Саныч
Отправлено: 09 Января, 2012 - 16:58:23
Участник
Покинул форум
Сообщений всего: 1365
Дата рег-ции: Июль 2010 Откуда: Украина, Запорожье
Помог: 62 раз(а)
Мелкий пишет:
А академка?
Ну естественно, это не все документы. Там много чего выходит. Кто-то переводится на заочку, кто-то на др. специальность.
Мелкий пишет:
Зачем кто-то? Это может делать сама админка. Например, кроном 31 сентября перевести всех в следующий год, кому не указано "отчислен".
Можно, но тогда начиная с января по июль это действие нужно будет выполнять каждые 2 недели. Т.к. каждая группа (вернее специальность) имеет разную продолжительность учебы. А как только учеба закончилась, то они должны уже числиться как выпускники, а не студенты.
Мелкий пишет:
Можно ещё ввести понятие потока - нечто статичное для как раз единожды набранной группы, включающий в себя по группе за каждый учебный год. Раз уж название группы меняется из года в год.
А можно подробней вот про это?
----- Все возражают против того, что я гений, хотя никто еще так меня не назвал. - Орсон Уэллс
Мелкий
Отправлено: 09 Января, 2012 - 17:06:13
Активный участник
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
Помог: 618 раз(а)
Саныч пишет:
А как только учеба закончилась, то они должны уже числиться как выпускники, а не студенты.
Это - индивидуальная характеристика студента. Можно и досрочно сдавать же. Вот у студента и должно быть поле "дата выпуска"
----- PostgreSQL DBA
DlTA
Отправлено: 09 Января, 2012 - 18:02:12
Постоянный участник
Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010
Помог: 53 раз(а)
Саныч пишет:
Я же думал сделать как-то более автоматизировано. Т.е. на первом курсе создали группу, закинули людей в нее и если нет никаких изменений, то мы к ней больше и не прикасаемся. А на страницах соответственно выводится "студент гр. А11", потом "А21" и т.д., а после окончания обучения, т.е. когда текущая дата станет больше конца обучения - "вупускник А41 2012" скажем. Ну вот как-то так.
как же вашей администрации весело каждый год кучу бумаг переправлять
а воообще вопрос надо было начинать с того чтоб рассказать как оно там все на данный момент устроено
Саныч
Отправлено: 09 Января, 2012 - 18:31:16
Участник
Покинул форум
Сообщений всего: 1365
Дата рег-ции: Июль 2010 Откуда: Украина, Запорожье
Помог: 62 раз(а)
DlTA пишет:
как же вашей администрации весело каждый год кучу бумаг переправлять
Ну им ведь нужно делать видимость работы
DlTA пишет:
а воообще вопрос надо было начинать с того чтоб рассказать как оно там все на данный момент устроено
Я вроде бы уже и расказал. Всю эту хрень пишу я с нуля, т.е. свобода творчества полная Вот я и думаю, как это все лучше сделать, чтобы и работало нормально и меня потом поменьше дергали из-за всякой фигни.
----- Все возражают против того, что я гений, хотя никто еще так меня не назвал. - Орсон Уэллс
Саныч
Отправлено: 11 Января, 2012 - 01:31:23
Участник
Покинул форум
Сообщений всего: 1365
Дата рег-ции: Июль 2010 Откуда: Украина, Запорожье
Помог: 62 раз(а)
Закончил с базой. Остановился все таки на первом своем варианте, буду вычислять курс автоматом исходя из года поступления и даты конца обучения.
----- Все возражают против того, что я гений, хотя никто еще так меня не назвал. - Орсон Уэллс
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.