Методы сравнения данных между различными схемами

Существуют ли методы для сравнения одних и тех же данных, хранящихся в разных схемах? Ситуация примерно такая. Если у меня есть БД со схемой А, и он хранит данные для функции, скажем, в 5 таблицах. Схема A -> Схема B выполняется во время процесса обновления. Во время процесса обновления применяется некоторая логика преобразования, и данные хранятся в 7 таблицах на схеме B. Что мне нужно, так это какой-то способ проверки целостности данных, в основном мне пришлось бы сравнивать различные схемы с учетом логики преобразования. Если не считать некоторых пользовательских sprocs t-sql для сравнения данных, есть ли альтернативный метод? Я склоняюсь к Python, чтобы автоматизировать это, есть ли какие-нибудь модули Python, которые могут мне помочь? Чтобы лучше проиллюстрировать мой вопрос, следующая диаграмма - это грубая картина одного из множества наборов данных, которые мне нужно сравнить,

Table1Src                             Table1Dest
  |                                       |
  --ID(Primary Key)                       --ID(Primary Key)
  --Property1                             --Property1
  --Property2                             --Property5
  --Property3                             --Property6

Table2Src                             Table2Dest
  |                                       |
  --ID(Foreign Key->Table1Src)            --ID(Foreign Key->Table1Dest)
  --Property4                             --Property2
                                          --Property3

                                      Table3Dest
                                          |
                                          --ID(Foreign Key->Table1Dest)
                                          --Property4
                                          --Property7
12.12.2008 05:09:04
Это немного зависит от того, сколько данных мы говорим, и насколько строгим должно быть ваше сравнение. Данные в основном в том же порядке? Являются ли удостоверения личности последовательными? Вам нужно сравнивать их строго в зависимости от типа данных? Все эти вопросы повлияют на стратегию.
danieltalsky 12.12.2008 06:24:05
Показать базовую схему каждой схемы, чтобы я мог иметь представление?
danieltalsky 12.12.2008 06:24:47
Спасибо за ответ, у меня есть около 10-15 сравнений, чтобы выполнить разброс по 40-50 таблицам. Большинство сравнений имеют согласованные идентификаторы, но во время преобразования к месту назначения будут добавлены дополнительные данные, которые мне нужно будет классифицировать. Строгое сравнение не нужно.
vholstein 12.12.2008 10:29:57
Я
vholstein 12.12.2008 10:33:39
3 ОТВЕТА
РЕШЕНИЕ

По сути, вы должны создать представления объектов для обеих версий схемы, а затем сравнить объекты. Лучше всего это сделать, если все они помещаются в память одновременно; если нет, вам нужно перебрать все объекты в одном представлении, извлечь соответствующий объект в другом представлении, сравнить их, а затем сделать то же самое наоборот.

Трудной частью может быть получение представлений объекта; Вы можете видеть, может ли SQLAlchemy удобно использоваться для ваших таблиц. SQLAlchemy, в принципе, способен отображать существующие определения схемы на объекты.

1
12.12.2008 05:43:31

Я успешно использовал SQLAlchemy для миграции между одной схемой и другой - это аналогичный процесс (как указано Martin v. Löwis) для сравнения. Особенно, если вы используете метод .equals (другой).

0
12.12.2008 06:52:54

Сделайте «представления» для обеих схем, которые переводят в одно и то же бизнес-представление данных. Экспортируйте эти представления в плоские файлы, и затем вы сможете использовать любую простую утилиту сравнения файлов vanilla, чтобы сравнить и указать на различия.

2
12.12.2008 06:56:48