Слияние и псевдоним двух таблиц MySQL - PullRequest
1 голос
/ 01 марта 2010

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

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

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

Ответы [ 2 ]

1 голос
/ 01 марта 2010

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

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

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

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

По мере того, как приложения становятся больше и сложнее, регрессионное тестирование становится все более сложным. Крайне важно думать об этом как можно больше, потому что рефакторинг БУДЕТ необходим (при условии, что приложение ВСЕ разрабатывается или поддерживается), а также из-за плохих регрессий.

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

0 голосов
/ 01 марта 2010

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

Это предложение не имеет смысла, болтун. В MySQL (или в большинстве СУБД) две таблицы не могут использовать столбцы).

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

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

С.

...