_RVK_
У меня вообще такое чувство что само упоминание об использовании запростов ALTER, CREATE, DROP и т.д. вызывает подсознательный ужас у многих. И только по этой причине выбирается второй вариант, а иногда и первый.
Подсознательный ужас вызывается комментариями более опытных товарищей ;-) К сожалению эти комментарии зачастую не содержат пояснений
почему - только утверждения. Попытаюсь прояснить некоторые
почему
Во-первых, поддежание целостности структуры данных - это достаточно сложное задание даже при постоянном числе таблиц.
Во-вторых, нормализация базы данных, структура которой изменяется динамически невозможна в принципе.
В третьих, кроме структурных изменений, при ALTER, CREATE, DROP и т.д. приходится поддерживать еще и целостность
прав доступа. На этом пункте мне хочется остановиться поподробнее.
Как известно (если кому-то неизвестно - читайте документацию к MySql) для доступа к серверу базы данных необходим логин и пароль. Эти параметры используются для определения
прав доступа - которые определяют, какие действия разрешены конкретному пользователю. К сожалению, многие используют всего один аккаунт с максимальными правами - что не есть хорошо
Хотя MySql позволяет очень тонко ограничить права - вплоть до запрета на просмотр/обновление/вставку нескольких полей отдельной таблицы, при полном доступе к другим полям.
Применение этих ограничений может спасти от написания сотен строк кода, защищающего от sql-инъекций, разгрузить сервер - ведь при использовании аккаунта с ограниченными правами на просмотр можно упростить проверку входных данных (естественно, необходим и аккаунт с более широкими правами при использовании которого проверка производится в полном объеме)