Удобнее все-таки выделять команды
См. схему базы данных 1.3.0_new
Концепция:
1.2.8 – Есть команды, которые привязаны к олимпиаде, к туру. Участники команды записываются как обычные данные о команде.
1.3.0 – Есть пользователь.
Он может привязывать себя к различным олимпиадам (создается запись user_team), подставляя себе определенные данные(ФИО, город)
В олимпиадах возможно создавать команды.
Отличия:
Наличие внешних ключей, каскадное удаление (раньше просто подразумевалась связь)
Строгое именование таблиц: в каждой таблице id, название таблицы в ед. числе, через подчерк
Изменение сущностей
Users -> User + User_olympiad
Forms -> Attribute + Olympiad_attribute
Olympiad поле teams_alllowed Командная / Личная?
Удаление объектов
Каскадное удаление возможно не везде, т.к. необходимо удалять связанные файлы
Создаем особый фильтр «Город», при выборе которого предлагается список городов, взятый из таблицы city
тип value varchar(255), поэтому храним id города в строковом виде.
Если города нет в таблице, то предварительно записываем набранный пользователем город в таблицу city, поле moderation = 0
0 – не обработан
1 – прошел модерацию
2 – игнорировать
Команда заводится на олимпиаду.
Пользователь является незарегистрированным на олимпиаду, пока у него не определена команда.
При регистрации на командную олимпиаду предлагается список зарегистрировавшихся команд.
Предлагается присоединиться к ним, или создать свою.
Присоединение: высылается уведомление уже включенным в группу участникам для подтверждения.
После подтверждения создается запись user_team для этого user и для этой team
пользователю высылается сообщение, что он был добавлен в такую-то олимпиаду в такую-то команду.
При первом открытии олимпиады, если есть незаполненные поля для участника, предлагаем заполнить их.
При создании своей группы необходимо заполнить поля для команды, если такие заданы.
На вкладке “Команда” есть возможность пригласить в команду других участников: Возможные ответы
1) пользователя не существует
2) уже состоит в другой команде на эту олимпиаду
3) приглашение выслано