PreNote: иначе мытье рук; это работа над проектом Brownfield
У меня есть таблица " ProductLine " следующим образом
| ProductLineID (pk) | ProductID (fk) | ResellerID (fk) | Other stuff |
|--------------------|----------------|-----------------|-------------|
| 1 | 28 | 298818 | -- |
В текущей системе имеется таблица строк шаблона продукта, которая создает набор линий продукта каждый раз, когда создается новый посредник, связанный с этим посредником. Идея заключалась в том, что если этот посредник пожелал отредактировать продукт для своей организации, он был бы отображен на основе их учетной записи.
Эти продуктовые линейки используются в таблице линия продажи , которая связана с таблицей продаж (которая связана с таблицей корзины).
Существует несколько таблиц, подключенных к производственным линиям по разным причинам.
То, на что я обращал внимание, - это создание дублированной копии продуктовых линеек и отбрасывание некоторых данных, так что будет создана только новая строка ЕСЛИ посредник внес изменение; таким образом, сокращая страницу с> 124 000 строк до 69 (никто не использовал функциональность в течение 5 лет).
Затем, используя в качестве справки старую таблицу ProductLine , изменяя существующие данные ( ProductLineId в таблице строк продажи), чтобы указать на новый ProductLineID , прочитав оригинальные строки ProductID и найдя новый совпадающий LineID (по одному на каждый продукт).
Мне было интересно, как лучше всего это сделать; на ум приходит курсор, но он стремится вывести DBA издалека с помощью вил, и мне, вероятно, потребуется выполнить аналогичный запрос для нескольких таблиц, поэтому чем менее болезненным будет SQL, тем лучше.
Просто чтобы сделать визуализацию немного проще, линия продажи выглядит следующим образом
| SaleLineId (pk) | SaleID (fk) | ProductLineId (fk) | Price |
|-----------------|-------------|--------------------|-------|
| 1992 | 29 | 10283 | 9.00 |
Extra
Я планирую переименовать старую таблицу ProductLine в LegacyProductLine.
Затем dedupe + вставьте строки продуктов оттуда в чистую таблицу ProductLineTable.
Затем мне нужно заменить ProductLineId в SalesLine (и других) новым ProductLineId.
LegacyProductLine не будет знать, что такое ProductLineID в ProductLineTable; поэтому я рассматривал ProductID как способ их сопоставления, поскольку других подходящих параметров нет.
+-----------------+ +-----------------+ +------------------+
|LegacyProductLine| | ProductLine | | SaleLine |
|-----------------| |-----------------| |------------------|
|ProductLineId PK | | ProductLineID PK| | SaleLineId PK |
|ProductName | | ProductName | | ProductLineId FK |
|... some stuff | | ... Some stuff | | Charge |
|ResellerID FK | | | | |
|ProductID FK | | ProductId | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | +------------------+
| | | |
| | | |
| | | |
| | | |
+-----------------+ +-----------------+
200K rows 26 Rows
Mostly Duplicates Deduped Data
Устаревшая таблица является временной только для справки и будет удалена.
Мне нужно изменить ProductLineID в SaleLine Table .
Таблица SaleLine в настоящее время содержит ProductLineId из Legacy Table ; Их необходимо обновить, чтобы использовать ProductLineId в таблице ProductLine .