Взаимодействие с Informix из SQL Server

Верно... У меня есть программа, которую я обслуживаю.

Ург. Даже описание вызывает у меня содрогание... Ладно, ладно.

Каждую ночь база данных, работающая на том, что мы считаем SQL Server 2000, подключается к базе данных Informix и копирует ее в SQL Server.

К данным Informix/SQL обращается программа, которую я сопровождаю, которая затем сохраняет некоторые данные в другой базе данных SQL Server 2000. Эти данные должны иметь ограничения внешнего ключа для данных Informix, но не имеют.

Далее данные из базы данных SQL помещаются обратно в базу данных Informix/SQL, а еще позже — обратно в реальную базу данных Informix.

По сути, корень моей проблемы заключается в том, что в базе данных SQL, отличной от Informix, нет ограничений по внешнему или первичному ключу. Что ж, некоторые таблицы имеют первичный ключ в не имеющем смысла столбце «ID», но они не привязаны FK к каким-либо другим таблицам.

Мой вопрос: Is it possible to link SQL Server 2000 to the native Informix database in some way, so that I can add foreign key constraints within the SQL database so that SQL Server can only create rows when it can refer to existing rows within the Informix database?

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


person Frosty840    schedule 22.10.2010    source источник
comment
Чтобы уточнить: вы хотите, чтобы SQL Server применял некоторые ключевые ограничения в базе данных informix? Или вы хотите упростить представление данных? Если последнее — это то, что вам нужно, вы должны выполнить некоторую очистку данных на SQL Server, а затем добавить ограничения, когда будете удовлетворены правильностью данных.   -  person David T. Macknet    schedule 22.10.2010
comment
Я хочу, чтобы сервер SQL мог создать строку только в том случае, если он может найти соответствующий первичный ключ в базе данных Informix.   -  person Frosty840    schedule 24.10.2010


Ответы (1)


  • Фу!
  • Невезение (на беспорядке, который вы унаследовали)!
  • Удачи (в вашей работе по исправлению беспорядка)!

Какая версия Informix и на какой платформе (типе машины, ОС) она работает?

Есть ли причина (кроме того, что это сломается из-за беспорядка данных), по которой вы не можете обновить схему Informix, чтобы обеспечить соблюдение реальных ограничений RI. Но вам, вероятно, нужно знать, насколько плох беспорядок, чтобы вы могли начать процесс очистки. IDS (Informix Dynamic Server) имеет «таблицы нарушений», которые можно использовать для отслеживания проблемных строк данных. «START VIOLATIONS» и «STOP VIOLATIONS» — это операторы, которые следует искать в руководстве Informix Guide to SQL: Syntax. необходимо выгрузить и удалить данные из одной таблицы перед началом загрузки данных с включенной проверкой нарушений.


После уточнения возникает вопрос: «Могу ли я установить ограничения ссылочной целостности для таблиц в базах данных SQL Server, которые ограничены (ссылаются) таблицами в базах данных Informix?»

Ответ на это (к сожалению):

  • No

Большинство СУБД не хотят иметь ограничения ссылочной целостности между базами данных, не говоря уже об ограничениях между СУБД.

Ближайшим приближением было бы наличие копий соответствующих таблиц Informix в базах данных SQL Server, но это, вероятно, увеличивает нагрузку на передачу данных. OTOH, очистка данных, вероятно, требует этого - возможно, позже можно будет расслабиться при копировании, когда данные станут более нормальными. Частично это зависит от изменчивости данных Informix, на которые ссылаются, — как часто строки добавляются или удаляются в таблицах, на которые ссылаются.

person Jonathan Leffler    schedule 22.10.2010
comment
Извиняюсь; под Informix/SQL я имел в виду базу данных Informix, которая копируется на SQL Server. Это кажется громоздким и ненужным. - person Frosty840; 24.10.2010