Другой префикс таблицы для одной таблицы? - PullRequest
1 голос
/ 16 ноября 2011

Гипотетически, скажем, у меня было несколько установок какого-то странного программного обеспечения, управляемого MySQL / PHP. Это одно и то же программное обеспечение, поэтому структура таблиц базы данных одинакова для всех установок. Я хочу, чтобы программа использовала другой префикс базы данных только для одной таблицы. В частности, пользовательская таблица. Допустим, установки установлены следующим образом:

  • Основная установка: / home / www / main, база данных main, префикс is1
  • Вторая установка: / home / www / second, основная база данных, префикс is2
  • Третья установка: / home / www / третий, база данных, префикс is3

Итак, я хочу сказать второй установке и третьей установке извлечь из таблицы пользователей префикс is1 для своих данных через эту таблицу. Таким образом, любой пользователь, который регистрируется при основной установке, также регистрируется на втором и третьем, и наоборот. Возможно ли это, и как бы я это сделал, если это так? Даже если это просто обходной путь, который дает тот же базовый результат, я был бы счастлив.

Ответы [ 3 ]

2 голосов
/ 16 ноября 2011

Если вы не хотите изменять исходный код PHP приложения, и он еще не настраивается в этом отношении, тогда другой вариант - изменить базу данных, изменив is2users и is3users на представления * 1003. *:

DROP TABLE is2users;
CREATE VIEW is2users AS SELECT * FROM is1users;
DROP TABLE is3users;
CREATE VIEW is3users AS SELECT * FROM is1users;

(см. http://dev.mysql.com/doc/refman/5.0/en/views.html для получения общей информации о представлениях, http://dev.mysql.com/doc/refman/5.0/en/create-view.html для получения дополнительной информации о CREATE VIEW.)

В зависимости от приложения, это может не работать идеально - например, приложение может кэшировать некоторую информацию в памяти (например, текущее значение последовательности идентификаторов) - но оно будет , вероятно, Работа. Протестируйте его, прежде чем запускать в производство!

0 голосов
/ 16 ноября 2011

Настройка этого проста, в схеме. Вы упоминаете «установки», что означает, что вы используете какую-то упакованную библиотеку, которая, вероятно, содержит файл конфигурации, в котором вы можете изменять различные параметры, и есть вероятность, что одним из параметров является префикс таблицы. Если опция префикса таблицы отсутствует, вы можете просмотреть код установки, найти расположение схемы и вручную изменить префикс для каждой установки.

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

То, что вы описываете, возможно, но потребует некоторого пользовательского кода.

0 голосов
/ 16 ноября 2011

Ваш php-код, вероятно, выглядит примерно так: cfg.php:

$prefix = 'is3'

и что-то вроде user.model.php:

$sql = 'SELECT * FROM `'.$prefix.'users`';

.изменить в двух из трех установок код для работы с таблицей «пользователи».Но это кажется слишком опасным.

...