Первоначальный дизайн базы данных: я перерабатываю? [закрыто]

Фон

Я студент первого курса CS, и я работаю неполный рабочий день для малого бизнеса моего отца. У меня нет никакого опыта в разработке приложений реального мира. Я написал сценарии на Python, некоторые курсовые работы на C, но ничего подобного.

У моего отца небольшой учебный бизнес, и в настоящее время все занятия планируются, записываются и отслеживаются с помощью внешнего веб-приложения. Существует функция экспорта / «отчетов», но она очень общая, и нам нужны конкретные отчеты. У нас нет доступа к фактической базе данных для выполнения запросов. Меня попросили настроить систему пользовательских отчетов.

Моя идея состоит в том, чтобы создать общий экспорт CSV и импортировать их (возможно, с помощью Python) в базу данных MySQL, размещаемую в офисе каждую ночь, откуда я могу выполнять конкретные запросы, которые необходимы. У меня нет опыта работы с базами данных, но я понимаю основы. Я прочитал немного о создании базы данных и нормальных формах.

Мы можем начать иметь международных клиентов в ближайшее время, поэтому я хочу, чтобы база данных не взорвалась, если / когда это произойдет. У нас также есть несколько крупных корпораций в качестве клиентов с разными подразделениями (например, материнская компания ACME, отдел здравоохранения ACME, отдел ухода за телом ACME)

Схема, которую я придумал, следующая:

С точки зрения клиента:Клиенты - это главная таблицаКлиенты связаны с отделом, в котором они работаютОтделы могут быть разбросаны по стране: отдел кадров в Лондоне, отдел маркетинга в Суонси и т. Д.Отделы связаны с подразделением компанииПодразделения связаны с материнской компаниейС точки зрения классов:Сессии является основной таблицейУчитель связан с каждой сессиейСтатус предоставляется каждому сеансу. Например. 0 - Завершено, 1 - ОтмененоСессии сгруппированы в «пачки» произвольного размераКаждый пакет назначается клиенту

Я «спроектировал» (точнее, набросал) схему на листе бумаги, пытаясь ее нормализовать до 3-го класса. Затем я подключил его к MySQL Workbench, и это сделало все это красивым для меня:
(Нажмите здесь для полноразмерной графики)

альтернативный текст http://maian.org/img/schema.png

Примеры запросов, которые я буду выполнятьКакие клиенты с кредитом все еще остаются неактивными (те, у кого не запланировано обучение в будущем)Какова посещаемость на клиента / отдел / подразделение (измеряется идентификатором статуса в каждой сессии)Сколько занятий у учителя за месяцПометить клиентов с низкой посещаемостьюПользовательские отчеты для отделов кадров с показателями посещаемости людей в их отделеВопросы)Это сверх силовое или я направляюсь в правильном направлении?Приведет ли необходимость объединять несколько таблиц для большинства запросов к значительному снижению производительности?Я добавил колонку «lastsession» для клиентов, поскольку это, вероятно, будет общий запрос. Это хорошая идея или мне следует строго нормализовать базу данных?

Спасибо за ваше время

Ответы на вопрос(11)

Ваш ответ на вопрос