Фон
Я студент першого курсу, і працюю неповний робочий день для малого бізнесу тата. Я не маю досвіду в розробці додатків у реальному світі. Я написав сценарії в Python, деякі курсові роботи на C, але нічого подібного.
У мого тата є невеликий навчальний бізнес, і зараз усі заняття заплановані, записуються та проводяться через зовнішню веб-програму. Існує функція експорту / "звітів", але вона є загальною, і нам потрібні конкретні звіти. У нас немає доступу до фактичної бази даних для запуску запитів. Мене попросили створити власну систему звітності.
Моя ідея - створити загальний CSV-експорт та імпорт (можливо, з Python) їх у базу даних MySQL, що розміщується в офісі щовечора, звідки я можу запускати конкретні запити, які потрібні. Я не маю досвіду роботи з базами даних, але розумію основи. Я трохи прочитав про створення бази даних та звичайні форми.
Ми можемо незабаром почати мати міжнародних клієнтів, тому я хочу, щоб база даних не вибухнула, якщо / коли це станеться. Наразі у нас є кілька великих корпорацій як клієнтів, що мають різні підрозділи (наприклад, материнська компанія ACME, відділ охорони здоров'я ACME, відділ догляду за тілом ACME)
Схема, яку я придумала, така:
- З точки зору клієнта:
- Клієнти - це основна таблиця
- Клієнти пов'язані з відділом, в якому працюють
- Департаменти можуть бути розкидані по країні: HR в Лондоні, Маркетинг у Свонсі тощо.
- Департаменти пов'язані з підрозділом компанії
- Підрозділи пов'язані з материнською компанією
- З точки зору занять:
- Сесії - це основна таблиця
- Викладач пов'язаний з кожним заняттям
- Кожному сеансу надається statusid. Наприклад 0 - завершено, 1 - скасовано
- Сесії групуються в "пакети" довільної величини
- Кожен пакет призначається клієнту
- Сесії - це основна таблиця
Я «сконструював» (більше схожий на накреслений) схему на аркуші паперу, намагаючись тримати її нормалізованою до 3-го класу. Потім я підключив його до MySQL Workbench, і це зробило все для мене гарним:
( Клацніть тут для повнорозмірної графіки )
(джерело: maian.org )
Приклад запитів я буду виконувати
- Клієнти з кредитом все ще залишаються неактивними (ті, хто не має запланованого класу в майбутньому)
- Який показник відвідуваності кожного клієнта / відділу / підрозділу (вимірюється ідентифікатором статусу в кожному сеансі)
- Скільки класів мав учитель за місяць
- Прапорці клієнтів, які мають низьку відвідуваність
- Спеціальні звіти для відділів кадрів із відвідуванням відвідувачів підрозділів
Питання (и)
- Це переосмислене чи я рухаюся правильним шляхом?
- Чи призведе до необхідності приєднання декількох таблиць для більшості запитів до великого успіху?
- Я додав стовпчик "lastsession", оскільки це, ймовірно, буде загальним запитом. Це гарна ідея чи я повинен тримати базу даних суворо нормалізованою?
Дякую за ваш час
divisions
має стовпчик з ім'ям divisionid
. Ви не вважаєте це зайвим? Просто назвіть це id
. також імена вашої таблиці, включаючи _has_
: я б видалив це і просто назвав його, наприклад cities_departments
. ваші DATETIME
стовпці повинні мати тип, TIMESTAMP
якщо вони не є значеннями для введення користувачем. Я думаю, що це гарна ідея мати cities
та countries
таблиці. ви можете зіткнутися з проблемою, обмежуючи таблиці єдиною status
. Подумайте про використання INT
та виконайте побізні порівняння на ньому, тож ви можете там провести більше значення