MySQL - Альтернатива просмотров - PullRequest
2 голосов
/ 02 декабря 2008

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

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

Ответы [ 4 ]

2 голосов
/ 02 декабря 2008

Быстрый и очень грязный способ, который приходит на ум, - это создать подкласс 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 ... ну, это будет не так просто.

2 голосов
/ 02 декабря 2008

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

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

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

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

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

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

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

1 голос
/ 02 декабря 2008

Уч. Помимо DeLorean и конденсатора потока или модернизации сервера, я не знаю ни одного простого способа обойти эту проблему. Много изменений кажется необходимым.

0 голосов
/ 02 декабря 2008

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

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