Как заменить несколько таблиц SQL, не нарушая неизвестные зависимости? - PullRequest
0 голосов
/ 08 сентября 2018

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

Вот что у меня сейчас есть:

Набор из 10 таблиц, которые при преобразовании из "цитаты" в "политику" по сути копируют свои данные из одной таблицы в другую.Эти таблицы имеют несколько сущностей (отчеты, программное обеспечение, другие элементы базы данных, динамически генерируемые), зависящих от них.

Current Situation Sample

Что я хочу сделать:

Создать новую схему таблиц, которая будет действительно реляционной (из этих 20 таблиц я мог быупасть примерно на 15), но таким образом, что существующие таблицы «кажутся» существующими так, как они есть во всем, что от них зависит.

What I want

На втором изображении,Я хочу, чтобы все, что ожидает первое изображение, получило его, но за этим на самом деле стоит более стандартизированная реляционная модель.

Я рассмотрел:

  1. Создайте новые таблицы, затем настройте триггеры для перемещения данных по мере необходимости.Мне не нравится это решение, так как в лучшем случае оно кажется подверженным ошибкам.
  2. Оставьте таблицы как есть и медленно перемещайте все зависимости в функции или хранимые процедуры, пока я не буду достаточно уверен, что большинство зависимостей имеютбыл идентифицирован.Затем переключитесь на новую схему с помощью этих новых процедур / функций / и т. Д.
  3. Создайте новую схему, укажите, что известно новой схеме.Построить представления, которые имитируют исходные таблицы, и перенаправлять запросы туда, где они обнаружены (грязно)

У нас уже есть серьезные проблемы с производительностью при текущей настройке, и я пытаюсь заранееударить и исправить этот сценарий.Больше всего меня беспокоит то, что это транзакционные таблицы, в которых в настоящее время хранится около 500 000 записей (вы можете понять, почему избавление от 2/3 из них так привлекательно).Кроме того, к наборам таблиц данных и кавычек добавляются новые записи при каждой новой транзакции.

ВОПРОС: Как выполнить этот переход без внесения изменений в код в другом месте?Как заставить все остальное «думать», что старая схема таблиц все еще существует, но использовать новую схему в будущем?

...