2010-02-28 3 views
1

У меня есть две таблицы: members и members_data.
Они оба имеют один и тот же уникальный автоинкремент id ключ и уникальный username полей.Слияние и псевдоним двух таблиц MySQL

Я хотел бы объединить две таблицы в одну members стол, НО У меня есть ~ 50 сценариев с помощью members & members_data ссылки. Мне также нужна какая-то настройка псевдонима, чтобы мои запросы members_data указывали на новую таблицу members.

Возможно ли это?

ответ

1

Вы можете эффективно использовать таблицу в другой таблице, создав представление, которое только делает SELECT * из другой таблицы. Это, однако, не очень хорошая вещь, чтобы сделать:

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

Однако, в зависимости от того, насколько легко тестировать эти «50 скриптов» и насколько они важны (подсказка: очень важный код, который трудно проверить, может стать настоящим тормозом для эффективной разработки), создавая представление МОЖЕТ быть прагматичной задачей в краткосрочной перспективе (а краткосрочные решения, как правило, сохраняются на протяжении многих лет или навсегда в реальных приложениях).

Я настоятельно рекомендую вам, если это возможно, изменить «50 скриптов» и выполнить все испытания, необходимые для выпуска такого изменения. В нашей команде мы внесли изменения (в одном выпуске), которые изменили намного больше, чем «50 скриптов», но тестирование, конечно, оказалось сложным (или, по крайней мере, трудоемким).

Поскольку приложения становятся все более сложными, регрессионное тестирование становится более сложным. Крайне важно подумать об этом как можно больше, потому что рефакторинг станет необходимым (при условии, что приложение будет развито или поддерживается AT ALL), а также потому, что регрессии плохи.

** Все ваши таблицы, виды и т. Д., Как правило, написаны и в вашей системе управления исходным кодом!

+0

от того, что я только что прочитал, я не мог использовать представление, так как он не будет работать с запросами UPDATE (мне понадобится обновить members_data, чтобы на самом деле обновить элементы после того, как я удалил таблицу.) Я думаю, что я «Мне нужно изменить сценарии, поскольку он говорит, что просмотры также не оптимизированы, и я не могу иметь это надолго! благодарит за помощь – Juddling

+0

Вы должны иметь возможность ОБНОВЛЯТЬ представление, если оно не определено таким образом, что обновления не имеют смысла. A «SELECT * from t» должен быть в порядке. – MarkR

0

Они оба имеют один и тот же уникальный идентификатор автоинкремента и уникальные поля имени пользователя.

Это предложение является бессмысленным gobbledy-gook. В MySQL нет (или большинства rDBMS, что две таблицы могут совместно использовать столбцы).

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

Предполагая, что вы действительно имеете в виду, что обе таблицы имеют поле имени пользователя, которое является уникальным и имеет одинаковый размер в обеих таблицах, и что обе таблицы имеют столбец с автоинкрементами с именем id, тогда все намного проще - в этом случае создать составную таблицу, реализующую столбцы как из базовых таблиц, так и перенести данные в нее и заменить 2 оригинальные таблицы на представления.

C.

+0

Извините, я не должен был говорить об этом, и, может быть, если бы я сказал вам, что у обоих было такое же количество строк, которые бы помогли. – Juddling

+0

строк? Нет, это совсем не помогает. – symcbean

+0

Каждый член имеет уникальный идентификатор Каждый член имеет строку в обоих членах и members_data – Juddling

Смежные вопросы