Table1:
Все, включая кухонную раковину. Даты в неправильном формате (год последний, поэтому вы не можете сортировать по этому столбцу), числа, хранящиеся в виде VARCHAR, полные адреса в столбце «улица», имя и фамилия в столбце имени, город в столбце фамилии, неполные адреса, строки, которые обновить предшествующие строки, перемещая данные из одного поля в другое на основе некоторого набора правил, которые изменились за эти годы, дублированных записей, неполных записей, записей мусора ... вы называете это ... о, и, конечно, не TIMESTAMP или PRIMARY КЛЮЧЕВАЯ колонка в поле зрения.
Table2:
Любая надежда на нормализацию исчезла из окна после взлома этого ребенка.
У нас есть строки для каждой записи И обновления строк в первой таблице. Таким образом, дубликаты, как будто нет завтрашнего дня (стоит 800 МБ), и столбцы, такие как Phone1 Phone2 Phone3 Phone4 ... Phone15 (они не называются телефонными. Я использую это для иллюстрации) Ключ foriegn ... ну, предположим. Есть три кандидата в зависимости от того, какие данные были в строке в таблице1
Таблица3:
Может ли быть еще хуже. О да.
«Внешний ключ - это комбинация столбцов VARCHAR, состоящая из черточек, точек, цифр и букв! Если это не обеспечивает совпадение (что часто бывает), то второй столбец аналогичного кода продукта должен. Столбцы, имена которых содержат НИКАКОЙ корреляции с данными внутри них, а также с обязательным Phone1 Phone2 Phone3 Phone4 ... Phone 15. В таблице 1 есть столбцы, дублированные, а столбца TIMESTAMP или PRIMARY KEY нет.
Таблица 4: была описана как работа в процессе и может быть изменена в любой момент. Это существенно похоже на других.
В строках, близких к 1 м, это БОЛЬШОЙ беспорядок. К счастью, это не мой большой беспорядок. К сожалению, мне приходится извлекать из него композитную запись для каждого «клиента».
Первоначально я разработал четырехэтапный перевод Таблицы 1, добавив ПЕРВИЧНЫЙ КЛЮЧ и преобразовав все даты в сортируемый формат. Затем еще пара шагов запросов, которые возвращали отфильтрованные данные, пока у меня не было Table1, где я мог бы использовать его для извлечения из других таблиц, чтобы сформировать композит. После нескольких недель работы я довел это до одного шага, используя некоторые приемы. Так что теперь я могу указать моему приложению на беспорядок и вытащить красивую чистую таблицу составных данных. К счастью, мне нужен только один из телефонных номеров для моих целей, поэтому нормализация моей таблицы не является проблемой.
Однако именно здесь начинается настоящая задача, потому что каждый день сотни сотрудников добавляют / обновляют / удаляют эту базу данных способами, которые вы не хотите представлять, и каждую ночь я должен получать новые строки.
Поскольку существующие строки в любой из таблиц могут быть изменены, а столбцы TIMESTAMP ON UPDATE отсутствуют, мне придется обратиться к журналам, чтобы узнать, что произошло. Конечно, это предполагает наличие двоичного журнала, которого нет!
Представление концепции прошло как свинцовый воздушный шар. С таким же успехом я мог бы сказать им, что их детям предстоит экспериментальная операция. Они не совсем привет технологий ... если вы не собрались ...
Ситуация немного деликатная, поскольку у них есть некоторая ценная информация, которую моя компания очень хочет. Я был послан высшим руководством крупной корпорации (вы знаете, как они), чтобы «сделать это».
Я не могу придумать другого способа обработки ночных обновлений, кроме анализа файла журнала bin с помощью еще одного приложения, чтобы выяснить, что они сделали с этой базой данных в течение дня, и затем соответствующим образом скомпоновать мою таблицу. Мне действительно нужно только взглянуть на их таблицу1, чтобы понять, что делать с моим столом. Другие таблицы просто предоставляют поля для очистки записи. (Использование MASTER SLAVE не поможет, потому что у меня будет дубликат беспорядка.)
Альтернативой является создание уникального хеша для каждой строки их таблицы1 и построение хеш-таблицы. Затем я каждую ночь просматривал ВСЮ базу данных, проверяя, совпадают ли хэши. Если они этого не делают, я бы прочитал эту запись и проверил, существует ли она в моей базе данных, если это произойдет, я бы обновил ее в своей базе данных, если нет, то это будет новая запись, и я вставлю ее. Это уродливо и не быстро, но синтаксический анализ двоичного файла журнала также не очень приятен.
Я написал это, чтобы помочь разобраться в проблеме. частое обращение к кому-то другому помогает прояснить проблему, делая решение более очевидным. В этом случае у меня просто усиливается головная боль!
Ваши мысли будут высоко оценены.