Префикс MySQL таблиц или многих баз данных MySQL?

Итак, во-первых, я студент. Я разрабатываю приложение, в котором другие студенты могут иметь доступ к базе данных MySQL. В принципе, я хотел избавить студентов от необходимости поиска хостинга или даже установки MySQL на своих компьютерах. Другим плюсом является тот факт, что они могут представлять свои работы в классе, просто просматривая веб-сайт. Итак, моя идея заключалась в том, чтобы использовать одну и ту же базу данных для всех и добавить систему входа для студентов. Таким образом, я могу связать префикс для каждого ученика, и они могут выполнять любой тип запросов, не беспокоясь, столкнутся ли они с чьей-то таблицей, потому что система будет автоматически префикс их запросов. Моя идея состояла в том, чтобы ограничить количество таблиц и строк, которые может иметь каждый пользователь, что не должно быть сложным с парсером. Это не обязательно должно быть парсером в PHP, это может быть в perl или python. PHP просто удобнее. .NET будет более неприятным из-за Windows

Кстати, каждый класс «введения в системы баз данных» насчитывает около 50 студентов, и есть 3 класса, поэтому он может охватить около 150 студентов …

Например, сотрудники SELECT * FROM должны стать SELECT * FROM prefix_employees. Я не знаю, как будет выглядеть запрос, он может стать довольно сложным, поэтому мне, вероятно, понадобится хорошо написанный синтаксический анализатор, который я еще не нашел для PHP ,

Спасибо, ребята, я надеюсь,

К сожалению, у MySQL нет (AFAIK) схем, поскольку некоторые другие базы данных (например, PostgreSQL ) имеют их (для разделения содержимого (таблицы и т. Д.) Логически в пределах одной базы данных).

Но я бы определенно пошел на отдельный сценарий баз данных.

Ваш синтаксический анализатор (с префиксом sheme) будет разбит (невольно и, возможно, с готовностью), если вы не захотите наложить слишком много времени на выполнение этой работы.

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

Таким образом, каждый студент имеет свой логин / пароль, предпочтительно с базой данных с тем же именем, на которой у него есть все права (это может быть сделано автоматически с помощью phpMyAdmin) и может работать, не мешая другим студентам. Вы можете быть уверены, что некоторые попытаются сломать вашу безопасность, как бы вы ни старались и насколько вы готовы. Кластеризация их в разных базах данных не оставляет им выбора, кроме как пытаться получить доступ администратора к вашей базе данных, что будет довольно сложно, если вы будете поддерживать обновленный сервер и достаточно сложные пароли (и вы не храните их в ящике на " читаемый всем «.txt-файлом на вашем университетском сервере.

Кроме того, вы сможете отслеживать дисковое пространство, использование и т. Д. Каждой базы данных по отдельности, что проще, чем смотреть на таблицы отдельно.

В зависимости от ваших точных требований вы можете использовать разрешения таблиц, чтобы один из студентов не мог изменять (или просматривать) данные у другого ученика. Вам все равно понадобится процесс, позволяющий студентам создать новую таблицу с назначенным префиксом (и создать соответствующую запись разрешений), но после ее создания БД будет контролировать доступ по всем запросам, поэтому вам не придется (просто не нужно позволяют учетным записям непосредственно создавать / изменять таблицы).

Что касается квоты, я не знаю, что MySQL напрямую поддерживает систему квот, но вы можете создавать файлы, которые поддерживают таблицы для каждого пользователя в отдельном каталоге, и использовать системы квот уровня ОС для ограничения использования дискового пространства.