Всем привет! Я уже задавал подобный вопрос. Мне тут хорошо помогли! Теперь у меня есть небольшие сложности по связям. Хотел бы снова попросить помощи специалистов!) Немного переделал архитектуру и названия таблиц из прошлого вопроса... Кратко о проекте: Необходимо реализовать Календарь мероприятий с регистрацией на них. Примерно 800 мероприятий в год. Около 1000 заявок на каждый период. В каждой заявке может быть от 1 до 100 участников. База mysql. Нюансы: - мероприятия могут быть разовые, а могут быть переодичные (ежедневные, ежегодные, ежемесячные...). Период указывается датой и временем. Дубликаты мероприятий запрещены. - На мероприятие есть несколько типов регистраций: соревнование, мастер-класс, батл. Типы регистрации закрепляются за периодом мероприятия. - В личном кабинете участников выводится история участия (название мероприятия, дата из периода, название дисциплины ещё будет какое место занял, но это пока не указано). В личном кабинете регистратора выводится список заявок. - Необходимо управлять дисциплинами мероприятия. На какие можно регистрироваться, а какие нет. Для этого отдельная таблица. Там же будет сразу считаться сколько участников в дисциплине. Разделы 1. Организации (organizations) 2. Люди организации (organization_persons) 3. Дисциплины (disciplines связующая таблица с отдельными таблицами ages, kidns, levels, nominations) 4. Города 5. Мероприятия (events) 6. Периоды мероприятия/даты проведения (event_periods) 7. Система регистраций - здесь создаем различные сервисы для регисрации. Регистрации могут быть: соревнования, батлы, мастер-классы ... (registration_services) 8. Регистрации соревнования (competention_registrations) 9. Дисциплины регистрации (competition_disciplines) ссылается на таблицу дисциплин и получение полного названия через метод getName() в коде 10. Цены на участие в дисциплине (comp_discipline_prices) У меня получилась такая структура: https://dbdiagram.io/d/5cfad2ca09a99609d6145a6a Вопросы: 1. Нужно ли в таблице competition_disciplines делать primary key и сурогатный id? 2. Я сделал две связи из таблицы competention_registrations на: - competition_disciplines на поле discipline_id (competition_disciplines.discipline_id) - disciplines на поле id (disciplines.id) Это сделано для того, чтобы можно было в коде обращаться к двум разным таблицам. Например, если мне нужно получить название дисциплины, то используем ->getDiscipline->getName(). Если мне нужно получить количество регистраций, то используем ->getCompDiscipline()->getRegistrationCount(). Что позволит уменьшить кол-во запросов. Используется ли такая практика в MYSQL с дублированиями связей? Или лучше оставить одну связь с таблицей competition_disciplines и через эту таблицу получать данные из таблицы disciplines? 3. В моей системе есть несколько типов регистрации, которые выбирает пользователь. Это соревнования (competitions), мастер-классы (masterclases), батлы (battles). В схеме базы реализована пока что только регистарция на соревнования (competitions). Для этих регистраций мне нужно будет реализовывать различные настройки: дата открытия, дата закрытия, базовая валюта, отправлять сообщения, регистрация оплачена и так далее. У меня возник вопрос как хранить такие настройки и как их связывать с проектом? Пока что я это сделал таблицей registration_services и связал её с периодами. Правильно ли я сделал? Либо лучше делать под каждый тип свои настройки competention_settings, masterclass_settings, etc... И как лучше связывать эти настройки? Если есть ещё какие-то неразумные вещи - говорите)) Я буду очень вам благодарен! Надеюсь, что после ваших ответов вопросов этого модуля больше не будет!)