Префикс таблиц MySQL или много баз данных MySQL? - PullRequest
1 голос
/ 18 декабря 2009

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

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

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

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

Ответы [ 3 ]

8 голосов
/ 18 декабря 2009

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

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

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

2 голосов
/ 18 декабря 2009

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

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

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

0 голосов
/ 18 декабря 2009

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

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

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