web-dev-qa-db-ja.com

異なるデータベース(iSeriesおよびSQL Server)全体で外部キー参照を解決する方法

DB2 iSeriesデータベースを備えたシステムがあります。システムの一部を書き換え、SQL ServerとEntity Frameworkを使用して実装しています。

もともと、SQL Serverに移行するテーブルとDB2のテーブルとの間にあまり関係がないと信じるようになりました。ただし、外部キー参照がそこにある場所をいくつか見つけています。

データベース全体で外部キー参照を維持する必要がある、このようなシナリオを処理する標準的な方法はありますか?私はいくつかのオプションを考えることができます:

  • 一部のデータをSQL ServerからiSeries上のDB2に複製します。これは、外部キー制約を満たすのに十分です。データが重複しているだけでなく、必要なデータを複製しただけでは制約を満たすためにしか存在しないため、このアイデアは嫌いです。JOINのように、それに役立つようなことは何もできません。
  • ISeriesから外部キー制約を削除し、2つのデータベースのリンクを完全に解除します。これには明らかな問題がありますが、目に見えない利点がある場合に備えて、私はそれを捨てると思いました。
  • ある種のデータベースリンクを使用して、2つを同期させます。これがどのように機能するか、どのように機能するか、またはリンク全体に外部キー制約を設定することが可能である場合でも、私は知りません。この場合、通常の外部キー参照は機能しないと思いますので、おそらくこれをトリガーで行う必要がありますか?

誰か他のオプションを見ていますか、そして最善のアプローチは何でしょうか?

DB2側にSQL Server側への読み取り/書き込み、またはその逆が必要になるものはないと考えています。これにより、アプリケーションからのデータベースアクセスを分離しておくことができます。外部キーの参照を保持するだけだと思います。

3
ChrisC

外部キー制約が元のデータベース内の他のテーブルをポイントしていない場合(つまり、SQL ServerがSQL Serverをポイントしていない場合など)、それらの外部キーを削除します。それらは役に立たない。

それらが他のテーブルを指している場合、おそらく制約を満たすために必要なデータをコピーする必要があります。 (うーん)。そのいずれか、またはその関係を再検討して、おそらく外部キー制約を再度削除してください。

(少なくともDB2 for iで)検討すべきもう1つのことは、情報の制約です。私はDB2 LUWにそれらがあったことを知っています。それらは強制されない制約でした。クエリプランを選択するときにオプティマイザを支援しましたが、実際の制約として強制されていません(違反する可能性があります)。もちろん、これらの副作用として、情報の制約により、必要なデータが見落とされることがあります。

また、SQL Serverに同様の機能があるかどうかは不明です。私はまだそのプラットフォームを学んでいます。

1
Chris Aldrich