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 :: Проблема с архитекртурой БД.

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Саныч
Отправлено: 09 Января, 2012 - 13:38:00
Post Id



Участник


Покинул форум
Сообщений всего: 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. А вот как грамотно хранить историю всех этих переходов?

Ну и еще один вопрос. Студента могут отчислить. Т.е. группа остаеться и продолжает существовать, и даты начала/конца обучения записаны именно для группы, но студент то уже к ней не относиться. Как еще вот этот момент лучше обыграть?
Прикреплено изображение (Нажмите для увеличения)
1.png

(Отредактировано автором: 09 Января, 2012 - 13:41:24)



-----
Все возражают против того, что я гений, хотя никто еще так меня не назвал. - Орсон Уэллс
 
 Top
DlTA
Отправлено: 09 Января, 2012 - 14:45:08
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010  


Помог: 53 раз(а)




Саныч пишет:
Сами названия групп имеют следующий вид: [буква]{1,2}[№ курса]

насколько мне известно
каждая специальность имеет свой уникальный номер состоящий как минимум из 7 цифр
городить самопальный вариант курс не разумно
так как со временем некоторые специальности могут быть закрыты/добавлены/изменены/расширены, и в 2 буквы это точно не влезит

по поводу даты окончания, незнаю где как но насколько я помню были варианты магистров и специалистов одни учились 5 вторые 6 леет, причем и те и те делились уже после 4 лет

Саныч пишет:
[№ курса][№ группы]
а разве это валидное разделение?
имхо разделение шло по году поступления и группе (в нашем варианте это был не номер а буква)

в общем резюмирую:
валидней было бы создать чет типа:
для группы
специальность | год формирования группы | № группы
(Добавление)
а как быть тем кто и препод и студент?
это относится к аспирантам и магистрам
(Добавление)
кстати
а как насчет различных профоргов общественных работников, старост групп и т.д. и т.п.?
 
 Top
Саныч
Отправлено: 09 Января, 2012 - 15:13:50
Post Id



Участник


Покинул форум
Сообщений всего: 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:21:13)



-----
Все возражают против того, что я гений, хотя никто еще так меня не назвал. - Орсон Уэллс
 
 Top
Мелкий Супермодератор
Отправлено: 09 Января, 2012 - 15:27:10
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




DlTA пишет:
каждая специальность имеет свой уникальный номер состоящий как минимум из 7 цифр
городить самопальный вариант курс не разумно

Специальность - имеет. Номера и/или обозначения групп - внутреннее дело учреждения. И их менять не получится, т.к. сайту придётся встраиваться в учебный процесс, а не наоборот.
У нас были обозначения, типа М256 - математики, 2 курс, 5 группа, 6 год поступления (2006).

Но это - внешнее представление. Внутреннее - всё равно числовой AI должен быть. Потому что с названиями может стать всё, что угодно. У нас в один прекрасный год упразднили первую букву.

История переводов:
дата перевода, id_студента, старый id_группы, пр поля (номер приказа и прочие комментарии)

А вообще по структуре - лучше было бы поинтересоваться, как сейчас бумажный вариант выглядит. Может, каждый год выходит приказ о зачислении в новую группу.
И тогда табличку групп будет лучше сделать как:
id, учебный год, название группы
И переводить народ, зачисленный на будущий год вместе с выходом приказа соответствующего.


-----
PostgreSQL DBA
 
 Top
Саныч
Отправлено: 09 Января, 2012 - 16:36:39
Post Id



Участник


Покинул форум
Сообщений всего: 1365
Дата рег-ции: Июль 2010  
Откуда: Украина, Запорожье


Помог: 62 раз(а)




Мелкий пишет:
У нас были обозначения, типа М256 - математики, 2 курс, 5 группа, 6 год поступления (2006).
А когда десяток лет проходит, последняя цифра начинает повторяться?)

Мелкий пишет:
Но это - внешнее представление. Внутреннее - всё равно числовой AI должен быть. Потому что с названиями может стать всё, что угодно. У нас в один прекрасный год упразднили первую букву.
Он не просто должен, он и есть. И связываются таблицы между собой именно по id. Но вот для людей, которые будут работать с сайтом нужны не какие-то там цифры из БД, а именно нормальные (в их представлении) номера групп.

Мелкий пишет:
История переводов:
дата перевода, id_студента, старый id_группы, пр поля (номер приказа и прочие комментарии)
Ну я так и планировал сделать, но все равно спасибо!

Мелкий пишет:
А вообще по структуре - лучше было бы поинтересоваться, как сейчас бумажный вариант выглядит. Может, каждый год выходит приказ о зачислении в новую группу.
А что подразумевается под "бумажный вариант"? На самом деле каждый год входит приказ "О переводе на следующий курс", а тех кого не переводят - в приказ "Об отчислении".

Мелкий пишет:
И тогда табличку групп будет лучше сделать как:
id, учебный год, название группы
И переводить народ, зачисленный на будущий год вместе с выходом приказа соответствующего.
Ну если сделать в таком виде, то будут поля скажем: год начала, год конца и курс, верно? Или я не так опнял смысл?
Если так, то тогда кто-то должен каждый год править в админке курс. Я же думал сделать как-то более автоматизировано. Т.е. на первом курсе создали группу, закинули людей в нее и если нет никаких изменений, то мы к ней больше и не прикасаемся. А на страницах соответственно выводится "студент гр. А11", потом "А21" и т.д., а после окончания обучения, т.е. когда текущая дата станет больше конца обучения - "вупускник А41 2012" скажем. Ну вот как-то так.

(Отредактировано автором: 09 Января, 2012 - 16:38:02)



-----
Все возражают против того, что я гений, хотя никто еще так меня не назвал. - Орсон Уэллс
 
 Top
Мелкий Супермодератор
Отправлено: 09 Января, 2012 - 16:46:02
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Саныч пишет:
А когда десяток лет проходит, последняя цифра начинает повторяться?)

Ага.

Саныч пишет:
На самом деле каждый год входит приказ "О переводе на следующий курс", а ну тех кого не переводят - в приказ "Об отчислении".

А академка?

Саныч пишет:
Ну если сделать в таком виде, то будут поля скажем: год начала, год конца и курс, верно? Или я не так опнял смысл?

Фактически, можно оставить только год начала и курс. Год конца - следующий.

Саныч пишет:
Если так, то тогда кто-то должен каждый год править в админке курс.

Зачем кто-то? Это может делать сама админка. Например, кроном 31 сентября перевести всех в следующий год, кому не указано "отчислен".

Можно ещё ввести понятие потока - нечто статичное для как раз единожды набранной группы, включающий в себя по группе за каждый учебный год. Раз уж название группы меняется из года в год.


-----
PostgreSQL DBA
 
 Top
Саныч
Отправлено: 09 Января, 2012 - 16:58:23
Post Id



Участник


Покинул форум
Сообщений всего: 1365
Дата рег-ции: Июль 2010  
Откуда: Украина, Запорожье


Помог: 62 раз(а)




Мелкий пишет:
А академка?
Ну естественно, это не все документы. Там много чего выходит. Кто-то переводится на заочку, кто-то на др. специальность.

Мелкий пишет:
Зачем кто-то? Это может делать сама админка. Например, кроном 31 сентября перевести всех в следующий год, кому не указано "отчислен".
Можно, но тогда начиная с января по июль это действие нужно будет выполнять каждые 2 недели. Т.к. каждая группа (вернее специальность) имеет разную продолжительность учебы. А как только учеба закончилась, то они должны уже числиться как выпускники, а не студенты.

Мелкий пишет:
Можно ещё ввести понятие потока - нечто статичное для как раз единожды набранной группы, включающий в себя по группе за каждый учебный год. Раз уж название группы меняется из года в год.
А можно подробней вот про это?


-----
Все возражают против того, что я гений, хотя никто еще так меня не назвал. - Орсон Уэллс
 
 Top
Мелкий Супермодератор
Отправлено: 09 Января, 2012 - 17:06:13
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Саныч пишет:
А как только учеба закончилась, то они должны уже числиться как выпускники, а не студенты.

Это - индивидуальная характеристика студента. Можно и досрочно сдавать же. Вот у студента и должно быть поле "дата выпуска"


-----
PostgreSQL DBA
 
 Top
DlTA
Отправлено: 09 Января, 2012 - 18:02:12
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010  


Помог: 53 раз(а)




Саныч пишет:
Я же думал сделать как-то более автоматизировано. Т.е. на первом курсе создали группу, закинули людей в нее и если нет никаких изменений, то мы к ней больше и не прикасаемся. А на страницах соответственно выводится "студент гр. А11", потом "А21" и т.д., а после окончания обучения, т.е. когда текущая дата станет больше конца обучения - "вупускник А41 2012" скажем. Ну вот как-то так.
как же вашей администрации весело каждый год кучу бумаг переправлять

а воообще вопрос надо было начинать с того чтоб рассказать как оно там все на данный момент устроено
 
 Top
Саныч
Отправлено: 09 Января, 2012 - 18:31:16
Post Id



Участник


Покинул форум
Сообщений всего: 1365
Дата рег-ции: Июль 2010  
Откуда: Украина, Запорожье


Помог: 62 раз(а)




DlTA пишет:
как же вашей администрации весело каждый год кучу бумаг переправлять
Ну им ведь нужно делать видимость работы Подмигивание

DlTA пишет:
а воообще вопрос надо было начинать с того чтоб рассказать как оно там все на данный момент устроено
Я вроде бы уже и расказал. Всю эту хрень пишу я с нуля, т.е. свобода творчества полная Улыбка Вот я и думаю, как это все лучше сделать, чтобы и работало нормально и меня потом поменьше дергали из-за всякой фигни.


-----
Все возражают против того, что я гений, хотя никто еще так меня не назвал. - Орсон Уэллс
 
 Top
Саныч
Отправлено: 11 Января, 2012 - 01:31:23
Post Id



Участник


Покинул форум
Сообщений всего: 1365
Дата рег-ции: Июль 2010  
Откуда: Украина, Запорожье


Помог: 62 раз(а)




Закончил с базой. Остановился все таки на первом своем варианте, буду вычислять курс автоматом исходя из года поступления и даты конца обучения.


-----
Все возражают против того, что я гений, хотя никто еще так меня не назвал. - Орсон Уэллс
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« SQL и Архитектура БД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB