2010-10-22 12 views
1

Bon ... J'ai un programme sur lequel je fais de la maintenance.Communiquer avec Informix à partir de SQL Server

Urgh. Même le décrire me fait frémir ... D'accord, d'accord.

Chaque nuit, une base de données s'exécutant sur ce que nous pensons être SQL Server 2000 se connecte à une base de données Informix et la copie dans SQL Server.

Les données Informix/SQL sont accessibles par le programme que je gère, qui stocke ensuite certaines données dans une base de données SQL Server 2000 différente. Ces données doivent avoir des contraintes de clé étrangère sur les données Informix, mais ne le font pas. Plus tard, les données de la base de données SQL sont replacées dans la base de données Informix/SQL et, plus tard, dans la base de données Informix actuelle.

Fondamentalement, le root de mon problème est qu'il n'y a aucune contrainte de clé étrangère ou primaire sur la base de données SQL non-Informix. Eh bien, certaines des tables ont une clé primaire sur une colonne "ID" non significative, mais celles-ci ne sont pas FK'd à d'autres tables.

Ma question est: 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?

Je ferai de mon mieux pour répondre à toutes les questions qui que ce soit a, mais pour autant que je peux dire le raisonnement derrière ces décisions de conception était une véritable folie, donc des raisons ne seront pas particulièrement à venir, car je ne peux pas les résoudre, moi-même ...

+0

Pour clarifier: vous voulez que SQL Server impose ** certaines contraintes de clé sur la base de données informix? Ou voulez-vous simplifier votre vision des données? Si ce dernier est ce que vous voulez, vous allez faire un nettoyage des données sur le serveur SQL et ensuite ajouter des contraintes lorsque vous êtes satisfait que les données sont correctes. –

+0

Je veux que le serveur SQL puisse uniquement créer une ligne s'il peut trouver une clé primaire correspondante dans la base de données Informix. – Frosty840

Répondre

1
  • Yuck!
  • Bad Luck (sur le désordre que vous avez hérité)!
  • Bonne chance (avec votre travail réparant le désordre)!

Quelle version d'Informix et quelle plate-forme (type de machine, o/s) est-il en cours d'exécution?

Y a-t-il une raison (autre que celle-ci de se casser parce que les données sont en désordre) que vous ne pouvez pas mettre à jour le schéma Informix pour appliquer les vraies contraintes de RI. Mais vous avez probablement besoin de savoir à quel point le désordre est de sorte que vous pouvez commencer le processus de nettoyage. IDS (Informix Dynamic Server) possède des 'tables de violations' qui peuvent être utilisées pour suivre les lignes de données problématiques - 'START VIOLATIONS' et 'STOP VIOLATIONS' sont les instructions à rechercher dans le Guide Informix to SQL: Syntax manual Vous pourriez bien besoin de décharger et supprimer les données d'une table avant de commencer à charger les données avec la vérification des violations activé.


Après clarification, la question semble être « Puis-je mettre en place des contraintes d'intégrité référentielle sur les tables dans les bases de données SQL Server qui sont limités par (cf.) tables dans les bases de données Informix? »

La réponse est (malheureusement):

  • Pas

La plupart des SGBD sont peu disposés à avoir des contraintes d'intégrité référentielle bases de données croisées, et encore moins de contraintes croisées SGBD. L'approximation la plus proche serait d'avoir des copies des tables Informix pertinentes dans les bases de données SQL Server, mais cela s'ajoute probablement à la charge de travail de transfert de données.OTOH, le nettoyage des données nécessite probablement que - il pourrait être possible de relâcher cette copie plus tard, une fois que les données sont plus sains. Cela dépend, en partie, de la volatilité des données Informix référencées - à quelle fréquence les lignes sont-elles ajoutées ou supprimées aux tables référencées?

+0

Désolé; par "Informix/SQL" je voulais dire la base de données Informix qui est copiée dans SQL Server. Cela semble lourd et inutile de l'avoir. – Frosty840