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