Всем привет!
Насмотревшись уроки Елисеева Дмитрия, а конкретно по независимым модулям Стал задумываться как все построить?
Разрабатываю на YII. Изначально делил ВСЕ на модули
Модуль USER
Отвечает за авторизацию и хранение основных настроек: авторизация, восстановление пароля, регистрация...
Таблица user
Таблица profile
Модуль DISCIPLINE
Отвечает за хранение данных дисциплин
Модуль ORGANIZATION
Раздел организаций (школы танцев, коллективы, музыкальные школы...) отвечает за хранение информации об организациях, статистика организаций, Контакты, отзывы.
У людей организации может быть несколько ролей: директор, руководитель, тренер, хореограф.... танцоры, певец, спортсмен....
Модуль EVENT
Модуль мероприятий отвечает за работу с мероприятиями и календаря
Мероприятия могут организовывать организаторы и организации.
У мероприятия могут быть люди:
организатор, ведущий, счётчик, волонтёр, охранник
Таблица оргкомитет.
Модуль REGISTRATION
Отвечает за регистрацию участников на мероприятие, ведёт статистику, рейтинг, приём оплаты, подсчёт финансов, выгрузка различных отчетов и списков.
Таблицы:
Наставники: преподаватель, хореограф, тренер... (из модуля организации)
Участники: танцор, спортсмен, певец...(из модуля организации)
И теперь я думаю как спроектировать базу. Ведь профиль у всех одинаковый, но роли могут быть разные и отличаться несколько полей. При этом мне необходимо искать по всем людям, выводить их друзей, показывать кто онлайн, кто оффлайн, выводить общий рейтинг.
Немного подумав понял, что модулей слишком много. Много относится к одному модулю организации. Поэтому разумнее обьединить часть модулей в модуль организации.
Вот что получается, если объединить по организации:
МОДУЛЬ USER
user
- email
- password
- password_hash
- vizit_at
people
- id
- user_id
- last_name
- first_name
- middle_name
- birthday
- gender
friend
- from_id
- to_id
- status
message
- from_id
- to_id
- text
МОДУЛЬ ДИСЦИПЛИН
discipline (дисциплины)
- id
- name
МОДУЛЬ ОРГАНИЗАЦИИ
organization
- id
- name
- type (тип организации: Школа танцев, музыкальная школа, спортивная школа....)
- event_count
- people_count
org_rewiew (отзывы)
- id
- people_id (может быть Null)
- text
- active
org_people люди организации)
- org_id
- people_id
- role (директор, танцор, руководитель, тренер, певец спортсмен...)
org_people_director
- id
- people_id
- position (должность)
org_people_dancer
- id
- people_id
- nickname (ник)
- org_people_dancer_mentor (наставники танцора)
- dancer_id (id people)
- mentor_id (id people)
- role (тренер, руководитель, педагог)
/// и так по всем ролям, где нужны дополнительные поля
organization_event (мероприятия организации)
- id
- org_id (Организация)
- name
- date_from
- date_to
- type (фестиваль, мастер-класс, лагерь...)
org_evt_discipline (дисциплины для регистрации)
- event_id
- discipline_id
- active
org_evt_request (заявки)
- id
- event_id
- discipline_id
- reg_number
- cost
- cost_payd
- cost_discount_percent
- cost_dicount_amount
- participant_count
- mentor_count
- contact_email
- contact-phone
- status (ждёт оплаты, оплачено, выполнена, отменена, отменена участником)
org_evt_req_participant (участники, связь заявки и людей)
участниками могут быть все люди без привязки к организации
- request_id
- people_id
- role (танцор, певец, спортсмен)
org_evt_req_mentor (наставники, связь заявки и людей)
Наставниками могут быть все люди
- request_id
- people_id
- role (директор, руководитель, тренер, педагог)
Правильно ли я спроектировал таблицы? Модули не полноценные и имеют связи между собой. Но к независимости не стремлюсь. Можно сказать что это просто структура проекта, а не модули.
Основное это понять правильно ли спроектировал базу ? Какие подводные камни? Какие нюансы? Нормальные формы? Любая критика будет полезна!
Пример подобного проекта вот:
https://godance.tv
Но там нет функционала регистрации.