MySQL Share table между двумя базами данных - PullRequest
3 голосов
/ 20 марта 2011

Я хочу знать, неправильн ли мой подход здесь

У меня есть простой сайт, на который вы можете зарегистрироваться. Он имеет основную базу данных с именем USERS, в которой есть таблица со списком всех пользователей, а затем для каждого нового пользователя создается новая база данных с именем DB1,DB2,...,DBn. Причина, по которой я это сделал, заключается в том, что на каждого пользователя сохраняется много информации, и я подумал, что это будет лучшим подходом. Однако теперь я сталкиваюсь с проблемой, что пользовательским базам данных нужен доступ к таблице в базе данных USERS (для внешнего ключа), и я не могу понять, как это сделать.

Я признаю, что у меня нет особого опыта работы с MySQL, так что это может быть очень плохим решением для создания новой базы данных для каждого пользователя. Это тот случай? Насколько эффективен MySQL? Могу ли я, например, создать список для (гипотетически) 100 000 пользователей, где у каждого пользователя есть еще 100 записей для, скажем, изображений, которые они загрузили.

Спасибо

Ответы [ 3 ]

6 голосов
/ 28 апреля 2011

Я тоже изучаю ту же проблему.И решение, которое я нашел: http://drupal.org/node/37075

Вы можете создать VIEW, представляющий вашу общую таблицу USERS в каждой базе данных.

mysql> use DB1;
mysql> CREATE VIEW users AS
mysql> SELECT *
mysql> FROM USERS.users
3 голосов
/ 20 марта 2011

Это очень плохое дизайнерское решение.Что вы хотите сделать, это создать единую базу данных для всех ваших таблиц в этом приложении.В вашем примере у вас будет одна база данных (назовите ее MyProject).У вас будет таблица пользователей, назовите ее User, в которой есть все ваши пользовательские записи - 100 000 записей - это маленькая база данных для современного оборудования, так что не беспокойтесь об этом.Тогда у вас будет таблица с именем UserPhoto, которая содержит ссылку на первичный ключ в User, а также любые другие необходимые вам данные.

1 голос
/ 20 марта 2011

Вы можете делать запросы между базами данных, используя синтаксис

db_name.table_name.table_field
...