MySQL - Альтернатива представлений

Я разработал приложение для работы с MySQL 5, которое использует представления для доступа к основным фрагментам данных. Оказывается, наш производственный сервер использует MySQL 4, в который не включены представления.

Есть ли у кого-нибудь быстрый и грязный способ справиться с этим, не требующий переписывания всего моего кода?

Обновить рабочий сервер? :)

Greg 02.12.2008 00:32

Черт, я знал, что MySQL - это игрушка, но понятия не имел ...

Paul Tomblin 02.12.2008 00:40

@Paul: MySQL 5.0 был выпущен более трех лет назад с поддержкой представлений, триггеров и хранимых процедур. Старые версии любого программного обеспечения можно считать слабыми.

Bill Karwin 02.12.2008 00:53
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
2
3
3 015
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

К сожалению, без обновления до MySQL 5, вероятно, нет.

Ответ принят как подходящий

Это, безусловно, указывает на важность использования одной и той же технологии в средах разработки и производства!

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

Ваши варианты на данный момент:

  • Перепишите код приложения, чтобы дублировать данные в денормализованных таблицах, чтобы они соответствовали вашим представлениям.

  • Обновите производственную базу данных до MySQL 5.0. Если вы говорите о хостинг-провайдере, обратитесь к этому провайдеру и спросите, есть ли у него опция для MySQL 5.0, в противном случае вам нужно переехать к провайдеру, у которого есть такая возможность.

Я бы порекомендовал второй путь, это будет намного меньше работы, чем написание кода для управления повторяющимися данными.

Обратите внимание, что MySQL 4.1 был выпущен в качестве производственного программного обеспечения более четырех лет назад. Активная поддержка этого выпуска закончилась в 2006 году. Расширенная поддержка MySQL 4.1 заканчивается 31 декабря 2009 года. См. http://www.mysql.com/about/legal/lifecycle/

Спасибо. Это, к сожалению, мой работодатель. У них разные среды на рабочих серверах и серверах разработки, и они даже не удосуживаются сообщить об этом одному из своих программистов. Обновление не вариант. Интересно, что бы об этом сказал тест Джоэла ??

MattBelanger 02.12.2008 00:44

Если вам не солгал о производственном сервере, я бы сказал, что вы на 50% виноваты в том, что не спросили, что работает на производственном сервере, прежде чем потратить много времени на использование специфичных для версии функций.

Bill Karwin 02.12.2008 00:50

@Bill - Ложь - сильное слово. Старший разработчик на самом деле не проверял, когда я спросил о версии на реальном сервере - он просто заверил меня, что если она работает в среде разработки, все будет хорошо.

MattBelanger 02.12.2008 01:08

Ой. Кроме DeLorean и конденсатора потока или обновления сервера, я не знаю простого способа обойти эту проблему. Кажется, необходимы большие изменения.

На ум приходит быстрый и очень грязный способ - создать подкласс DBI и переписать там SQL. Конечно, зависит от того, для чего вы используете представления, и если вы имеете в виду MySQL 4.0 (не имеет подзапросов) или MySQL 4.1 (есть подзапросы).

Если у вас версия 4.1, вы можете включить:

CREATE VIEW foo AS
  SELECT a, b, c FROM real_table WHERE fooable = 1;

SELECT * FROM foo;

в

SELECT v1.* FROM (
  SELECT a, b, c FROM real_table WHERE fooable = 1
) v1;

По крайней мере, последний синтаксис работает в 5.0.x, я думаю, что он должен быть и в 4.1.x.

Если у вас 4.0 ... ну, это будет не так просто.

Вы также можете изменить имена столбцов, используя псевдонимы столбцов во внешнем запросе. В любом случае, как вы говорите, это сработает для 4.1, но я не уверен, что это особенно быстро. :-(

Bill Karwin 02.12.2008 01:30

Да, это может быть не так быстро. Это определенно то, что нужно проверить.

derobert 02.12.2008 18:11

Другие вопросы по теме