Фон
Я студент первого курса CS, и я работаю неполный рабочий день для моего отца малого бизнеса. У меня нет никакого опыта в разработке приложений реального мира. Я написал сценарии на Python, некоторые курсовые работы на C, но ничего подобного.
У моего отца небольшой учебный бизнес, и в настоящее время все занятия планируются, записываются и отслеживаются с помощью внешнего веб-приложения. Существует функция экспорта/"отчетов", но она очень общая, и нам нужны конкретные отчеты. У нас нет доступа к фактической базе данных для выполнения запросов. Меня попросили настроить систему пользовательских отчетов.
Моя идея состоит в том, чтобы создать общий экспорт CSV и импортировать их (возможно, с помощью Python) в базу данных MySQL, размещаемую в офисе каждую ночь, откуда я могу выполнять конкретные запросы, которые необходимы. У меня нет опыта работы с базами данных, но я понимаю основы. Я прочитал немного о создании базы данных и нормальных формах.
Мы можем начать иметь международных клиентов в ближайшее время, поэтому я хочу, чтобы база данных не взорвалась, если/когда это произойдет. У нас также есть несколько крупных корпораций в качестве клиентов с различными подразделениями (например, материнская компания ACME, отдел здравоохранения ACME, отдел ухода за телом ACME)
Схема, которую я придумал, следующая:
- С точки зрения клиента:
- Клиенты - это главная таблица
- Клиенты связаны с отделом, в котором они работают
- Отделы могут быть разбросаны по стране: отдел кадров в Лондоне, отдел маркетинга в Суонси и т.д.
- Отделы связаны с подразделением компании
- Подразделения связаны с материнской компанией
- С точки зрения классов:
- Сессии является основной таблицей
- Учитель связан с каждой сессией
- Статус предоставляется каждому сеансу. Например, 0 - выполнено, 1 - отменено
- Сессии сгруппированы в "пачки" произвольного размера
- Каждый пакет назначается клиенту
- Сессии является основной таблицей
Я "спроектировал" (точнее, набросал) схему на листе бумаги, пытаясь ее нормализовать до 3-го класса. Затем я подключил его к MySQL Workbench, и это сделало все это красивым для меня:
(Нажмите здесь для полноразмерной графики)
(источник: maian.org)
Примеры запросов, которые я буду выполнять
- Какие клиенты с кредитом все еще остаются неактивными (те, у кого не запланировано обучение в будущем)
- Какова посещаемость на клиента/отдел/подразделение (измеряется идентификатором статуса в каждой сессии)
- Сколько занятий у учителя за месяц
- Пометить клиентов с низкой посещаемостью
- Пользовательские отчеты для отделов кадров с показателями посещаемости людей в их отделе
Вопросы)
- Это сверх силовое или я направляюсь в правильном направлении?
- Приведет ли необходимость объединять несколько таблиц для большинства запросов к значительному снижению производительности?
- Я добавил колонку "lastsession" для клиентов, поскольку это, вероятно, будет общий запрос. Это хорошая идея или мне следует строго нормализовать базу данных?
Спасибо за ваше время